PHP ftp_put 失败

标签 php file-upload ftp

我通过 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_getftp_nlistftp_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 之后调用。之前调用没有效果。

另见:


此外,如果您的 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/

相关文章:

php - 如何使用 PHP 发送电子邮件同时向 PayPal 发送详细信息

php - PHP 图片上传脚本的 HTML 表单

file-upload - Yii框架,上传文件不起作用

javascript - 如何在文本框中写入要上传的文件路径?

linux - 期望脚本自动 FTP 上传正在将损坏的文件发送到服务器

android - 如何在 Android 应用程序中将图像上传到 FTP 服务器?

php - laravel 将未定义的 url 路由到特定 Controller

javascript - 如何根据输入字段动态更改网页内容

PHP - 使用 foreach 获取第一个元素

iis-7 - PASV后FTP断开