将文件上传到ftp时出错
我想将csv feed上传到公共ftp。将文件上传到ftp时出错
我有这样的:
global $_CONFIG;
$host = $_CONFIG['po']['ftp']['server'];
$username = $_CONFIG['po']['ftp']['username'];
$password = $_CONFIG['po']['ftp']['password'];
$ftp_path = $_CONFIG['po']['ftp']['upload_path'];
$file = $export_file;
$fp = fopen($export_file, 'r+');
// set up basic connection
$conn_id = ftp_connect($host);
// login with username and password
$login_result = ftp_login($conn_id, $username, $password);
// try to upload $file
if (ftp_fput($conn_id, $ftp_path, $fp, FTP_BINARY)) {
echo "Successfully uploaded $file\n";
exit;
} else {
echo "There was a problem while uploading $file\n";
exit;
}
// close the connection and the file handler
fclose($fp);
ftp_close($conn_id);
主机,用户,密码是否正确。导出文件是D:/some path .csv
问题在于ftp服务器上的文件被称为.upload.somefile.csv
(并且它不具有完整的大小)。
ftp_path是/somefile.csv
。
我究竟做错了什么?
这可能是因为FTP工作,与您的网络布局相冲突的方式发生。
尽管您连接到FTP服务器以控制会话,但默认情况下,服务器会使用单独的数据连接“回拨”给您,以便传输。在某些情况下,防火墙,NAT等都可能会干扰此过程。
尝试使用FTP的PASV模式,使用ftp_pasv
,这反转了数据连接的方向。
一个csv
文件应该使用FTP_ASCII
,不FTP_BINARY
所以:
global $_CONFIG;
$host = $_CONFIG['po']['ftp']['server'];
$username = $_CONFIG['po']['ftp']['username'];
$password = $_CONFIG['po']['ftp']['password'];
$ftp_path = $_CONFIG['po']['ftp']['upload_path'];
$file = $export_file;
$fp = fopen($export_file, 'r+');
// set up basic connection
$conn_id = ftp_connect($host);
// login with username and password
$login_result = ftp_login($conn_id, $username, $password);
// try to upload $file
if (ftp_fput($conn_id, $ftp_path, $fp, FTP_ASCII)) {
echo "Successfully uploaded $file\n";
exit;
} else {
echo "There was a problem while uploading $file\n";
exit;
}
// close the connection and the file handler
fclose($fp);
ftp_close($conn_id);
这只对线路结束有潜在影响,不会导致此问题。 – 2013-03-07 10:00:21
好的,有东西正在上传,但它正在陷入循环。存储在11.467字节,仍然“上传状态”。我已经在if(ftp_fput($ conn_id,$ ftp_path,$ fp,FTP_ASCII)之后放置了ftp_pasv($ conn_id,true))\t \t \t \t echo“Successfully uploaded $ file \ n”; \t \t \t \t exit; \t \t \t}其他{ \t \t \t \t回声 “有一个问题,上载$文件\ N” 的; \t \t \t \t exit; \t \t \t} – 2013-03-07 10:08:12
ftp_pasv($ conn_id,true);在login_result之后。现在正在工作。非常感谢! – 2013-03-07 10:11:17
尝试'ftp_pasv($ conn_id,true);'。 – Passerby 2013-03-07 09:50:42