1

通常、友人や家族のためにドキュメント (画像、mpeg、Excel、Word ドキュメントなど) を Web サイトのルートにある /files/ などのディレクトリに保存します。あまりにも珍しいことは何もありません。

しかし、私はユーザー セッション コントロールで遊んでおり、ユーザーが専用の /files/ ディレクトリにファイルをアップロードできるようにしています。(ファイル名はそのユーザーの ID でデータベースに保存されます)

ただし、これは、他の人が他の人のファイルを推測して見つけようとする可能性があることを意味します。
アップロード時にファイル名をランダム化します。そして、Apache が /files/ ディレクトリの内容を表示しないようにします。

ただし、Web サイトのルート以外にファイルを保存したいと思います。この方法では、ブラウザ経由でアクセスできません。

表示するコードはありませんが、達成できない場合は、この取り組みを開始することさえしませんでした. ウェブサイトのルート外から画像を表示する方法を示す次のスニペットを見つけました。

たぶん、これを任意のファイルタイプに使用できますが、(ログインしている) ユーザーがオンラインから自分のファイルにアクセスできるようにするが、他のユーザーには同様のアクセスを許可しないより良い方法を聞いたことがありますか?

4

1 に答える 1

1

readfilePHPマニュアルは、関数のページの例でこれを達成する方法についての良い洞察を提供します:

<?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;
}
?>

これにより、content-disposition ヘッダーと content-type ヘッダーを設定することで、すべてのファイルが強制的にダウンロード可能になります。これは、この種のことが通常行われる方法でfile_get_contentsあり、同じことを行うこともできます。

于 2010-04-05T23:21:36.643 に答える