ファイルにアクセスするためにWebサーバーのパスを使用していることを確認してください。たとえば、パスが/home/yourusername/public/sitename/downloads/<filename>
の場合は、最初に確認してください。これをPHPスクリプトの上部で実行して現在のスクリプトのフルパス:
echo '<pre>FILE PATH: '.print_r(__FILE__, true).'</pre>';
die();
のみurlencode()
を使用して、URLとし、任意の文字エンコーディングの問題を処理するために、受信したPHPスクリプトの使用urldecode()
にファイル名を送信します。
こちらをご覧ください:http://php.net/manual/en/function.urlencode.php 、ここに:http://php.net/manual/en/function.urldecode.php
そこでここでは、あなたのURLを作成します。
<a href="/my-download-url/<?= urlencode('file name.pdf') ?>">Download File</a>
そして、あなたのPHPスクリプトで:
$file_base_path = '/home/yourusername/public/sitename/downloads/';
$file = urldecode($_GET['url']);
$file = $file_base_path . $file;
$file = $_GET['url'];
if (file_exists($file))
{
if (FALSE!== ($handler = fopen($file, 'r')))
{
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: chunked'); //changed to chunked
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
//header('Content-Length: ' . filesize($file)); //Remove
//Send the content in chunks
while(false !== ($chunk = fread($handler,4096)))
{
echo $chunk;
}
}
exit;
}
echo "<h1>Content error</h1><p>The file does not exist!</p>";
私はこれが役に立てば幸い君は!
さらに私はapplication/octet-streamをapplication/pdfに置き換えました。 –
質問は "PHP(How to)PDFファイルのダウンロードを強制する"ですが、あなたの質問では、 "上記のコードはファイルをダウンロードしています" - だから問題は何ですか? – ajmedway
上記のコードは、破損しているファイルをダウンロードしています。 PDFファイルのサイズを確認すると、1KBになります。混乱しているタイトルについては申し訳ありません。 –