0

Gunzip されたファイルを FTP サーバーからダウンロードしようとしています。

正常にダウンロードされたように見えますが (正しいファイル サイズなど)、コンテンツを抽出すると、データ形式に違反していると表示されて失敗します。

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");
    }
}

正しくダウンロードされない理由を誰でも見ることができますか? Gunzip で圧縮されたファイルを FTP 経由でダウンロードする場合、特別な注意が必要ですか?

4

3 に答える 3

2

この行を変更してみてください:

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

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

...when I extract the contents...テキスト ファイルではなく、バイナリ データ アーカイブ ( ) を転送しています。
詳しくは
http://www.coreftp.com/docs/web1/Ascii_vs_Binary_transfers.htmをご覧ください

于 2011-11-18T09:16:32.140 に答える
1

ファイルが純粋な ASCII を使用していない場合 (代わりに UTF-8 など)、ダウンロードが破損する可能性が高くなります。モードを FTP_ASCII から FTP_BINARY に変更すれば問題ありません。

于 2011-11-18T09:17:47.603 に答える
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");
    }
}
于 2011-11-18T09:19:08.973 に答える