ホームページ  >  記事  >  バックエンド開発  >  現在のファイルをダウンロードするように PHP を設計したのに、PHP ソース ファイルがダウンロードされてしまうのはなぜですか?

現在のファイルをダウンロードするように PHP を設計したのに、PHP ソース ファイルがダウンロードされてしまうのはなぜですか?

WBOY
WBOYオリジナル
2016-06-23 14:10:56621ブラウズ

ダウンロードするために a.txt をクリックしたときに、txt ファイルを開いたところ、中身が a.txt 自体の内容ではなく、php コード以外の php ファイル内の他のテキスト内容であることがわかりました。これを解決するにはどうすればよいですか?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>资料下载</title></head><body><?php $file_name="a.txt";$file_dir="./";if(!file_exists($file_dir.$file_name)){ echo "文件找不到";   exit;}else{$file=fopen($file_dir.$file_name,"r");//打开文件	echo($file_dir.$file_name); Header("Content-type: application/octet-stream");   Header("Accept-Ranges:bytes");   Header("Accept-Length:".filesize($file_dir.$file_name));   Header("Content-Disposition: attachment; filename=".$file_name); }?></body></html>


ディスカッションに返信 (解決策)

$file_name="a.txt";

$file_dir="./"
if(!file_exists($file_dir.$file_name)){
echo "ファイルが見つかりません";
exit;
}else{
$file=fopen($file_dir.$file_name,"r");//ファイルを開きます
//echo($file_dir.$file_name);
Header(" Content-type: application/octet-stream");
Header("Accept-Ranges:bytes");
Header("Accept-Length:".filesize($file_dir.$file_name));
Header("コンテンツの配置: filename=".$file_name);
readfile($file_dir.$file_name);
}

69b3273a99fbe726ed7ec6b6f2ba7d76

68ccb177a5de0ef9542dde7d35bae727
0e43763fb4122fc7e7efd6cdd40741e4
9c3bca370b5104690d9ef395f2c5f8d1 body>


if にこれらを入れます。
$file_name="a.txt";
$file_dir="./";
if(!file_exists($file_dir.$file_name)){
echo "ファイルが見つかりません"

}else{

$file=fopen($file_dir.$file_name,"r"); // ファイルを開きます
//echo($file_dir.$file_name)
Header("Content-type: application/octet-stream");
Header("Accept-Ranges:bytes");
Header("Accept-Length:".filesize($file_dir.$file_name));
Header("Content-Disposition:attachment; filename=".$file_name) ;
readfile($file_dir.$file_name);
} 私はあなたがしたようにそれを変更しました、そして、コンテンツは表示できます、しかしそれは本文に表示されます...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>资料下载</title></head><body>这是我的内容。</body></html>


それらの HTML タグは必要ありません私の#1のように。

ダウンロードしているため、プログラム内のすべての出力はダウンロードされたファイルの内容です
Header 関数は後で実行されますが、php はそれを応答の http ヘッダーに動員します
プログラムではファイルを開いただけで、実際には開いていませんファイルの内容を読み取って出力します

少なくとも
<?php $file_name="a.txt";$file_dir="./";if(!file_exists($file_dir.$file_name)){ echo "文件找不到";   exit;}else{ Header("Content-type: application/octet-stream");   Header("Accept-Ranges:bytes");   Header("Accept-Length:".filesize($file_dir.$file_name));   Header("Content-Disposition: attachment; filename=".$file_name); readfile($file_dir.$file_name);}
を書き込みます

私の #1 と同じように、これらの HTML タグは必要ありません。 さて、問題は解決しました、ありがとう!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。