PHP ftp_put警告警告:ftp_put()[function.ftp put]:类型设置为I.in


PHP ftp_put warning Warning: ftp_put() [function.ftp-put]: Type set to I. in

当我尝试使用PHP的ftp_put函数上传文件时,早些时候出现了错误:

Warning: ftp_put() [function.ftp-put]: No data connection

现在,我试着打开被动模式:

ftp_pasv($conn_id, true);

然后出现错误:

Warning: ftp_put() [function.ftp-put]: Type set to I. in

ftp_login操作正确,它显示成功。

现在它给出了新的警告:警告:ftp_put() [function.ftp-put]: abc.txt: Cannot open or remove a file containing a running program.

有什么想法,为什么文件不转换?

谢谢!

这是我的代码片段:

    $conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass) or die("You do not have access to this ftp server!");
    if ((!$conn_id) || (!$login_result)) {
        // wont ever hit this, b/c of the die call on ftp_login
        echo "<span style='color:#FF0000'><h2>FTP connection has failed! <br />";
        echo "Attempted to connect to $ftp_server for user $ftp_user_name</h2></span>";
        exit;
    } else {
        //echo "Connected to $ftp_server, for user $ftp_user_name <br />";
    }
    //turn passive mode on
    ftp_pasv($conn_id, true);
    $upload = ftp_put($conn_id, $destination_file.$name, $filename, FTP_BINARY);
    if (!$upload) {
        echo "<span style='color:#FF0000'><h2>FTP upload of $filename has failed!</h2></span> <br />";
    } else {
        echo 'Uploaded';    
    }
 ftp_close($conn_id);

http://php.net/ftp_pasv

$resource = ftp_connect('ftp.example.com');
ftp_login($resource, 'username', 'password');
# set this to true
ftp_pasv($resource, true);
ftp_get(...);
ftp_put(...);

我收到了相同的(不是很描述性的)错误消息E_WARNING ftp_get(): Type set to I.

我发现这是因为运行PHP的服务器没有可见的公共IP(它是我工作站上的虚拟服务器)。

解决方案使用被动模式。活动服务器上的默认设置(活动模式)没有问题,因为活动服务器具有可见的公共IP。

您看到的最后一个错误发生在FTP守护进程在上传的文件打开并等待您写入时。

在FTP服务器上成功打开连接的任何时候,当进程完成或由于任何错误而终止时,请准备使用以下功能关闭连接。

ftp_close($conn_id);

您的脚本可能会使其连接处于打开状态,而FTP服务器对此感到困惑。尝试在适当的位置添加ftp_close,看看脚本是否运行得更顺利。

我尝试过在PHP中使用ftp函数,发现像下面这样使用file_put_contents()要容易得多:

$remote_file = "ftp://username:password@host.com/path/to/file.txt";
file_put_contents($remote_file, $file_contents);

你仍然可以检查它是否成功,当然还有所有的好东西。

您的ftp设置看起来不错,请尝试放入文件名$destination_file$name,转储该变量,如果该文件与脚本不在同一文件夹中,请确保该文件具有绝对路径。这是我一眼看到的唯一细节,可能会阻碍你的上传。

确保你的文件没有在编辑器中打开!如果文件是.txt,您可以使用FTP_ASCII,尽管是二进制文件应该不会造成问题。

祝你好运!

我发现它的解决方案如下:

我刚和EUKHOST服务器支持谈过

主要的一点是,支持人员现在在服务器上为FTP打开了passive port范围,他告诉我们现在就尝试FTP上传。如果你可以用一些测试文件来尝试它,并且它成功地通过了。。

打开/etc/vsftpd.conf并添加pasv_prociscuous=YES__。

在我的案例中,触发此错误的问题是我试图上传的文件对于接收服务器的配置来说太大了。