非常にシンプルなWebフォームを作成して、ユーザーがインターネットブラウザからテキストファイルを閲覧できるようにしました。ダウンロードが強制的にZIPファイルに破損する
私は、検索によって返されたテキストファイルが圧縮されてZIPになるという機能を実装しました。ここに私のコード
function getFiles() {
$result = null;
$ZIPresult = null;
if (empty($_POST['DBRIDs'])) { return null; }
$mydir = MYDIR;
$dir = opendir($mydir);
$DBRIDs = $_POST['DBRIDs'];
$getfilename = mysql_query("select filename from search_table where rid in (" . $DBRIDs . ")") or die(mysql_error());
while ($row = mysql_fetch_array($getfilename)) {
$filename = $row['filename'];
$result .= '<tr><td><a href="' . basename($mydir) . '/' . $filename . '" target="_blank">' . $filename . '</a></td></tr>';
$ZIPresult .= basename($mydir) . '/' . $filename;
}
if ($result) {
$result = "<table><tbody><tr><td>Search Results.</td></tr> $result</table>";
shell_exec("zip -9 SearchResult.zip ". $ZIPresult ." > /dev/null ");
$fileName = 'SearchResult.zip';
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Transfer-Encoding: binary");
header('Content-type: application/zip');
header("Content-length: " . filesize($fileName));
header('Content-Disposition: attachment; filename="' . $fileName . '"');
readfile($fileName);
} return $result;
}
は、私が(例えば)FTPを使用して、サーバーからZIPファイルをダウンロードした場合はそれは素晴らしい作品が、私はZIPが破損している、ページヘッダからのダウンロードを強制です。
私には何が欠けていますか?あなたのご意見ありがとうございます。
PS:新しいZipArchive()ライブラリ/クラスは私たちの実稼働環境では利用できないので、代わりにUnixユーティリティZIPを使用することにしました。
テキスト/ 16進エディタを使用して、.zipファイルが破損している理由を確認しましたか?おそらくダウンロードしたデータに埋め込まれるPHPの警告があります。ファイルサイズはサーバーとクライアントで一致しますか? –
@MarcB:あなたの最初の質問には、いいえ。はい、ファイルサイズはサーバーとクライアントの両方で一致します。 – Chris