2011-05-27 157 views
7

当我尝试使用PHP的ftp_put功能上传文件,以前它是示数:PHP ftp_put警告警告:ftp_put()[function.ftp-放]:类型设置为我在

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.

任何想法,为什么文件没有tranferring?

谢谢!

这里是我的代码片段:

$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); 
+0

请问您可以发布您的代码吗? – Tapos 2011-05-27 04:24:55

+0

您是否将流指定为第一个参数? – alex 2011-05-27 04:26:27

+0

现在增加.. pl进一步指导我 – 2011-05-27 04:30:28

回答

2

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

任何时候,如果您通过FTP服务器成功打开连接,请准备在进程完成或由于任何错误而终止时使用以下函数关闭连接。

ftp_close($conn_id); 

这可能是您的脚本将其连接断开并且FTP服务器因此而变得困惑。尝试在适当的位置添加ftp_close,并查看脚本是否运行更顺畅。

0

您的FTP设置看起来不错,可以尝试在文件名$ destination_file $名称在一个单一变量,转储变量,并确保该文件,如果绝对路径存在。它与您的脚本不在同一个文件夹中。这是我快速浏览的唯一细节,可能会窒息您的上传。

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

祝你好运!

3

我使用PHP中的FTP功能尝试并发现它是非常容易使用file_put_contents()类似如下:

$remote_file = "ftp://username:[email protected]/path/to/file.txt"; 
file_put_contents($remote_file, $file_contents); 

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

0

我发现如下的解决方案:

我刚问过EUKHOST服务器支持

在此

主要观点是,技术支持人员,现在在服务器上打开一个passive port范围FTP,他告诉我们现在尝试FTP上传。如果你可以用一些测试文件来尝试它,并成功完成。

11

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(...); 

我recieving相同(未非常描述性的)错误消息E_WARNING ftp_get(): Type set to I.

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

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

+1

加入ftp_pasv为我工作。谢了哥们! – Makubex 2016-08-11 07:27:42

0

添加以下在

开放结束/etc/vsftpd.conf文件线和添加 pasv_promiscuous = YES ___在末端。