PHP を使用して一部のファイルをダウンロードするには、通常、ファイルの実際のダウンロード アドレスを隠す必要があります。そうしないと、ソフトウェアのアドレスを直接指定することをお勧めします。
単純な php ファイルはソース コードをダウンロードしますが、ブレークポイントの再開などはサポートされていませんが、いくつかの一般的なニーズを満たすことができます。 PHP ダウンロード ファイルは、実際には magento-1.8.1.0.zip などの タグを使用して取得できます。ただし、ブラウザーが認識できる形式 (.txt、.html、.pdf など) に遭遇した場合は、abc.txt を使用するとどうなるかを理解しておく必要があります。
- /**
- * ファイルのダウンロード
- *
- **/
- header("Content-type:text/html;charset=utf-8");
- download('web/magento-1.8.1.0.zip ', 'magento download');
- function download($file, $down_name){
- $suffix = substr($file,strrpos($file,'.')); //ファイルのサフィックスを取得します
- $down_name = $ down_name .$suffix; //新しいファイル名はダウンロード後の名前になります
- //指定されたファイルが存在するかどうかを判断します
- if(!file_exists($file)){
- die("ダウンロードしたいファイルはもう存在しません、削除された可能性があります");
- }
- $fp = fopen($file,"r");
- $file_size = filesize($file);
- //ファイルのダウンロードに必要なヘッダー
- header("Content- type : application/octet-stream");
- header("Accept-Ranges: bytes");
- header("Accept-Length:".$file_size);
- header("Content-Disposition:attachment; filename=". $ down_name);
- $buffer = 1024;
- $file_count = 0;
- //データをブラウザに返す
- while(!feof($fp) && $file_count < $file_size){
- $file_con = fread($fp , $buffer);
- $file_count += $buffer;
- echo $file_con;
- } www.jbxue.com
- fclose($fp);
- }
- ?>
コードをコピー
PHP必須ファイルダウンロードのソースコード
ユーザーに必須のファイルダウンロード機能を提供します。
- /********************
- *@file - ファイルへのパス
- */
- function Force_download($file)
- {
- if ((isset($file))&&(file_exists($file))) {
- header("Content-length: " .filesize($file));
- header('Content-Type: application/octet-stream');
- header('Content-Disposition:attachment; filename="' . $file . '"');
- readfile( "$file");
- } else {
- echo "ファイルが選択されていません";
- }
- }
コードをコピー
「ファイルをダウンロードする」ということがそんなに簡単だと言う価値があるでしょうか?もちろん、それは想像されているほど単純ではありません。たとえば、顧客が特定のファイルをダウンロードする前にフォームに記入してもらいたい場合、最初に「リダイレクト」メソッドを使用する必要があります。まずフォームが記入され完了したかどうかを確認し、次に URL を指定する必要があります。をファイルに追加して、顧客がダウンロードできるようにします。ただし、「オンライン ショッピング」に関する電子商取引 Web サイトを作成し、セキュリティの問題を考慮する場合は、ユーザーが URL を直接コピーしてファイルをダウンロードすることは望ましくありません。著者は、PHP を使用して実際のファイルを直接読み取り、それをダウンロードする方法をお勧めします。手順は以下の通りです
- $file_name = "info_check.exe";
- $file_dir = "/public/www/download/";
- if (!file_exists($file_dir . $file_name)) { //ファイルが存在するかどうかを確認する
- echo " ファイルが見つかりません";
- 終了;
- } else {
- $file = fopen($file_dir . $file_name,"r"); // ファイルを開きます
- // ファイルタグを入力します www.jbxue.com
- 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);
- // 出力ファイルの内容
- echo fread($file,filesize($file_dir . $file_name));
- fclose($file);
- exit;
- }
コードをコピー
ファイルパスが「http」または「ftp」URLの場合、ソースコードは以下のように少し変更されます。
$file_name = "info_check.exe";- $file_dir = "http://www.jbxue.com/";
- $file = @ fopen($file_dir . $file_name,"r");
- if (!$file) {
- echo "ファイルが見つかりません";
- } else {
- Header("Content-type: application/octet-stream");
- Header("Content-Disposition:attachment; filename=" . $ file_name );
- while (!feof ($file)) {
- echo fread($file,50000);
- }
- fclose ($file);
- }
-
コードをコピー この方法では、PHP を使用してファイルを直接出力できます。
ただし、ヘッダー情報は、まずファイル情報を高速に閲覧し、その情報をブラウザ上で添付ファイルにダウンロードすることに相当します。したがって、MVC モードのアプリケーションを使用している場合は、ビュー ページにコンテンツを含めることはできません。そうしないと、ビュー ページの関連コンテンツがファイルのコンテンツと一緒にダウンロードされ、ダウンロードされたファイルが使用できなくなります。 私のプログラムは次のとおりです:
- public function downloadAction()
- {
- if (isset($_GET['mriID']))
- {
- $this->view->mriID=(get_magic_quotes_gpc())?$_GET['mriID ']:addslashes($_GET['mriID']);
- }
- if (isset($_GET['dicomID']))
- {
- $this->view->dicomID=(get_magic_quotes_gpc())? $_GET['dicomID']:addslashes($_GET['dicomID']);
- }
- if (isset($_GET['JPGID']))
- {
- $this->view->JPGID=( get_magic_quotes_gpc())?$_GET['JPGID']:addslashes($_GET['JPGID']);
- } www.jbxue.com
- $dicomfile=new dicomfile()
- $jpgfile=new jpgfile();
- $mri=new mri();
- if($this->view->dicomID)
- {
- $filename=$dicomfile->find($this->view->dicomID)->toArray ();
- $filename=$filename[0]['filename'];
- }
- else if($this->view->JPGID)
- {
- $filename=$jpgfile->find($this ->view->JPGID)->toArray();
- $filename=$filename[0]['JPGname'];
- }
- $dir=$mri->find($this->view ->mriID)->toArray();
- $dir=$dir[0]['dicom_path'];
- $file=$dir.'/'.$filename;
- if (!file_exists($file) )
- {
- echo "ファイルが存在しません!";
- exit();
- }
- $file_size=filesize($file);
- header("Content-type: application/octet-stream");
- header( "Accept-Range: バイト");
- header("Accept-Length:". $file_size);
- header("Content-Disposition:attachment; filename=".$filename);
- $fp=fopen($file, "r");
- if (!$fp)
- echo "ファイルを開けません!";
- $buffer_size=1024;
- $cur_pos=0;
- while (!feof($fp)&&$file_size-$cur_pos> ;$buffer_size)
- {
- $buffer=fread($fp,$buffer_size);
- echo $buffer;
- $cur_pos+=$buffer_size;
- }
- $buffer=fread($fp,$file_size-$cur_pos);
- echo $buffer;
- fclose($fp)
- }
コードをコピー
この時点では、download.phtml ページは完全に空白である必要があります。いかなるコンテンツも含めないでください (次のような定型メッセージも含みます:
)
-
- 無題ドキュメント) それ以外の場合、この情報はダウンロード ファイルにダウンロードされ、ファイルが使用できなくなります。
コードをコピー
|