ルート ディレクトリの外にあるダウンロード フォルダに保存されている圧縮ファイル (製品) をメンバー/購入者がダウンロードできるようにする PHP スクリプト/ページを作成するにはどうすればよいですか? 私はApacheサーバーを使用しています。助けてください!
ありがとう!ポール G.
@soac が提供するリンクでより良い情報を見つけることができるかもしれませんが、PDF ファイルのみの私のコードの一部を抜粋したものを以下に示します。
<?php
$file = ( !empty($_POST['file']) ? basename(trim($_POST['file'])) : '' );
$full_path = '/dir1/dir2/dir3/'.$file; // absolute physical path to file below web root.
if ( file_exists($full_path) )
{
$mimetype = 'application/pdf';
header('Cache-Control: no-cache');
header('Cache-Control: no-store');
header('Pragma: no-cache');
header('Content-Type: ' . $mimetype);
header('Content-Length: ' . filesize($full_path));
$fh = fopen($full_path,"rb");
while (!feof($fh)) { print(fread($fh, filesize($full_path))); }
fclose($fh);
}
else
{
header("HTTP/1.1 404 Not Found");
exit;
}
?>
これにより、PDF 自体をダウンロードするのではなく、ブラウザーで開くことに注意してください。ただし、リーダー内からファイルをローカルに保存することはできます。を使用readfile()
すると、この例のようにハンドルを介してファイルを開く古い方法よりもおそらく効率的 (かつコードがきれい) になります。
readfile($full_path);
あなたが達成しようとしていること (php 経由で既存の zip ファイルをストリーミングする) は、次の回答と同様に実行できると思います: LAMP: ディスク/CPU のスラッシングなしで、その場でユーザーのために大きなファイルの .Zip を作成する方法
この回答からのコードのわずかに変更されたバージョン:
// make sure to send all headers first
// Content-Type is the most important one (probably)
//
header('Content-Type: application/x-gzip');
$filename = "/path/to/zip.zip";
$fp = fopen($filename, "rb");
// pick a bufsize that makes you happy
$bufsize = 8192;
$buff = '';
while( !feof($fp) ) {
$buff = fread($fp, $bufsize);
echo $buff;
}
pclose($fp);