您好,我正在做一个脚本,通过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文件。
你的代码是错的。你使用非阻塞的ftp_nb_put
,好像它是阻塞的。
如果你想要一个简单的代码,你必须使用ftp_put
。
如果您确实需要非阻塞代码,则必须在ftp_nb_continue
报告FTP_FINISHED
之后关闭连接。见File uploaded with ftp_nb_put to FileZilla FTP server in PHP is corrupted。
否则,您当前的代码只会在上传几乎没有开始的时刻关闭连接。
评论中提出的“睡眠”(仅在那里提到)仅用于测试,您无法在实际代码中可靠地使用它。
您的第二个问题是您正在以text / ascii模式(.xlsx
)上传二进制FTP_ASCII
文件。你必须使用二进制模式(FTP_BINARY
)。 text / ascii模式将破坏二进制文件。所以即使上传完成,文件也会被破坏。
这将有效:
ftp_put($conn_id, $File, $localPath.$File, FTP_BINARY);