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

时间:2011-05-27 04:19:02

标签: php file ftp transfer

当我尝试使用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);

6 个答案:

答案 0 :(得分:14)

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。

答案 1 :(得分:3)

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

无论何时通过FTP服务器成功打开连接,都应准备好在进程完成时关闭与以下函数的连接,或者由于任何错误而终止。

ftp_close($conn_id);

你的脚本可能会打开它的连接,FTP服务器也会因此而感到困惑。尝试在适当的位置添加ftp_close,看看脚本是否运行得更顺畅。

答案 2 :(得分:3)

我尝试在PHP中使用ftp函数,发现使用file_put_contents()更容易,如下所示:

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

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

答案 3 :(得分:0)

你的ftp设置看起来没问题,尝试将文件名$ destination_file。$ name放在一个变量中,转储变量并确保该文件存在绝对路径(如果它与脚本不在同一个文件夹中)。这是我在快速浏览中看到的唯一细节,可能会阻止您的上传。

确保您的文件未在编辑器中打开!如果文件是.txt,你可以使用FTP_ASCII,虽然二进制不应该导致问题。

好运!

答案 4 :(得分:0)

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

我刚刚谈到了EUKHOST服务器支持

主要观点是支持人员现在在服务器上为FTP打开了passive port范围,他告诉我们现在尝试FTP上传。如果您可以尝试使用一些测试文件并且它已成功完成..

答案 5 :(得分:0)

末尾添加以下行

打开 /etc/vsftpd.conf 并添加 pasv_promiscuous = YES ___最后。

相关问题