重複の可能性:別のファイルの
php
強制ダウンロードでファイルのダウンロードを強制する
ユーザーが自分のサイトから PHP で画像をダウンロードできるようにしようとしています。私はそれに関する記事をたくさん見てきましたが、php ドキュメントからreadfileを使用しようとしていました。しかし、私はそれを機能させることができないようです。
これは、ダウンロードを開始するために設定しようとしているボタンのコードです。
<!-- download image button -->
<form class="grid_12" style="text-align: center;" action="../includes/download.php" method="post">
<input type="hidden" name="id" value="<?php echo $photo->id; ?>" />
<input type="hidden" name="img" value="<?php echo $photo->filename; ?>" />
<?php if(isset($_GET['cat'])){?>
<input type="hidden" name="cat" value="<?php echo $_GET['cat']; ?>" />
<?php } ?>
<div id="download"><input type="submit" name="submit" value="Download Photo" /></div>
</form>
そして、これは私が download.php ファイルに設定したコードです (redirect_to は header(Location: var) を呼び出す関数であり、var はあなたが渡すものです。
<?php
require_once('initialize.php');
?>
<?php
header("Content-type: application/force-download; filename=".$_POST['img']);
// Force download of image file specified in URL query string and which
// is in the same directory as this script:
if(!empty($_POST['img']))
{
$file = $_POST['img'];
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');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
$addy = "../public/photo.php?id=".$_POST['id'];
if(isset($_POST['cat'])){
$addy .= "&cat=".$_POST['cat'];
}
redirect_to($addy);
}
header("HTTP/1.0 404 Not Found");
?>
投稿で送信している隠し変数は、主に、ダウンロードの開始後にユーザーをダウンロード元のページに戻すためのリダイレクト用です。ローカル ホストで、ダウンロード ボタンをクリックしたページにリダイレクトされます。私のサーバーでは、download.php として登録されている空白のページに送信されます。空白のページが表示されるため、これは潜在的に出力バッファリングと関係があると思います。これは通常、header() 関数を呼び出す前に何らかの出力があったことを意味します。
ここで私が間違っていることについて誰かが私に洞察を与えることができれば、私は大いに感謝します、読んでくれてありがとう。
-アラン