ファイルのダウンロードページにPHPを使用しています。問題コードのスニペットは次のとおりです。
if (file_exists($attachment_location)) {
header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");
header("Cache-Control: public"); // needed for i.e.
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: Binary");
header("Content-Length:".filesize($attachment_location));
header("Content-Disposition: attachment; filename=file.zip");
readfile($attachment_location);
die("Hooray");
}
else {
die("Error: File not found.");
}
このコードは、ローカルでテストする場合は完全に正常に機能しますが、ライブサーバーにデプロイした後、ブラウザーは「ページが見つかりません」というエラーを返します。.htaccessの問題かもしれないと思いましたが、ライブサーバー上のすべての.htaccessファイルはローカルの対応するファイルと同じです。次の推測は、ライブサーバーのPHP構成ですが、どのPHP設定がこの動作を引き起こす可能性があるのかわかりません。
file_exists()関数は常にtrueを返します-ライブサーバーでこれを確認しましたが、ファイルやそのサイズなどを常に正しく取得しているため、ファイルにハンドルがあります。ダウンロードは実行されません!
メインサイトはWordpressサイトですが、このコードはWordpressページの一部ではなく、サイトルート内のスタンドアロンディレクトリにあります。
更新:is_file()とis_readable()は両方ともファイルに対してtrueを返しているので、それは問題ではありません。問題を引き起こしている特定の行は次のとおりです。
readfile($attachment_location)
それまでのすべてがとても幸せです。