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

wgeznvg7  于 2023-01-19  发布在  PHP
关注(0)|答案(7)|浏览(168)

当我尝试使用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已正确完成,并显示"Successfully(成功)"。
现在它给出了新的警告:警告: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);
nwlls2ji

nwlls2ji1#

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。

hjqgdpho

hjqgdpho2#

您看到的最后一个错误发生在FTP守护程序打开上传的文件并等待您写入时。
无论何时,只要您成功地通过FTP服务器打开了连接,请准备好在进程完成或由于任何错误而终止时使用以下函数关闭连接。

ftp_close($conn_id);

可能是您的脚本没有关闭连接,FTP服务器对此感到困惑。请尝试在适当的位置添加ftp_close,看看脚本是否运行得更顺畅。

yqlxgs2m

yqlxgs2m3#

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

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

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

wixjitnu

wixjitnu4#

你的ftp设置看起来不错,试着把文件名$destination_file.$name放在一个变量中,转储变量,如果这个文件和你的脚本不在同一个文件夹中,确保它存在于绝对路径中。这是我在快速浏览中看到的唯一细节,可能会阻碍你的上传。
确保你的文件没有在编辑器中打开!如果文件是.txt,你可以使用FTP_ASCII,尽管二进制应该不会导致问题。
祝你好运!

ny6fqffe

ny6fqffe5#

我发现它的解决方案如下:
我刚和EUKHOST服务器支持人员谈过
主要的一点是,支持人员现在在服务器上为FTP打开了一个passive port范围,他告诉我们现在尝试FTP上传。如果你可以用一些测试文件尝试,它成功通过了。

ut6juiuv

ut6juiuv6#

在结尾处添加以下行

打开***/etc/vsftpd.conf***并在末尾添加pasv_miscuous =YES___。

ercv8c1e

ercv8c1e7#

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

相关问题