2017-08-19 15 views
1

リンクがわかっている場合、ファイルがダウンロードされないように保護します。私は私のルートフォルダ内のファイルを持っているし、次のと.htaccessファイル作成:禁止ファイルへのPHPファイルアクセスを許可するには

<Files ~ "\.xlsx$"> 
    Order allow,deny 
    Deny from all 
</Files> 

リンク(www.domain.com/excel.xlsx)がロードされると、ブラウザは403禁止エラーが発生します。これは正しいです。

<?php 
    echo '<a href="../Excel.xlsx" download>Click to download</a>'; 
?> 

をしかし、私はダウンロードしてクリックしたときに、私は再び403エラーを与えています:

私は、ルート内のフォルダ内で、このPHPファイルを配置しています。

PHPがこのファイルにアクセスして、次のコードをダウンロードする方法を教えてください。ありがとうございました!

+1

おそらく 'download.php?file = thefilename.xlsx'のようなダウンロードプロキシファイルを作成する必要があります。そのファイルでは、PHPでファイルの内容を読み込んでブラウザに返します。また、ユーザーがログインしているかどうかを確認したり、CSRFトークンをURLに追加して、リクエストがサイトから来たものであることを検証することもできます。 (単に "force download php"を検索すれば、多くの例が得られます)。 –

+1

"ルーティングスクリプト"を使用します。 'router.php?file = Excel.xlsx'のようなリンクを作成すると、PHPのセッション情報を使ってファイルの内容を渡すかどうかを決めることができます。また、その場合は正しいヘッダーを送信する必要があります。 'route/Excel.xlsx'のような参照を作成し、httpサーバの内部書き換えを使用して、そのような着信要求を' route.php'ルーティングスクリプトに再ルーティングすることもできます。 – arkascha

答えて

0

現在、あなたはファイルをユーザーに送信するためにphpを使用していません。ユーザーはリンクをクリックするだけで、ファイルに直接アクセスしようとします。したがって、それは403で終了します。

あなたはphp経由でサーバー側のファイルを読んで、それをストリームとしてユーザーに送信する必要があります。ここにコード例があります:

// open the file in a binary mode 
$name = './Excel.xlsx'; 
$fp = fopen($name, 'rb'); 

// send the right headers 
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
header("Content-Length: " . filesize($name)); 

// dump the xlsx and stop the script 
fpassthru($fp); 
exit; 
0

問題が解決した.htaccessファイルの許可を確認してください。

関連する問題