首頁 php教程 php手册 php获取本地电脑文件后下载另存为

php获取本地电脑文件后下载另存为

May 25, 2016 pm 04:54 PM
fopen substr 文件上傳 文件下載

在php中下载文件我们用得最多的是直接使用readfile()函数,readfile()可以实现把服务器源文件给下载,下面我来给大家介绍readfile下载文件的方法与性能介绍

例1

 代码如下 复制代码

header(“Content-Type: text/html; charset=UTF-8″);
header(“Content-type:application/text”);

// 文件将被称为 downloaded.pdf
header(“Content-Disposition:attachment;filename=log.text”);

// PDF 源在 original.pdf 中
readfile(“ptindex_user_profilebasc.html”);

?>

例2

 代码如下 复制代码

 

 $item=trim($_GET['fileName']).".txt";  
    $abs_item='/usr/home/文件夹名称/文件夹名称/文件夹名称/'.$item;  
    $browser='IE';  
    header('Content-Type: '.(($browser=='IE' || $browser=='OPERA')?  
        'application/octetstream':'application/octet-stream'));  
    header('Expires: '.gmdate('D, d M Y H:i:s').' GMT');  
    header('Content-Transfer-Encoding: binary');  
    header('Content-Length: '.filesize($abs_item));  
    if($browser=='IE') {  
        header('Content-Disposition: attachment; filename="'.$item.'"');  
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');  
        header('Pragma: public');  
    } else {  
        header('Content-Disposition: attachment; filename="'.$item.'"');  
        header('Cache-Control: no-cache, must-revalidate');  
        header('Pragma: no-cache');  
    }  
@readfile($abs_item); 

上面只能下载本地函数,如果要下载远程的我们可以如下操作PHP远程下载文件到本地的函数

 代码如下 复制代码

echo httpcopy("/baidu_sylogo1.gif");

function httpcopy($url, $file="", $timeout=60) {
    $file = empty($file) ? pathinfo($url,PATHINFO_BASENAME) : $file;
    $dir = pathinfo($file,PATHINFO_DIRNAME);
    !is_dir($dir) && @mkdir($dir,0755,true);
    $url = str_replace(" ","%20",$url);

    if(function_exists('curl_init')) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        $temp = curl_exec($ch);
        if(@file_put_contents($file, $temp) && !curl_error($ch)) {
            return $file;
        } else {
            return false;
        }
    } else {
        $opts = array(
            "http"=>array(
            "method"=>"GET",
            "header"=>"",
            "timeout"=>$timeout)
        );
        $context = stream_context_create($opts);
        if(@copy($url, $file, $context)) {
            //$http_response_header
            return $file;
        } else {
            return false;
        }
    }
}
?>

最后分享一个支持多种文件下载的类函数

 代码如下 复制代码

/**
 * 使用方法:
 * require_once 'download.class.php';
 * $filepath = './path/filename.html';
 * $downname = 'downname.html';
 * $down = new download($filepath,$downname);
 * 或
 * $down = new download();
 *
 * */
