在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
原文来自于:http://courages.us/archives/176
网站上需要提供一些打印数据给用户下载,这些文件每次都需要重新生成,因为随时都会有新的数据产生。网络上关于PHP的压缩功能实现有多种方式,比如PclZip,ZipArchive等。PclZip是使用PHP写的一个压缩解压类,方便使用,不用安装扩展;而ZipArchive则在PHP 5.3之后随PHP携带发行,不需要再去开启扩展。本文则使用PHP自带的ZipArchive进行文档压缩。 <?php class download{
protected $_filename ;
protected $_filepath ;
protected $_filesize ; //文件大小
public function __construct( $filename ){
$this ->_filename= $filename ;
$this ->_filepath=dirname( __FILE__ ). '/' . $filename ;
}
public function __destruct() {
if ( file_exists ( $this ->_filepath)){
unlink( $this ->_filepath);
}
}
//获取文件名
public function getfilename(){
return $this ->_filename;
}
//获取文件路径(包含文件名)
public function getfilepath(){
return $this ->_filepath;
}
//获取文件大小
public function getfilesize(){
return $this ->_filesize=number_format( filesize ( $this ->_filepath)/(1024*1024),2); //去小数点后两位
}
//下载文件的功能
public function getfiles(){
//检查文件是否存在
if ( file_exists ( $this ->_filepath)){
//打开文件
$file = fopen ( $this ->_filepath, "r" );
//返回的文件类型
Header( "Content-type: application/octet-stream" );
//按照字节大小返回
Header( "Accept-Ranges: bytes" );
//返回文件的大小
Header( "Accept-Length: " . filesize ( $this ->_filepath));
//这里对客户端的弹出对话框,对应的文件名
Header( "Content-Disposition: attachment; filename=" . $this ->_filename);
//修改之前,一次性将数据传输给客户端
echo fread ( $file , filesize ( $this ->_filepath));
//修改之后,一次只传输1024个字节的数据给客户端
//向客户端回送数据
$buffer =1024; //
//判断文件是否读完
while (! feof ( $file )) {
//将文件读入内存
$file_data = fread ( $file , $buffer );
//每次向客户端回送1024个字节的数据
echo $file_data ;
}
fclose( $file );
} else {
echo "<script>alert('对不起,您要下载的文件不存在');</script>" ;
}
}
} ZipArchive有两个添加文件的方法addFile 和addFromString,addFile可将现有文件添加进去,而addFromStrin则可以添加一些动态的文本 。在要下载文件中则简单调用,代码如下 <?php include 'download.class.php' ;
$res = '' ; //动态结果
$zip = new ZipArchive();
$zipname = date ( 'YmdHis' ,time()). '.zip' ; //随机文件名
if (! file_exists ( $zipname )){
$zip ->open( $zipname ,ZipArchive::OVERWRITE); //创建一个空的zip文件
//$zip->addFile('/images/show.pic','show.pic');//将/images/show.pic文件添加进去
//$content=file_get_contents('http://127.0.0.1/data.php?r='$res);
//if ( $content !== false ) {
//$zip->addFromString('data.xml',$content);//使用字符串的方式动态添加
//}
$zip ->addFromString( 'test.txt' , 'some text ...' );
$zip ->close();
$dw = new download( $zipname ); //下载文件
$dw ->getfiles();
unlink( $zipname ); //下载完成后要主动删除
} |
2022-08-15
2022-08-30
2022-08-17
2022-11-06
2022-08-18
请发表评论