私がやっていることは、.htaccessのErrorDocumentを使って404を傍受し、それをgetFile.phpで指し示すことです。 getFileはurlからファイル名を取得し、mysqlデータベースでファイル名を検索し、データを取得して適切なヘッダーを適用します。PHPで404エラーを正しく傍受するにはどうすればよいですか?
私の開発環境(最新のLAMPサーバーはubuntuで稼動しています)はうまくいくようですが、サイトはGoDaddyでホストされていて、返されたヘッダーに問題があるようです。私はGoDaddyが404を返すと思って、とにかくデータを送信します。
このように処理されるリンクを右クリックすると、「名前を付けて保存」することができ、すべて正常に動作します。ファイルがイメージの場合、問題はありません。しかし、リンクをクリックしてブラウザに表示するのではなく、ダウンロードするファイルであれば、すべてのブラウザで「ファイルが見つかりません」というエラーが表示されます。 Firebug Consoleは、ファイルが正常に転送されたかどうかに関係なく、404エラーであると主張します。私のコードは次のとおりです:
$folder = explode("/" , $_SERVER["REQUEST_URI"]);
$pageName = $folder[sizeof($folder)-1];
$sql = "SELECT data, mimeType, OCTET_LENGTH(data) AS size FROM tblFiles WHERE fileName = '".$pageName."' AND active=1;";
$result = mysql_query("$sql") or die();
$data = mysql_fetch_array($result);
header("HTTP/1.0 200 OK");
header("Content-Type: ".$data['mimeType']);
header("Content-Length: ".$data['size']);
echo $data['data'];
と.htaccessファイル:
ErrorDocument 404 /FILES/dbFiles/getFile.php
は今、これは/ FILES/DBFILESでフル.htaccessファイルが存在しています。私はGoDaddyがそこにもっと多くのものを期待しているのかどうかはわかりませんが、それは自分のサーバーに書かれているように機能するようです。
多くの組み合わせのヘッダー情報を試しても効果がありません。
私のコードは明らかに機能しますが、その404が起きるのを防ぐことはできません。
ありがとうございます! -Jer
は200 OKヘッダを送信することは、通常は悪い習慣です。 –
私はそれを試してみましたが、効果がないようです。フルコードでは、データベースにデータが見つかったときにのみ200を送信します。また、この.htaccessファイルは、このディレクトリにのみ適用され、データベースファイル要求を処理します。他のサイトには影響しません。 – SuperJer
あなたは 'header( 'Content-Disposition:attachment; filename =" download.txt "')を試しましたか? – Travesty3