2011-12-06 12 views
3

ダウンロードボタンとして使用するには、このコードをダウンロードしてください。ダウンロード画像リンクを使用してPHP

<?  
    $filename = $_GET["filename"]; 
    $buffer = file_get_contents($filename); 

    /* Force download dialog... */ 
    header("Content-Type: application/force-download"); 
    header("Content-Type: application/octet-stream"); 
    header("Content-Type: application/download"); 

    /* Don't allow caching... */ 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 

    /* Set data type, size and filename */ 
    header("Content-Type: application/octet-stream"); 
    header("Content-Transfer-Encoding: binary"); 
    header("Content-Length: " . strlen($buffer)); 
    header("Content-Disposition: attachment; filename=$filename"); 

    /* Send our file... */ 
    echo $buffer; 
?> 

事は、ファイルの名前がファイル名にパス全体で終わり、である例えば、このコード:

<a href="download.php?filename=images/something.jpg"> 

は「images_something.jpgという名前のイメージで終了"

最後のファイル名から" images_ "を削除したいと思いますが、これまでのところ私は運がありませんでした。

ありがとうございました!

+1

このスクリプトを使用すると、誰でもあなたのサーバーから任意のファイルをダウンロードできます。そのため、使用する前にそのファイルを保護する方法を検討します。 – JJJ

+0

私はそれを認識していませんでした、あなたは私がそれを確保する方法を研究できるウェブサイトに私を指摘できますか? –

答えて

2

basename()

$filename = basename($path); 

PS

のContent-Typeを複数回設定してもよいですダウンロードを強制する最良の方法ではありません。また、私はを希望します。あなたはfile_get_contentsを使用する前にその$filename引数を消毒しています。

p.p.s

使用readfile、それをメモリにキャッシュしません。

2
$filename = basename($filename); 
header("Content-Disposition: attachment; filename=$filename"); 

ファイル名をベース名にのみ設定しますか?

変数を変更しない限り、最上位では実行しないでください。ただし、変数を変更しない限り、その変数は変更されません。

関連する問題