このフォーラムのユーザーコミュニティのおかげで、私は自分のインターネットブラウザ内からテキストファイルを見ることができる非常に単純なWebフォームを作成しました。フォームダウンロード同じZIP以上
私は今、検索によって返されたテキストファイルがZIPに圧縮される2つの機能を持っています。ここでの問題は、検索が最初に行われていたものは何でもから内容のZIPファイルには、何度も何度もダウンロードされてしまうことです私のコード
function getFilesFromSite() {
$result = null;
$ZIPresult = null;
if (empty($_POST['DBSite'])) { return null; }
$mydir = MYDIR;
$dir = opendir($mydir);
$DBSite = $_POST['DBSite'];
$getfilename = mysql_query("select filename from search_table where site='" . $DBSite . "'") 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("/bin/rm -f SearchResult.zip;/usr/bin/zip -9 SearchResult.zip ". $ZIPresult ." > /dev/null ");
//header for forced download
header("Pragma: public");
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
$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 . '"');
ob_start(); // Starts output buffering.
readfile($fileName); // "Outputs" the file.
$content = ob_get_flush(); // Grabs the output and assigns it to a variable.
print base64_encode($content);
}
function getFilesFromError() {
//Just a copy paste from above with different input parameter...
}
です。たとえば、後でgetFilesFromError()で検索しても、getFilesFromSite()の結果は常にダウンロードされます。
私のヘッダーが間違って設定されていると思われますが、どこがわからないのですか。
PS:私は代わりに、UnixのユーティリティのZIPを使用することを選択したように、新しいZIPARCHIVE()ライブラリ/クラスは、当社の生産環境では使用できません。
スクリプトは実際に完全に実行されていますか?言い換えれば、途中でエラーが出ていますか?私の推測では、SearchResult.zipが作成されると、あなたの 'shell_exec'呼び出しがファイル権限エラーに陥っている可能性があります。 –
そのようなコードをコピーして貼り付けないでください。ループを使用してください –
ヘッダーはデータがバイナリであると言っていますが、base64は –