class download
{
 var $filepath;
 var $downname;
 var $ErrInfo;
 var $is_attachment = false;
 var $_LANG = array(
   'err' => '错误',
   'args_empty' => '参数错误。',
   'file_not_exists' => '文件不存在!',
   'file_not_readable' => '文件不可读!',
  );
 var $MIMETypes = array(
   'ez' => 'application/andrew-inset',
   'hqx' => 'application/mac-binhex40',
   'cpt' => 'application/mac-compactpro',
   'doc' => 'application/msword',
   'bin' => 'application/octet-stream',
   'dms' => 'application/octet-stream',
   'lha' => 'application/octet-stream',
   'lzh' => 'application/octet-stream',
   'exe' => 'application/octet-stream',
   'class' => 'application/octet-stream',
   'so' => 'application/octet-stream',
   'dll' => 'application/octet-stream',
   'oda' => 'application/oda',
   'pdf' => 'application/pdf',
   'ai' => 'application/postscrīpt',
   'eps' => 'application/postscrīpt',
   'ps' => 'application/postscrīpt',
   'smi' => 'application/smil',
   'smil' => 'application/smil',
   'mif' => 'application/vnd.mif',
   'xls' => 'application/vnd.ms-excel',
   'ppt' => 'application/vnd.ms-powerpoint',
   'wbxml' => 'application/vnd.wap.wbxml',
   'wmlc' => 'application/vnd.wap.wmlc',
   'wmlsc' => 'application/vnd.wap.wmlscrīptc',
   'bcpio' => 'application/x-bcpio',
   'vcd' => 'application/x-cdlink',
   'pgn' => 'application/x-chess-pgn',
   'cpio' => 'application/x-cpio',
   'csh' => 'application/x-csh',
   'dcr' => 'application/x-director',
   'dir' => 'application/x-director',
   'dxr' => 'application/x-director',
   'dvi' => 'application/x-dvi',
   'spl' => 'application/x-futuresplash',
   'gtar' => 'application/x-gtar',
   'hdf' => 'application/x-hdf',
   'js' => 'application/x-javascrīpt',
   'skp' => 'application/x-koan',
   'skd' => 'application/x-koan',
   'skt' => 'application/x-koan',
   'skm' => 'application/x-koan',
   'latex' => 'application/x-latex',
   'nc' => 'application/x-netcdf',
   'cdf' => 'application/x-netcdf',
   'sh' => 'application/x-sh',
   'shar' => 'application/x-shar',
   'swf' => 'application/x-shockwave-flash',
   'sit' => 'application/x-stuffit',
   'sv4cpio' => 'application/x-sv4cpio',
   'sv4crc' => 'application/x-sv4crc',
   'tar' => 'application/x-tar',
   'tcl' => 'application/x-tcl',
   'tex' => 'application/x-tex',
   'texinfo' => 'application/x-texinfo',
   'texi' => 'application/x-texinfo',
   't' => 'application/x-troff',
   'tr' => 'application/x-troff',
   'roff' => 'application/x-troff',
   'man' => 'application/x-troff-man',
   'me' => 'application/x-troff-me',
   'ms' => 'application/x-troff-ms',
   'ustar' => 'application/x-ustar',
   'src' => 'application/x-wais-source',
   'xhtml' => 'application/xhtml+xml',
   'xht' => 'application/xhtml+xml',
   'zip' => 'application/zip',
   'au' => 'audio/basic',
   'snd' => 'audio/basic',
   'mid' => 'audio/midi',
   'midi' => 'audio/midi',
   'kar' => 'audio/midi',
   'mpga' => 'audio/mpeg',
   'mp2' => 'audio/mpeg',
   'mp3' => 'audio/mpeg',
   'wma' => 'audio/mpeg',
   'aif' => 'audio/x-aiff',
   'aiff' => 'audio/x-aiff',
   'aifc' => 'audio/x-aiff',
   'm3u' => 'audio/x-mpegurl',
   'ram' => 'audio/x-pn-realaudio',
   'rm' => 'audio/x-pn-realaudio',
   'rpm' => 'audio/x-pn-realaudio-plugin',
   'ra' => 'audio/x-realaudio',
   'wav' => 'audio/x-wav',
   'pdb' => 'chemical/x-pdb',
   'xyz' => 'chemical/x-xyz',
   'bmp' => 'image/bmp',
   'gif' => 'image/gif',
   'ief' => 'image/ief',
   'jpeg' => 'image/jpeg',
   'jpg' => 'image/jpeg',
   'jpe' => 'image/jpeg',
   'png' => 'image/png',
   'tiff' => 'image/tiff',
   'tif' => 'image/tiff',
   'djvu' => 'image/vnd.djvu',
   'djv' => 'image/vnd.djvu',
   'wbmp' => 'image/vnd.wap.wbmp',
   'ras' => 'image/x-cmu-raster',
   'pnm' => 'image/x-portable-anymap',
   'pbm' => 'image/x-portable-bitmap',
   'pgm' => 'image/x-portable-graymap',
   'ppm' => 'image/x-portable-pixmap',
   'rgb' => 'image/x-rgb',
   'xbm' => 'image/x-xbitmap',
   'xpm' => 'image/x-xpixmap',
   'xwd' => 'image/x-xwindowdump',
   'igs' => 'model/iges',
   'iges' => 'model/iges',
   'msh' => 'model/mesh',
   'mesh' => 'model/mesh',
   'silo' => 'model/mesh',
   'wrl' => 'model/vrml',
   'vrml' => 'model/vrml',
   'css' => 'text/css',
   'html' => 'text/html',
   'htm' => 'text/html',
   'asc' => 'text/plain',
   'txt' => 'text/plain',
   'rtx' => 'text/richtext',
   'rtf' => 'text/rtf',
   'sgml' => 'text/sgml',
   'sgm' => 'text/sgml',
   'tsv' => 'text/tab-separated-values',
   'wml' => 'text/vnd.wap.wml',
   'wmls' => 'text/vnd.wap.wmlscrīpt',
   'etx' => 'text/x-setext',
   'xsl' => 'text/xml',
   'xml' => 'text/xml',
   'mpeg' => 'video/mpeg',
   'mpg' => 'video/mpeg',
   'mpe' => 'video/mpeg',
   'qt' => 'video/quicktime',
   'mov' => 'video/quicktime',
   'mxu' => 'video/vnd.mpegurl',
   'avi' => 'video/x-msvideo',
   'movie' => 'video/x-sgi-movie',
   'wmv' => 'application/x-mplayer2',
   'ice' => 'x-conference/x-cooltalk',
  );
 
