将csv文件上传到ftp服务器 - 文件为空

时间:2013-06-13 14:30:38

标签: php file-upload ftp

我正在尝试将本地服务器上的文件存储在ftp服务器上。

源文件位于我当前的目录中(与php文件相同)

我使用http://www.server.co.za/kisv2/xmltest/export.php

运行脚本

要上传到ftp的文件是http://www.server.co.za/kisv2/xmltest/exportfile.csv

目标ftp路径为:ftp://ftp.ftpserver.co.za/LocExports/exportfile.csv

我的ftp登录默认为:ftp://ftp.ftpserver.co.za

所以我想将文件从当前目录exportfile.csv复制到ftp://ftp.ftpserver.co.za/LocExports/exportfile.csv

我的当前语法是:

$source = 'exportfile.csv';  //this is a file in the same directory as my php file. full path is... http://www.server.co.za/kisv2/xmltest/exportfile.csv
$target = '/LocExports/exportfile.csv'; //full path is... ftp://ftp.ftpserver.co.za/LocExports/exportfile.csv

$conn = ftp_connect("ftp.ftpserver.co.za") or die("Could not connect");
ftp_login($conn, "username", "password");

$upload = ftp_put($conn, $target, $source, FTP_ASCII);
if (!$upload) { echo 'FTP upload failed!'; }

echo "complete";

这给了我错误Warning: ftp_put() [function.ftp-put]: Opening ASCII mode data connection。该文件确实出现在FTP服务器上,但是空白且大小为0字节。

欢迎任何想法。

谢谢和问候

更新

$source = 'exportfile.csv';  
$target = '/LocExports/exportfile.csv'; 

$conn = ftp_connect("ftp.server.co.za") or die("Could not connect");
ftp_login($conn, "username", "password");

ftp_pasv($conn, true); 

$upload = ftp_put($conn, $target, $source, FTP_BINARY);
if (!$upload) { echo 'FTP upload failed!'; }

echo "complete";

这仍然失败了: Warning: ftp_put() [function.ftp-put]: Opening BINARY mode data connection.

文件在ftp上创建但是为空。

再次感谢

2 个答案:

答案 0 :(得分:4)

ftp_pasv($conn, true);之后添加ftp_login(...)

来自http://www.php.net/manual/en/function.ftp-put.php

  

如果使用ftp_put时出现以下错误之一:

     

警告:ftp_put()[function.ftp-put]:打开ASCII模式数据   连接

     

警告:ftp_put()[function.ftp-put]:打开BINARY模式数据   连接

     

并且它在正确的位置创建文件,但是是0kb文件和   此后所有FTP命令都失败。客户很可能是   在防火墙后面。纠正这种用法:

     

ftp_pasv($conn, true);

     

在执行任何put命令之前。花了我很长时间才弄明白这一点   当我这么做时,我真的很高兴:D

答案 1 :(得分:0)

我遇到了同样的问题。创建的文件大小为0 KB。将模式设置为被动后,我的文件成功传输到FTP服务器。 InFact在FTP服务器上传文件时需要注意三件事。

  1. 将文件类型设置为BINARY:objFtpClient.setFileType(FTP.BINARY_FILE_TYPE);

  2. 将文件传输模式设置为BINARY:objFtpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);

  3. 将模式设置为被动(我不知道它在内部做了什么。但它有效......!):objFtpClient.enterLocalPassiveMode();