我正在尝试将本地服务器上的文件存储在ftp服务器上。
源文件在我当前的目录中(与php文件相同)
我使用http://www.server.co.za/kisv2/xmltest/export.php
运行脚本
要上传到ftp的文件是http://www.server.co.za/kisv2/xmltest/exportfile.csv
目标ftp路径为:ftp: ftp://ftp.ftpserver.co.za/LocExports/exportfile.csv
我的ftp登录默认为: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服务器上,但为空白,大小为0bytes。
任何想法欢迎。
谢谢并恭祝安康
UPDATE
$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上创建,但为空。
再次感谢
添加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
我遇到了同样的问题。 已创建文件,但大小为0 KB。 将模式设置为被动后,我的文件成功传输到FTP服务器。 实际上,在FTP服务器上上传文件时,我们必须注意三件事。
将文件类型设置为BINARY: objFtpClient.setFileType(FTP.BINARY_FILE_TYPE);
将文件传输模式设置为BINARY: objFtpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
将模式设置为被动(我不知道它在内部做什么。但是它可以工作...!): objFtpClient.enterLocalPassiveMode();