 function download($filepath='',$downname='')
 {
  if($filepath == '' AND !$this->filepath)
  {
   $this->ErrInfo = $this->_LANG['err'] . ':' . $this->_LANG['args_empty'];
   return false;
  }
  if($filepath == '') $filepath = $this->filepath;
  if(!file_exists($filepath))
  {
   $this->ErrInfo = $this->_LANG['err'] . ':' . $this->_LANG['file_not_exists'];
   return false;
  }
  if($downname == '' AND !$this->downname) $downname = $filepath;
  if($downname == '') $downname = $this->downname;
  // 文件扩展名
  $fileExt = substr(strrchr($filepath, '.'), 1);
  // 文件类型
  $fileType = $this->MIMETypes[$fileExt] ? $this->MIMETypes[$fileExt] : 'application/octet-stream';
  // 是否是图片
  $isImage = False;
  /*
  简述: getimagesize(), 详见手册
  说明: 判定某个文件是否为图片的有效手段, 常用在文件上传验证
  */
  $imgInfo = @getimagesize($filepath);
  if ($imgInfo[2] && $imgInfo['bits'])
  {
   $fileType = $imgInfo['mime'];  // 支持不标准扩展名
   $isImage = True;
  }
  // 显示方式
  if($this->is_attachment)
  {
   $attachment = 'attachment';  // 指定弹出下载对话框
  }
  else
  {
   $attachment = $isImage ? 'inline' : 'attachment';
  }
  // 读取文件
  if (is_readable($filepath))
  {
   /*
   简述: ob_end_clean() 清空并关闭输出缓冲, 详见手册
   说明: 关闭输出缓冲, 使文件片段内容读取至内存后即被送出, 减少资源消耗
   */
   ob_end_clean();
   /*
   HTTP头信息: 指示客户机可以接收生存期不大于指定时间(秒)的响应
   */
   header('Cache-control: max-age=31536000');
   /*
   HTTP头信息: 缓存文件过期时间(格林威治标准时)
   */
   header('Expires: ' . gmdate('D, d M Y H:i:s', time()+31536000) . ' GMT');
   /*
   HTTP头信息: 文件在服务期端最后被修改的时间
   Cache-control,Expires,Last-Modified 都是控制浏览器缓存的头信息
   在一些访问量巨大的门户, 合理的设置缓存能够避免过多的服务器请求, 一定程度下缓解服务器的压力
   */
   header('Last-Modified: ' . gmdate('D, d M Y H:i:s' , filemtime($filepath) . ' GMT'));
   /*
   HTTP头信息: 文档的编码(Encode)方法, 因为附件请求的文件多样化, 改变编码方式有可能损坏文件, 故为none
   */
   header('Content-Encoding: none');
   /*
   HTTP头信息: 告诉浏览器当前请求的文件类型.
   1.始终指定为application/octet-stream, 就代表文件是二进制流, 始终提示下载.
   2.指定对应的类型, 如请求的是mp3文件, 对应的MIME类型是audio/mpeg, IE就会自动启动Windows Media Player进行播放.
   */
   header('Content-type: ' . $fileType);
   /*
   HTTP头信息: 如果为attachment, 则告诉浏览器, 在访问时弹出”文件下载”对话框, 并指定保存时文件的默认名称(可以与服务器的文件名不同)
   如果要让浏览器直接显示内容, 则要指定为inline, 如图片, 文本
   */
   header('Content-Disposition: ' . $attachment . '; filename=' . $downname);
   /*
   HTTP头信息: 告诉浏览器文件长度
   (IE下载文件的时候不是有文件大小信息么?)
   */
   header('Content-Length: ' . filesize($filepath));
   // 打开文件(二进制只读模式)
   $fp = fopen($filepath, 'rb');
   // 输出文件
   fpassthru($fp);
   // 关闭文件
   fclose($fp);
   return true;
  }
  else
  {
   $this->ErrInfo = $this->_LANG['err'] . ':' . $this->_LANG['file_not_readable'];
   return false;
  }
 }
}
?>



本文地址:

