2011-11-18 159 views
0

我正試圖從FTP服務器下載gunzipped文件。通過FTP下載gunzipped文件

它似乎成功下載(正確的文件大小等),但是當我提取內容時,它失敗,指出數據格式被違反。

如果我使用FileZilla等FTP客戶端手動下載相同的文件,然後將其解壓縮,解壓縮工作,這意味着我的PHP下載文件不正確。

這裏是我的代碼:

$this->_file = 'data.csv.gz'; 
$this->_directory = DOC_ROOT.'/imports/'; 

private function _loadFromFtpDataSource($url=null,$username=null,$password=null) { 
    try { 
     $conn_id = ftp_connect($url); 
     $login_result = ftp_login($conn_id, $username, password); 
     ftp_pasv($conn_id, true); 
     $handle = fopen($this->_directory . $this->_file, "w"); 
     ftp_fget($conn_id, $handle, $this->_file, FTP_ASCII, 0);    
     ftp_close($conn_id); 
     fclose($handle); 
    } catch (Exception $e) { 
     $this->status = false; 
     error_log("Failed to connect to ftp server"); 
    } 
} 

任何人都可以看到任何理由爲什麼它可能無法正確下載?在通過FTP下載gunzip文件時是否需要特別注意?

+0

不熟悉PHP代碼下載,但它可能是下降到二進制/文本模式FTP。 –

+0

* gzipped。 gunzip用於解壓縮gzip文件。 – JJJ

回答

2

嘗試改變這一行:

ftp_fget($conn_id, $handle, $this->_file, FTP_ASCII, 0); 

ftp_fget($conn_id, $handle, $this->_file, FTP_BINARY, 0); 

你transfering二進制數據歸檔(...when I extract the contents...)不是一個文本文件
閱讀更多關於
http://www.coreftp.com/docs/web1/Ascii_vs_Binary_transfers.htm

+2

完美,謝謝。這立即解決了問題。 – Houdmont

1

如果該文件不使用純粹的ASCII(例如UTF-8 inste廣告),您的下載很可能會損壞。如果您將模式從FTP_ASCII更改爲FTP_BINARY,則應該沒問題。

+0

謝謝,這是正確的。我已經標記@Marek Sebera的回答是正確的,因爲他先發布了它。 – Houdmont

1

二進制文件需要binary模式不ascii模式

$this->_file = 'data.csv.gz'; 
$this->_directory = DOC_ROOT.'/imports/'; 

private function _loadFromFtpDataSource($url=null,$username=null,$password=null) { 
    try { 
     $conn_id = ftp_connect($url); 
     $login_result = ftp_login($conn_id, $username, password); 
     ftp_pasv($conn_id, true); 
     $handle = fopen($this->_directory . $this->_file, "w"); 
     ftp_fget($conn_id, $handle, $this->_file, FTP_BINARY, 0);    
     ftp_close($conn_id); 
     fclose($handle); 
    } catch (Exception $e) { 
     $this->status = false; 
     error_log("Failed to connect to ftp server"); 
    } 
} 
+0

謝謝,這是正確的。我已經標記@Marek Sebera的回答是正確的,因爲他先發布了它。 – Houdmont

+0

即時消息很高興,你的問題解決了 –