2012-01-31 12 views
1

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)と関係があると仮定します。他のすべては、画像のように機能します。

+0

私はあなたのコードをコピーしました。 'file_get_contents'の後に' die() 'を追加してみてください – Narek

+0

ありがとうNarek。私はdie()を試みたが、うまくいかなかった。私はちょうど古いPDFでそれをテストし、それは動作します。ファイルのヘッダーに何か問題がある可能性がありますか?おそらく、私はさまざまなPDF、DocX、Tiffsなどに使用できる "一般的な"ヘッダーがありますか?私はこの行ヘッダー( 'Content-type:application/pdf')を意味します。 – mat

+0

@mat、私はあなたの意見を見ます、私は以前のコメントを削除します。 – Jacco

答えて

0

htaccess/htpasswdを使用しているため、ホット・リンク・リーチからディレクトリを保護しています。クライアント側からのブラウザなどの外部ソースからのファイルへのアクセスを意図せずブロックしています。ディレクトリはその中のファイルにアクセスするために認証を必要とするため、その周囲にスクリプトを作成する必要があります。ある意味では、スクリプトを通して認証すること。私はそれが前に行って見ている、とあなたは件名に多くの参照のいずれかを見つけることができ、ここで http://koivi.com/php-http-auth/

しかし、彼らは不足しているとして一番下の行は、同じホストマシン上であっても、あなたのスクリプトを実行オーバーhtaccessファイルとhtpasswdのですより良い説明サーバーレベルの、PHPも前に、ページの負荷でそのプロセスを起動した。

+0

ファイルをダウンロードできて以来、完全にはありません。たとえ正しいファイルであっても、古いPDFでも問題を引き起こすようです。古いdocファイルも同じです。 – mat

関連する問題