转载随意,但请附上文章地址:-)

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1319
25
PHP教程
1269
29
C# 教程
1248
24
Python下載檔案後的開啟操作 Python下載檔案後的開啟操作 Apr 03, 2024 pm 03:39 PM

Python提供以下選項開啟下載檔案:open()函數:使用指定路徑和模式(如'r'、'w'、'a')開啟檔案。 Requests函式庫:使用其download()方法自動指派名稱並直接開啟檔案。 Pathlib函式庫:使用write_bytes()和read_text()方法寫入和讀取檔案內容。

實作Workerman文件中的文件上傳與下載 實作Workerman文件中的文件上傳與下載 Nov 08, 2023 pm 06:02 PM

實現Workerman文件中的文件上傳與下載,需要具體程式碼範例引言:Workerman是一款高效能的PHP非同步網路通訊框架,具備簡潔、高效、易用等特點。在實際開發中,文件上傳和下載是常見的功能需求,本文將介紹如何使用Workerman框架實現文件的上傳和下載,並給出具體的程式碼範例。一、檔案上傳:檔案上傳是指將本機上的檔案傳輸至伺服器端的操作。下面是使用

如何解決PHP Warning: fopen(): SSL operation failed in file.php on line X 如何解決PHP Warning: fopen(): SSL operation failed in file.php on line X Aug 25, 2023 am 09:22 AM

如何解決PHPWarning:fopen():SSLoperationfailedinfile.phponlineX在PHP程式設計中,我們經常使用fopen函數來開啟檔案或URL,並進行相關操作。然而,在使用fopen函數時,有時候會遇到類似Warning:fopen():SSLoperationfailedinfile.p

如何解決PHP Warning: fopen(): failed to open stream: Permission denied 如何解決PHP Warning: fopen(): failed to open stream: Permission denied Aug 20, 2023 pm 01:45 PM

如何解決PHPWarning:fopen():failedtoopenstream:Permissiondenied在開發PHP程式的過程中,我們常常會遇到一些報錯訊息,例如PHPWarning:fopen():failedtoopenstream:Permissiondenied。這個錯誤通常是因為檔案或目錄權限不正

如何利用Laravel實作檔案上傳與下載功能 如何利用Laravel實作檔案上傳與下載功能 Nov 02, 2023 pm 04:36 PM

如何利用Laravel實現文件上傳和下載功能Laravel是一個流行的PHPWeb框架,提供了豐富的功能和工具,使得開發Web應用程式更加簡單和有效率。其中一個常用的功能就是檔案上傳和下載。本文將介紹如何利用Laravel實作檔案上傳和下載功能,並提供具體的程式碼範例。文件上傳文件上傳是指將本機的文件上傳到伺服器上儲存。在Laravel中,我們可以使用檔案上傳

Laravel中的文件上傳和處理:管理用戶上傳的文件 Laravel中的文件上傳和處理:管理用戶上傳的文件 Aug 13, 2023 pm 06:45 PM

Laravel中的檔案上傳與處理:管理使用者上傳的檔案引言:在現代Web應用程式中,檔案上傳是很常見的功能需求。在Laravel框架中,文件上傳和處理變得非常簡單和有效率。本文將介紹如何在Laravel中管理使用者上傳的文件,包括文件上傳的驗證、儲存、處理和顯示。一、文件上傳文件上傳是指將文件從客戶端上傳到伺服器端。在Laravel中,檔案上傳非常容易處理。首先,

如何用PHP實作FTP檔案上傳進度條 如何用PHP實作FTP檔案上傳進度條 Jul 30, 2023 pm 06:51 PM

如何用PHP實作FTP檔案上傳進度條一、背景介紹在網站開發中,檔案上傳是常見的功能。而對於大檔案的上傳,為了提高使用者體驗,我們常常需要向使用者顯示一個上傳進度條,讓使用者知道檔案上傳的進程。本文將介紹如何使用PHP實作FTP檔案上傳進度條的功能。二、FTP檔案上傳進度條的實現方法基本思路FTP檔案上傳的進度條實現,通常是透過計算上傳的檔案大小和已上傳檔案大小

如何解決Java檔案上傳異常(FileUploadException) 如何解決Java檔案上傳異常(FileUploadException) Aug 18, 2023 pm 12:11 PM

如何解決Java檔案上傳異常(FileUploadException)上傳檔案在網路開發中經常會遇到的一個問題是FileUploadException(檔案上傳例外)。它可能會因各種原因而出現,例如檔案大小超過限制、檔案格式不符或伺服器配置不正確等。本文將介紹一些解決這些問題的方法,並提供相應的程式碼範例。限制上傳檔案的大小在大多數場景下,限製檔案大小

See all articles