1

こんにちは、製品に関連するデモ ファイルのダウンロードを許可しようとしています。私のコードはこのようなものです

if(isset($_POST['submit'])){     
    $root = $_SERVER['DOCUMENT_ROOT'];
    $path = "/download/";
    $path = $root.$path;
$filename = $demo;
$file = $path.$filename;
header('Content-Type: application/force-download');
header("Content-Transfer-Encoding: Binary"); 
header("Content-Disposition: attachment; filename=\"".basename($file)."\";" );
header("Content-Length: ".filesize($file));
 readfile($file);
    }

製品に関連付けられているファイル名を取得できます

$デモ

ユーザーが自分の情報を送信すると、ダウンロードが自動的に開始されます。現在、これは、存在しないファイルまたは破損したファイルを適切なファイル名でダウンロードしています。助けてください

4

1 に答える 1

6
<?php
$file = 'monkey.gif';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    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));
    ob_clean();
    flush();
    readfile($file);
    exit;
}

?>

ご覧のとおり、コンテンツ タイプはapplication/octet-steam、ファイルがバイト単位でエンコードされていることを意味します。また、キャッシュ ヘッダーが設定されます。次に、ヘッダーが強制的に送信されob_clean();flush()ます。そして、ファイルが読み込まれます。

指定されたfile_existsファイルが存在することを確認するためにあります。また、php コードの名前を簡単に書き込んで各ファイルをダウンロードできるため、ユーザー入力を押し付けないようにしてください。また../、ファイルの名前、さらにはドキュメントやシステム ファイルなども含まれます。

于 2014-04-21T08:22:09.317 に答える