2013-03-07 135 views
2

我想将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

我究竟做错了什么?

+0

尝试'ftp_pasv($ conn_id,true);'。 – Passerby 2013-03-07 09:50:42

回答

1

这可能是因为FTP工作,与您的网络布局相冲突的方式发生。

尽管您连接到FTP服务器以控制会话,但默认情况下,服务器会使用单独的数据连接“回拨”给您,以便传输。在某些情况下,防火墙,NAT等都可能会干扰此过程。

尝试使用FTP的PASV模式,使用ftp_pasv,这反转了数据连接的方向。

0

一个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); 
+0

这只对线路结束有潜在影响,不会导致此问题。 – 2013-03-07 10:00:21

+0

好的,有东西正在上传,但它正在陷入循环。存储在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

+0

ftp_pasv($ conn_id,true);在login_result之后。现在正在工作。非常感谢! – 2013-03-07 10:11:17