2015-02-07 136 views
1

我試圖用ftp_nb_fput將文件上傳到服務器,只是它沒有從文件上傳超過4096字節,而且文件大約有700 kb。ftp_nb_fput不能傳輸超過40​​96字節

$connection_to = ftp_connect($host_to); 
$ftp_to = ftp_login($connection_to, $user_to, $pass_to); 
$fp = fopen($directory_to_move_files.$file_to_move, 'r'); 
ftp_nb_fput($connection_to, $file_to_move, $fp, FTP_ASCII); 
ftp_close($connection_to); 

我有興趣使用此函數而不是file_put_contents或CURL。 我沒有錯誤。

+0

你在當地的環境或託管?和什麼版本的PHP,最後是在Windows系統或Linux? – DiegoCoderPlus 2015-02-07 16:46:26

+0

@DiegoCoderPlus託管環境(專用)site5是準確的,PHP 5.3,LINUX – user3467855 2015-02-07 16:58:37

回答

2

有兩件事情從FTP與ftp_nb_put功能工作時,要考慮到considertion

  1. 它以異步方式工作,因此適用於使用大塊它意味着

    ftp_nb_put($ my_connection,「test.remote 「,」test.local「,FTP_BINARY);

只會導致上傳數據的一小塊,並從ftp_nb_put功能出現返回的標誌FTP_MOREDATA,所以使用這個命令來完成上傳,您將需要遍歷:

$ret = ftp_nb_put($my_connection, "test.remote", "test.local", FTP_BINARY); 
while ($ret == FTP_MOREDATA) { 
    $ret = ftp_nb_continue($my_connection); 
} 
  • 有下列指令考慮到這樣你就可以上傳與大尺寸的文件,該指令位於php.ini,不能從當前腳本修改:
  • ;上傳文件的最大允許大小。 upload_max_filesize = XXM

    ;必須大於或等於upload_max_filesize post_max_size = XXM

    其中XX是Mb的數量。不要忘記把M, 任何修改後,將重新啓動服務器是必要的。

    +0

    那些是32 M,文件是700 kb.so不是因爲這個。 – user3467855 2015-02-07 17:05:34

    +0

    我的猜測是,你有一個由site5阻止指令,你有沒有試過與他們交談,我很確定,如果我在本地環境中嘗試你的代碼它會工作得很好,任何新聞請添加,我想知道; - ) – DiegoCoderPlus 2015-02-07 17:08:17

    +0

    嘿等一下@ user3467855,你沒有循環而MORE_DATA標誌存在?如果沒有,那是你的概率....你應該添加$ ret = ftp_nb_put($ my_connection,「test.remote」,「test.local」, FTP_BINARY,ftp_size(「test.remote」)); // O:$ ret = ftp_nb_put($ my_connection,「test.remote」,「test。地方 「 // FTP_BINARY,FTP_AUTORESUME); 而($漚== FTP_MOREDATA){ //哈加老闕quiera 回聲」「; // Continuar拉carga ... $ RET = ftp_nb_continue($ my_connection); } – DiegoCoderPlus 2015-02-07 17:12:23

    1

    如果要一次傳輸整個文件,請使用ftp_put()而不是ftp_nb_fput()。它會讓你的代碼簡單一點:

    $connection_to = ftp_connect($host_to); 
    $ftp_to = ftp_login($connection_to, $user_to, $pass_to); 
    $local_file = $directory_to_move_files . $file_to_move; 
    ftp_put($connection_to, $file_to_move, $local_file, FTP_BINARY); 
    ftp_close($connection_to); 
    

    邊注:除非你是絕對肯定你轉移是純文本文件不使用FTP_ASCII。它會破壞二進制文件,包括圖像。使用FTP_BINARY始終是安全的。

    +0

    與'ftp_put'我得到像'警告未能打開流,沒有這樣的文件或文件夾在線....' – user3467855 2015-02-07 19:35:58

    +0

    確保您在'$ local_file'中結束的路徑是正確的?您沒有包含任何生成該路徑的代碼,所以我可以不知道是否那是對的。 – duskwuff 2015-02-07 19:51:03