2011-05-27 187 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 ___在末端。