2011-11-18 90 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

即时消息很高兴,你的问题解决了 –