這個工作了:
// 連接并登錄到FTP服務(wù)器 $ftp_server = "主機"; $ftp_username = "用戶名"; $ftp_userpass = "密碼"; $ftp_conn = ftp_connect($ftp_server) or die("無法連接到 $ftp_server"); $login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass); $file ="$abc"; // 上傳文件 if (ftp_put($ftp_conn, "/$abc" , $file, FTP_ASCII)){ echo "成功上傳文件 $file。"; } else { echo "上傳文件 $file 出錯"; } // 關(guān)閉連接 ftp_close($ftp_conn);
導(dǎo)致ftp_put
(或任何其他傳輸指令,如ftp_get
、ftp_nlist
、ftp_rawlist
、ftp_mlsd
)出現(xiàn)問題的最常見原因是PHP預(yù)設(shè)為主動模式。在99%的情況下,需要切換到被動模式才能使傳輸正常運作。使用ftp_pasv
函數(shù)。
$connect = ftp_connect($ftp) or die("無法連接到主機"); ftp_login($connect, $username, $pwd) or die("授權(quán)失敗"); // 打開被動模式 ftp_pasv($connect, true) or die("無法切換到被動模式");
ftp_pasv
必須在ftp_login
之後呼叫。在之前調(diào)用它沒有效果。
另請參見:
此外,如果您的FTP伺服器在回應(yīng)PASV
命令時報告了錯誤的IP位址(如果伺服器位於防火牆/NAT後,這是相當(dāng)常見的),您可能需要使用以下方式解決:
ftp_set_option($connect, FTP_USEPASVADDRESS, false);
儘管在這種情況下,正確的解決方案是修復(fù)伺服器。