PHP 下载保存文件到本地

经常需要点击按钮,然后弹出一个对话框,保存下载文件。

最常见的方式,就用<a>链接实现,例如:

<a href="xxx/youfile.txt"> youfile.txt </a>

 

本文介绍的下载保存方式,是通过生成文件后,然后用代码实现下载保存。

完整示例推荐

<?php
/**
* 下载文件header函数
* copyright by www.mimvp.com
* 2015-05-10
*/

$res_filepath = "";
if(isset($_GET["filepath"])) {
	$res_filepath = $_GET["filepath"];
}

// 	$filepath = "./lib/tmp_txt_result_file_20150508170116.txt";
	$file_realpath = realpath($res_filepath);
	$file_basename = basename($res_filepath);
// 	$file_filesize = filesize($res_filepath);
	$file_fileinfo = pathinfo($res_filepath);

	if (!file_exists($res_filepath)){
		header("Content-type: text/html; charset=utf-8");
		echo "<html>
				<div style='margin-left: 20px'>
					<br>
					<font color='blue'>$file_basename</font> 是临时文件已过期,服务器不保存!
					<br><br>
					请提取最新代理: <a href='../fetch.php'>http://proxy.mimvp.com/api/fetch.php</a>
					
					<!--
					<script>
					alert('" . $file_basename . "\\n是临时文件,服务器不保存! \\n\\n请重新提取最新代理');
				 	</script>
					-->
				</div>
			  </html>";
	} else {
		$file_filesize = filesize($res_filepath);
		$file = fopen($res_filepath, "r");
		Header("Content-type: application/octet-stream");
		Header("Accept-Ranges: bytes");
		Header("Accept-Length: " . $file_filesize);
		Header("Content-Disposition: attachment; filename=" . $file_basename);
		echo fread($file, $file_filesize);
		fclose($file);
// 		echo file_get_contents($filename);
// 		readfile($filename);
	}

	// 下载或取消后,删除临时文件
	$del_result = @unlink($res_filepath);
	if ($del_result == true) {
		@unlink($res_filepath);
	}
?>

 

网上其他方式

第一种:

<?php 
	function downfile() {
		 $filename=realpath("resume.html"); //文件名
		 $date=date("Ymd-H:i:m");
		 Header( "Content-type:  application/octet-stream "); 
		 Header( "Accept-Ranges:  bytes "); 
		 Header( "Accept-Length: " .filesize($filename));
		 header( "Content-Disposition:  attachment;  filename= {$date}.doc"); 
		 echo file_get_contents($filename);
		 readfile($filename); 
	}
	downfile();
?>

<?php 
	function downfile($fileurl) {
		 ob_start(); 
		 $filename=$fileurl;
		 $date=date("Ymd-H:i:m");
		 header( "Content-type:  application/octet-stream "); 
		 header( "Accept-Ranges:  bytes "); 
		 header( "Content-Disposition:  attachment;  filename= {$date}.doc"); 
		 $size=readfile($filename); 
		 header( "Accept-Length: " .$size);
	}
	$url="url地址";
	downfile($url);
?> 

 

第二种:

<?php 
	function downfile($fileurl) {
		$filename=$fileurl;
		$file  =  fopen($filename, "rb"); 
		Header( "Content-type:  application/octet-stream "); 
		Header( "Accept-Ranges:  bytes "); 
		Header( "Content-Disposition:  attachment;  filename= 4.doc"); 
		$contents = "";
		while (!feof($file)) {
		 	$contents .= fread($file, 8192);
		}
		echo $contents;
		fclose($file); 
	}
	$url="url地址";
	downfile($url);
?>

 

PHP实现下载文件的两种方法

方法1:

<?php
	/**
	* 下载文件, header函数实现
	*/

	header('Content-Description: File Transfer');
	header('Content-Type: application/octet-stream');
	header('Content-Disposition: attachment; filename='.basename($filepath));
	header('Content-Transfer-Encoding: binary');
	header('Expires: 0′);
	header('Cache-Control: must-revalidate, post-check=0, pre-check=0′);
	header('Pragma: public');
	header('Content-Length: ' . filesize($filepath));
	readfile($file_path);
?>

了解php中header函数的用法

 

方法2:

<?php
	//文件下载, readfile实现
	$fileinfo = pathinfo($filename);
	header('Content-type: application/x-'.$fileinfo['extension']);
	header('Content-Disposition: attachment; filename='.$fileinfo['basename']);
	header('Content-Length: '.filesize($filename));
	readfile($thefile);
	exit();
?>

 

经典实例:

http://proxy.mimvp.com/fetch.php      (米扑代理提取,推荐

 

 

参考推荐:

PHP 文件操作常用函数

PHP 常用函数总结(数组,字符串,时间,文件操作)

PHP 路径详解 dirname,realpath,__FILE__,getcwd

PHP 获取网页标题(title)、描述(description)、关键字(keywords)等meta信息

PHP 下载保存文件到本地

PHP下载远程图片

PHP抓取网站ico图标

PHP + Selenium + WebDriver 抓取米扑科技首页

PHP 文件导入 require, require_once, include, include_once 区别