htaccessのパスワードで保護されたフォルダがあり、そこに複数のファイルがあります。ユーザーはすべてのファイルにアクセスすることはできませんが、自分自身をダウンロードすることはできます。htaccessで保護されたフォルダにファイルをコピーしてダウンロードする
私はファイルを直接リンクすることはできませんし、コピー/削除は実際の解決策ではないので、私はfile_get_contentsを使用してファイルを開き、正しいヘッダーを使用してページに戻します。しかし、私はそれを働かせない...ここに私のコードです。私が得ているエラーは、ファイルを開くと、Acrobatから「ファイルが破損しています」というエラーが出るということです。
<?php
$file = "cms/docs/5641-1.pdf";
header('Content-Description: File Transfer');
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename='.basename("exoticfilename.pdf"));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
if (file_exists($file))
{
echo file_get_contents($file);
}
?>
また、この例ではPDFファイルを使用していますが、いくつかの種類のファイルがあります。したがって、私はおそらくファイルの種類に応じてヘッダーを変更する必要があります。そのための解決策はありますか、または私は非常に長いif/elseステートメントを使うべきですか?
もう1つ、より良い方法があれば、私はそれを開いています。
UPDATE
上記の作品ではなく、すべてのファイルと。古いPDF(Acrobat 6)は動作しませんが、Acrobat Xファイルは機能します。同じ数のdocxファイルです。いくつかの仕事、他の仕事はありません。非常に奇妙なのは、PC上で直接すべてを開くことができるからです。私はそれがアプリケーション/ pdfの行(またはアプリケーション/ vnd.openxmlformats - officedocument.wordprocessingml.document 'docx)と関係があると仮定します。他のすべては、画像のように機能します。
私はあなたのコードをコピーしました。 'file_get_contents'の後に' die() 'を追加してみてください – Narek
ありがとうNarek。私はdie()を試みたが、うまくいかなかった。私はちょうど古いPDFでそれをテストし、それは動作します。ファイルのヘッダーに何か問題がある可能性がありますか?おそらく、私はさまざまなPDF、DocX、Tiffsなどに使用できる "一般的な"ヘッダーがありますか?私はこの行ヘッダー( 'Content-type:application/pdf')を意味します。 – mat
@mat、私はあなたの意見を見ます、私は以前のコメントを削除します。 – Jacco