圖解PHP檔案下載原理執行個體

來源:互聯網
上載者:User

1、php下載原理圖

 

2、檔案下載源碼:

<?php
$file_name="哈哈.jpg";//需要下載的檔案
$file_name=iconv("utf-8","gb2312","$file_name");
$fp=fopen($file_name,"r+");//下載檔案必須先要將檔案開啟,寫入記憶體
if(!file_exists($file_name)){//判斷檔案是否存在
    echo "檔案不存在";
    exit();
}
$file_size=filesize("a.jpg");//判斷檔案大小
//返回的檔案
Header("Content-type: application/octet-stream");
//按照位元組格式返回
Header("Accept-Ranges: bytes");
//返迴文件大小
Header("Accept-Length: ".$file_size);
//彈出用戶端對話方塊,對應的檔案名稱
Header("Content-Disposition: attachment; filename=".$file_name);
//防止伺服器瞬時壓力增大,分段讀取
$buffer=1024;
while(!feof($fp)){
    $file_data=fread($fp,$buffer);
    echo $file_data;
}
//關閉檔案
fclose($fp);
?>

3、檔案編碼問題解決方案:

如果檔案名稱是中文,php的函數不能識別中文檔案名稱,一般如果程式編碼為utf-8,php的函數比較古老,只能識別gb2312編碼的中文,所以把中文用iconv(“原編碼”,”要轉成的編碼”,”要轉碼的字串”)函數可以轉碼。

比如,把一個字串從utf-8轉碼為gb2312

$file_name=iconv(“utf-8”,”gb2312”,”$file_name”);

PHP下載遠程檔案原理

/**
 * PHP下載遠程檔案到本地原理:通過PHP函數,先讀取遠程檔案,然後在本地建立一個新的空檔案,
 * 然後將已讀取的遠程檔案的內容寫入到新建立的檔案當中,這樣就可以達到遠程檔案下載功能
 * @author JackyLi
 *
 */
class DownloadFile {
 /**
  * @param string $file  遠程需要下載的檔案
  */
 public static function get_img_file($file) {
  $targetDir = sys_get_temp_dir () . DIRECTORY_SEPARATOR . "plupload" . DIRECTORY_SEPARATOR;
  if (! file_exists ( $targetDir )) { //檢測臨時下載目錄是否存在,不存在,則建立一個
   @mkdir ( $targetDir );
  }
  if (! $file) {
   return false;
  }
  $ext = strrchr ( $file, "." ); //取副檔名
  $filename = $targetDir . '/' . basename ( $file, $ext ) . date ( "YmdHis" ) . $ext; //需要儲存的檔案名稱(帶完整路徑)
  ob_start (); //開啟output buffering
  readfile ( $file ); //將檔案讀取buffering中
  $img = ob_get_contents (); //將buffering中的資料儲存到變數當中,方便後續操作
  ob_end_clean (); //關閉output buffering
  $fp2 = @fopen ( $filename, "a" ); //開啟目標檔案(馬上被寫入資料的檔案)
  fwrite ( $fp2, $img ); //寫入資料到檔案當中
  fclose ( $fp2 ); //關閉檔案控制代碼
  //上面讀取檔案內容,可以直接用下面兩行代替
  //    $file = file_get_contents($file); 
  //    file_put_contents($filename,$file);  
  return true;
 }
}

$download = new DownloadFile ();
$download->get_img_file ( 'http://news.sina.com.cn/c/2011-09-16/021323162600.shtml' );

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.