0

我正在尝试将本地服务器上的文件存储在 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.csvftp://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 上创建但为空。

再次感谢

4

2 回答 2

5

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

于 2013-06-13T14:33:48.423 回答
0

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

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

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

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

于 2013-10-14T13:09:48.473 回答