你好, 我正在做一个脚本,通过ftp协议将文件直接发送到服务器。 为此,我使用php ftp函数。
$conn_id = ftp_connect('XXXX.com', 21);
$login_result = ftp_login($conn_id, 'USER_XXXX', 'PWD_XXXX');
ftp_pasv($conn_id, true) or die("Cannot switch to passive mode");
if ((!$conn_id) || (!$login_result)) {
die("Problem FTP connection !");
}
if (ftp_chdir($conn_id, 'SERVER_PATH')) {
echo ftp_pwd($conn_id) . "\n";
} else {
echo "Problem to change path\n";
}
ftp_nb_put($conn_id, $File, $localPath. $File, FTP_ASCII);
ftp_close($conn_id);
没有错误宣布,但到达我服务器的文件是空的。
我忘了准确,我上传的文件是一个很大的xlsx文件。
答案 0 :(得分:1)
你的代码是错的。您使用非阻止ftp_nb_put
,就像它阻止一样。
如果您想要一个简单的代码,则必须使用ftp_put
。
如果您确实需要非阻止代码,则必须在ftp_nb_continue
报告FTP_FINISHED
后才能关闭连接。请参阅File uploaded with ftp_nb_put to FileZilla FTP server in PHP is corrupted。
否则,您当前的代码只会在上传几乎没有开始时关闭连接。
评论中建议的" sleep"(仅在那里提到)仅用于测试,您无法在真实代码中可靠地使用它。
您的第二个问题是您正在以text / ascii模式(.xlsx
)上传二进制FTP_ASCII
文件。您必须使用二进制模式(FTP_BINARY
)。 text / ascii模式将破坏二进制文件。所以即使上传完成,文件也会被破坏。
这将有效:
ftp_put($conn_id, $File, $localPath.$File, FTP_BINARY);