我通过 FTP 上传 XML 文件:
$ftp = "ftp";
$username = "username";
$pwd = "password";
$filename = $_FILES[$xyz][$abc];
$tmp = $_FILES['file']['tmp_name'];
$destination = "/Content/EnquiryXML ";
$connect = ftp_connect($ftp)or die("Unable to connect to host");
ftp_login($connect,$username,$pwd)or die("Authorization Failed");
echo "Connected!<br/>";
if(!$filename)
{
echo"Please select a file";
}
else
{
ftp_put($connect,$destination.'/'.$filename,$tmp,FTP_ASCII)or die("Unable to upload");
echo"File successfully uploaded to FTP";
}
我想将使用 DOMDocument
创建的 XML 文件发送到 FTP 服务器,但我做不到。
ftp_put
返回 false。
最佳答案
ftp_put
(或任何其他传输命令,如 ftp_get
、ftp_nlist
、ftp_rawlist
)出现问题的最典型原因, ftp_mlsd
) 是PHP默认为主动模式。在 99% 的情况下,必须切换到被动模式,才能使传输正常进行。使用 ftp_pasv
function .
$connect = ftp_connect($ftp) or die("Unable to connect to host");
ftp_login($connect, $username, $pwd) or die("Authorization failed");
// turn passive mode on
ftp_pasv($connect, true) or die("Unable switch to passive mode");
ftp_pasv
必须在 ftp_login
之后调用。之前调用没有效果。
另见:
- PHP ftp_put fails with "Warning: ftp_put (): PORT command successful"
- 我 关于 active and passive FTP connection modes 的文章.
此外,如果您的 FTP 服务器在对 PASV
命令的响应中报告错误的 IP 地址(这种情况很常见,如果服务器位于防火墙/NAT 后面),您可能需要解决方法它通过使用:
ftp_set_option($connect, FTP_USEPASVADDRESS, false);
参见 PHP FTP + Passive FTP Server Behind NAT .
虽然在这种情况下正确的解决方案是修复服务器。
关于PHP ftp_put 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40720260/