PHP中ZipArchive压缩文件并下载打包好的文件介绍

 更新时间:2016年11月25日 16:23  点击:2166
文章简单的介绍了关于PHP中ZipArchive压缩文件并下载打包好的文件介绍 ,有需要了解php中文件打包的朋友可参考五下。

分析下技术要点:

将文件打包成zip格式
下载文件的功能
要点解析:

这里我采用的是php自带的ZipArchive类
    a) 我们只需要new一个ZipArchive对象,然后使用open方法创建一个zip文件,接着使用addFile方法,将要打包的文件写入刚刚创建的zip文件中,最好还得记得关闭该对象。

    b) 注意点:使用open方法的时候,第二个参数$flags是可选的,$flags用来指定对打开的zip文件的处理方式,共有四种情况

                    i.     ZIPARCHIVE::OVERWRITE 总是创建一个新的文件,如果指定的zip文件存在,则会覆盖掉

                      ii.    ZIPARCHIVE::CREATE     如果指定的zip文件不存在,则新建一个

              iii.  ZIPARCHIVE::EXCL      如果指定的zip文件存在,则会报错   

               iv.  ZIPARCHIVE::CHECKCONS

 


--------------------------------------------------------------------------------

 下载文件的流程:

服务器端的工作:
-------------------------------------------
客户端的浏览器发送一个请求到处理下载的php文件。
注意:任何一个操作都首先需要写入到内存当中,不管是视频、音频还是文本文件,都需要先写入到内存当中。
换句话说,将“服务器”上的文件读入到“服务器”的内存当中的这个操作时必不可少的(注意:这里我将服务器三个字加上双引号,主要是说明这一系类的操作时在服务器上完成的)。<br>
既然要将文件写入到内存当中,就必然要先将文件打开
所以这里就需要三个文件操作的函数了:
一:fopen($filename ,$mode)
二:fread ( int $handle , int $length )
三:fclose ( resource $handle )

---------------------------------------
客户端端的工作:
---------------------------------------
那么,如何将已经存在于服务器端内存当中的文件信息流,传给客户端呢?
答案是通过header()函数,客户端就知道该如何处理文件,是保存还是打开等等

最终的效果如下图所示:

 代码如下 复制代码

<?php
 require'./download.php';
 /**
  * 遍历目录,打包成zip格式
  */
     class traverseDir{
         public $currentdir;//当前目录
         public $filename;//文件名
         public $fileinfo;//用于保存当前目录下的所有文件名和目录名以及文件大小
         public function __construct(){
             $this->currentdir=getcwd();//返回当前目录
         }       
         //遍历目录
         public function scandir($filepath){
             if (is_dir($filepath)){
                     $arr=scandir($filepath);
                     foreach ($arr as $k=>$v){
                         $this->fileinfo[$v][]=$this->getfilesize($v);
                     }
                 }else {
                     echo "<script>alert('当前目录不是有效目录');</script>";
                 }
         }
         /**
          * 返回文件的大小
          *
          * @param string $filename 文件名
          * @return 文件大小(KB)
          */
         public function getfilesize($fname){
             return filesize($fname)/1024;
         }
        
         /**
          * 压缩文件(zip格式)
          */
         public function tozip($items){
             $zip=new ZipArchive();
             $zipname=date('YmdHis',time());
             if (!file_exists($zipname)){
                 $zip->open($zipname.'.zip',ZipArchive::OVERWRITE);//创建一个空的zip文件
                 for ($i=0;$i<count($items);$i++){
                     $zip->addFile($this->currentdir.'/'.$items[$i],$items[$i]);
                 }
                 $zip->close();
                 $dw=new download($zipname.'.zip'); //下载文件
                 $dw->getfiles();
                 unlink($zipname.'.zip'); //下载完成后要进行删除   
             }
         }
     }
 ?>

 代码如下 复制代码

<?php
 /**
  * 下载文件
  *
  */
     class download{
         protected $_filename;
         protected $_filepath;
         protected $_filesize;//文件大小
         public function __construct($filename){
             $this->_filename=$filename;
             $this->_filepath=dirname(__FILE__).'/'.$filename;
         }
         //获取文件名
         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>";
             }
         }
     }
 ?>

页面中的显示代码如下

 代码如下 复制代码

<script type="text/javascript" src="jquery-1.7.2.js"></script>
 <script type="text/javascript" src="ajax.js"></script>
 <?php
     header("Content-type:text/html;charset=utf8");
     require('./getfile.php');
     $scandir=new traverseDir();
     $scandir->scandir($scandir->currentdir);
     $scandir->currentdir;
    
     if (isset($_POST['down_load'])){
         $items=$_POST['items'];
         $scandir->tozip($items);//将文件压缩成zip格式
     }
     echo "当前的工作目录:".$scandir->currentdir;
     echo "<br>当前目录下的所有文件";
 ?>
 
 <form action="list.php" method="POST">
 <table>
     <tr>
         <td></td>
         <td>名称</td>
         <td>大小(KB)</td>
     </tr>
 <?php
     $res=$scandir->fileinfo;
     foreach ($res as $k=>$v){
         if (!($k=='.' || $k=='..'))    {//过滤掉.和..
 ?>
     <tr>
         <td><input type="checkbox" name="items[]" class="filename" value="<?php echo $k;?>"></td>
         <td><?php echo $k; ?></td>
         <td><?php echo number_format($v[0],0); ?></td>
     </tr>
 <?php
         }
     }
 ?>
     <tr>
         <td><input type="checkbox" id="selall"><label for="selall">全选</label></td>
         <td><input type="submit" name="down_load" value="打包并下载" id="tozip_tetttt"></td>
     </tr>
 </table>
 </form>

总结:


--------------------------------------------------------------------------------

使用PHP下载文件的操作需要给出四个header(),可以参考我的另一篇博文:PHP如何实现下载功能超详细流程分析
计算文件的大小的时候,并不需要先打开文件,通过filesize($filename)就可以看出,如果需要先打开文件的话,filesize可能就会是这样的形式了filesize($filehandle)
向客户端回送数据的是,记得要设置一个buffer,用来指定每次向客户端输出多少数据,如:$buffer=1023。如果不指定的话,就会将整个文件全部写入内存当中,再一次性的讲数据传送给客户端
通过feof()函数,可以判断要读取的文件是否读完,如果还没读完,继续读取文件($file_data=fread()),并将数据回送给客户端(echo $file_data)
每次下载完成后,在客户端都会刷新下,说明了,其实每次都将数据写入到一个临时文件中,等全部下载完成后,再将所有的数据重新整合在一起
这里我使用的是绝对路径,绝对路径有个好处,就是适应性比较强,而且相对于相对路径,效率更高(免去了查找文件的过程)

文章从最简单的cookie操作(增加,删除,修改)到我们的cookie队列操作类的操作,有需要了解的同学可以参考本实例。

1、设置Cookie

1. PHP 的COOKIE

    cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。
    PHP 在http 协议的头信息里发送cookie,因此  setcookie()     函数必须在其它信息被输出到浏览器
前调用,这和对  header()    函数的限制类似。

1.1 设置cookie:

   可以用 setcookie()或 setrawcookie()函数来设置 cookie。也可以通过向客户端直接发送http  头来
设置。
    1.1.1  使用 setcookie()函数设置cookie:
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure [, bool
httponly]]]]]] )
   name: cookie 变量名
   value: cookie 变量的值
   expire: 有效期结束的时间
   path: 有效目录
   domain: 有效域名,顶级域唯一
   secure: 如果值为 1,则cookie 只能在https 连接上有效,如果为默认值 0,则http 和 https 都可
以。

来看几个例子:

简单的:

SetCookie("MyCookie", "Value of MyCookie");

 

带失效时间的:

 代码如下 复制代码

SetCookie("WithExpire", "Expire in 1 hour", time()+3600);//3600秒=1小时

什么都有的:

 代码如下 复制代码

SetCookie("FullCookie", "Full cookie value", time()+3600, "/forum", ".phpuser.com", 1);

我们需要用到队列。

 代码如下 复制代码

class QueueSvc
{/*{{{*/
    private $length; // 队列的长度
    private $server_arr;
   
    public function __construct($length,$server_arr)
    {
        $this->length = $length;
        $this->server_arr = $server_arr;
    }
   
    public function getServerArr()
    {
        return $this->server_arr;
    }
   
    public function set($server_name)
    {
        self::push($server_name);
    }
   
    private function push($server_name)
    {
        //有重复的记录,把重复的删掉
        if(self::isServerExist($server_name)){
            self::removeRepeat($server_name);
        }else{
            if(self::isFull()){
                //如果已经满了,要把队列最后一个记录删掉
                array_pop($this->server_arr);
            }
        }
        //如果队列为空,先置为空数组
        if(empty($this->server_arr))
            $this->server_arr = array();
        //向队列头添加数据
        array_unshift($this->server_arr,$server_name); 
    }
   
    private function isFull()
    {
        if(is_array($this->server_arr) && (count($this->server_arr) >= $this->length))
            return true;
        return false;
    }
   
    private function isServerExist($server_name)
    {
        if(is_array($this->server_arr) && in_array($server_name,$this->server_arr))
            return true;
        return false;
    }
   
    private function removeRepeat($server_name)
    {
        if(is_array($this->server_arr) && in_array($server_name,$this->server_arr))
        {
            foreach($this->server_arr as $key=>$value)
            {
                if($server_name == $value)
                {
                    $this->array_remove($this->server_arr,$key);
                }
            }  
        }
    }
   
    private function array_remove(&$arr, $offset) {    
        array_splice ( $arr, $offset, 1 );
    }
}/*}}}*/require_once('queue_svc.php');
class CookieSvc
{/*{{{*/
    const   COOKIE_KEY = "GAME_SERVER";
   
    const   SEPARATE   = "|";

    const   COOKIE_LENGTH = "2";
   
    public function getCookieArr()
    {/*{{{*/
        $server_str =  $_COOKIE[self::COOKIE_KEY];
        $server_str =  $_COOKIE['GAME_SERVER'];
        if($server_str == ''){
            $result =  array();
        }else{
            $result = explode(self::SEPARATE,$server_str);
        }
        return $result;
    }/*}}}*/
   
    public function set($cookie_id)
    {/*{{{*/
        $server_arr = self::getCookieArr();
        if($cookie_id != false)
        {
            $que = new QueueSvc(self::COOKIE_LENGTH,$server_arr);
            $que->set($cookie_id);
            $server_new = $que->getServerArr();
            if(is_array($server_new))
            {
                $cookie_str = implode(self::SEPARATE,$server_new);
                setcookie(self::COOKIE_KEY,$cookie_str,time()+3600,'/');
            }
        }
    }/*}}}*/
}/*}}}*/

不多解释了,这个别人用的不多,昨天因为需要写的,留一下吧,也许以后还用得到。。
调用的代码很简单:

 代码如下 复制代码

require_once("queue_svc.php");

require_once("cookie_svc.php");

$cookie_id = '4';

CookieSvc::set($cookie_id);

这样就可以了。呼。。大家可以每次把$cookie_id换做不同的值,来检验此操作。
检验的代码可以用如下代码:

 代码如下 复制代码
var_dump($_COOKIE);

常见问题解决:

    1) 用 setcookie()时有错误提示,可能是因为调用setcookie()前面有输出或空格。也可能你的文
       档是从其他字符集转换过来,文档后面可能带有 BOM 签名(就是在文件内容添加一些隐藏
       的BOM 字符)。解决的办法就是使你的文档不出现这种情况。还有通过使用ob_start()函数
       也能处理一点。
    2) $_COOKIE 受magic_quotes_gpc 影响,可能自动转义。
    3) 使用的时候,有必要测试用户是否支持cookie

本文章来介绍一下如何在windows中与php实现任何计划这个东西,有需要的同学可以参考一下下哈。

一、让PHP定时运行吧!
1、 编辑如下代码,并保存为test.php:

 代码如下 复制代码
<?php
$fp = @fopen("test.txt", "a+");
fwrite($fp, date("Y-m-d H:i:s") . " 让PHP定时运行吧!n");
fclose($fp);
?>

打开文本输入:D:php4php.exe -q D:php4test.php
保存为.bat格式。
D:php4php.exe 是php安装路径,D:php4test.php是要定时运行的程序的路径。

2、添加一个任务计划,选择那个.bat文件

3、时间设置为每隔1分钟运行一次,然后运行这个任务。

4、现在我们来看看d:php4test.txt文件的内容时候是否成功。如果内容为如下所示,那么恭喜你成功了。

2003-03-03 11:08:01 让PHP定时运行吧!
2003-03-03 11:09:02 让PHP定时运行吧!
2003-03-03 11:10:01 让PHP定时运行吧!
2003-03-03 11:11:02 让PHP定时运行吧!

二、让MYSQL实现自动备份变成可能!
1、编辑如下代码,并保存为backup.php,如果要压缩可以拷贝一个rar.exe:

 代码如下 复制代码

<?php
if ($argc != 2 || in_array($argv[1], array('--help', '-?'))) {
?>
backup   Ver 0.01, for Win95/Win98/WinNT/Win2000/WinXP on i32
Copyright (C) 2000 ptker All rights reserved. This is free software,and you are welcome to modify and redistribute it
under the GPL license

PHP Shell script for the backup MySQL database.

Usage: <?php echo $argv[0]; ?> <option>

   <option> can be database name you would like to backup.
   With the --help, or -? options, you can get this help and exit.
<?php
} else {
$dbname = $argv[1];
$dump_tool = "c:\mysql\bin\mysqldump";
$rar_tool = "d:\php4\rar";
@exec("$dump_tool --opt -u user -ppassword $dbname > ./$dbname.sql");
@exec("$rar_tool a -ag_yyyy_mm_dd_hh_mm $dbname.rar $dbname.sql");
@unlink("$dbname.sql");
echo "Backup complete!";
}
?>

2、添加一个任务计划,在(如图2所示)这一步输入命令:
D:php4php.exe -q D:php4backup.php databasename
3、时间设置为每天运行一次,然后运行这个任务。
4、最后会在d:php4目录下生成一个以数据库名和当前时间组成的rar文件。
5、恭喜你!大功告成了!
当然备份方式有很多种,读者可按照自己喜欢的去做!

 

以上是原著.结合本人实贱,补充说明如下:

1. 如果出现错误:
           在试着设置任务帐户信息时出现错误
   指定的错误是:
   0x80070005:拒绝访问
   您没有运行所请求的操作的权限

在上面'"4.接下来系统将会要求用户设置适当的用户名及密码(如图5所示),以便系统今后能自动加以运行".这里最好用"system"用户,密码可为空.

这个system的权限非常之高,比你的administrator还要高,所以你在运行命令的时候千万不要乱来,这个可是什么提示都没有就会无条件执行的,这个权限下你kill核心进程都行

文章介绍了两种方法来实现把mysql数据库中的数据导出成excel文档,各有所长大家可参考一下。

我们用最简单的方法直接用php+mysql来实现了,方法如下。

 代码如下 复制代码
<?php
include('db/db.php');  //包含连库类
$db = new db();
$result = mysql_query('select * from market_sig into outfile "d:product3.xls";');
var_dump($result);
?>

上面是我们的原生php结合了mysql outfile文件导出方法,这种方法有个问题就是不能实现下载功能,只在生成在服务器上。

下面方法更全面

下载PHPExcel:http://phpexcel.codeplex.com

先来看看代码,

 代码如下 复制代码

<?php

class Table_export extends CI_Controller {

function __construct()
{
parent::__construct();

// Here you should add some sort of user validation
// to prevent strangers from pulling your table data
}

function index($table_name)
{
$this->load->database();
$query = $this->db->query("select * from `$table_name` WHERE del= 1");
// $query = mb_convert_encoding("gb2312", "UTF-8", $query);
if(!$query)
return false;

// Starting the PHPExcel library
$this->load->library('PHPExcel');
$this->load->library('PHPExcel/IOFactory');

$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()->setTitle("export")->setDescription("none");

$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', iconv('gbk', 'utf-8', '中文Hello'))
->setCellValue('B2', 'world!')
->setCellValue('C1', 'Hello');
// Field names in the first row
$fields = $query->list_fields();
$col = 0;
foreach ($fields as $field)
{
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, 1, $field);
$col++;
}

// Fetching the table data
$row = 2;
foreach($query->result() as $data)
{
$col = 0;
foreach ($fields as $field)
{
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $data->$field);
$col++;
}

$row++;
}

$objPHPExcel->setActiveSheetIndex(0);

$objWriter = IOFactory::createWriter($objPHPExcel, 'Excel5');

//发送标题强制用户下载文件
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="Products_'.date('dMy').'.xls"');
header('Cache-Control: max-age=0');

$objWriter->save('php://output');
}

}
?>


看看配置方法吧

1) 解压压缩包里的Classes文件夹中的内容到applicationlibraries目录下,目录结构如下:

-- applicationlibrariesPHPExcel.php

-- applicationlibrariesPHPExcel (文件夹)

2)修改applicationlibrariesPHPExcelIOFactory.php 文件

-- 将其类名从PHPExcel_IOFactory改为IOFactory,遵从CI类命名规则。

-- 将其构造函数改为public


还有很多方法像这种方法多喜欢用,因为phpexcel这个插件很实用,对excel表格操作方便。

文章介绍了三种在php中使用种可以用来生成html文件的方法,前面是利用了php的ob_start,后面使用了smarty模板的朋友来生成方法。

我经常会在网上看到有人问怎么将整个动态的网站静态化,其实实现的方法很简单。

 代码如下 复制代码
<?php
//在你的开始处加入 ob_start();
ob_start();
//以下是你的代码
//在结尾加入 ob_end_clean(),并把本页输出到一个变量中
$temp = ob_get_contents();
ob_end_clean();
//写入文件
$fp = fopen(‘文件名’,’w’);
fwrite($fp,$temp) or die(‘写文件错误’);
?>

 
这只是最基本的方法,还不是很实用,因为网站是要更新的,要定期重新生成HTML
下面是我用的方法:
 

 代码如下 复制代码
if(file_exists(“xxx.html”))
{
    $time = time();
        
         //文件修改时间和现在时间相差半小时一下的话,直接导向html文件,否则重新生成html
    if($time - filemtime(“xxx.html”) < 30*60)
    {
        header(“Location:xxx.html”);
    }
}
//在你的开始处加入 ob_start();
ob_start();
//页面的详细内容
//在结尾加入 ob_end_clean(),并把本页输出到一个变量中
$temp = ob_get_contents();
ob_end_clean();
//写入文件
$fp = fopen(‘xxx.html’,’w’);
fwrite($fp,$temp) or die(‘写文件错误’);
//重新导向
header(“Location:xxx.html”);

上面用的缓存文件在大量生成时会出现负载过重,下面我们介绍一种更为高效的方法


以下是输入内容的提交页面:
文件名:aa.html

 代码如下 复制代码

<html>
<head>
<title>提交页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>

<form method="post" action="bb.php">
标题:<input type="text" name="htmltitle"><br>
内容:<textarea rows="8" cols="45" name="htmlbody"></textarea><br>
<input type="submit" name="submit" value="添加新闻">
</form>
</body>
</html>

 

以下是代码片段:
文件名:bb.php

 代码如下 复制代码

<?php
//定义日期函数
function getdatetime()
{
 $datetime=getdate();
 $strReturn=$datetime["year"]."-";
 $strReturn=$strReturn.$datetime["mon"]."-";
 $strReturn=$strReturn.$datetime["mday"];
 return $strReturn;
}

//定义时间函数(文件名)
function gettime()
{
 $times=getdate();
 $strtime=$times["year"];
 $strtime=$strtime.$times["mon"];
 $strtime=$strtime.$times["mday"];
 $strtime=$strtime.$times["minutes"];
 $strtime=$strtime.$times["seconds"];
 return $strtime;
}
?>
<?php


//判断提交值是否为空
$submit=$_POST["submit"];
//定义文件头部信息
$htmltitle=$_POST["htmltitle"];
//定义文件内容
$htmlbody=$_POST["htmlbody"];
if ($submit) {
//定义html文件标签
$html1=$html1."<html>";
$html1=$html1."<head>";
$html1=$html1."<title>";
$html1=$html1.$htmltitle;
$html1=$html1."</title>";
$html1=$html1."<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>";
$html1=$html1."</head>";
$html1=$html1."<body>";
$html1=$html1."<table border='1' width='740' cellpadding='2' cellspacing='0' bordercolordark='#f7f7f7' bordercolorlight='#cccccc'><tr><td align='center' bgcolor='#f7f7f7' height='30'><font size='3'><b>";
$html1=$html1.$htmltitle;
$html1=$html1."</b></font></td></tr>";
$html1=$html1."<tr><td><font size='2'>";
$html1=$html1.$htmlbody;
$html1=$html1."</font></td></tr></table>";
$html1=$html1."</body>";
$html1=$html1."</html>";

//判断今天的文件夹是否存在
if (!is_dir(getdatetime())) {
 //如果不存在就建立
 mkdir(getdatetime(),0777);
}

//写成html文件
$filedir=getdatetime();
$filename=gettime();
$filename=$filename.".html";
$fp=fopen("$filedir/$filename","w");
fwrite($fp,$html1);
fclose($fp);
echo "<script>alert('文件写入成功');location.href='111.php';</script>";
}
?>


如果提示文件写入成功,那你就成功了,然后回到你的相应目录里看看有没有生成静态的html文件!
 

smarty模板生成方法

 

 代码如下 复制代码

<?php
require_once("./config/config.php");
ob_start();
$id=$_GET[id];
$sql="select * from table_name where id='$id'";
$result=mysql_query($sql);
$rs=mysql_fetch_object($result);
$smarty->assign("showtitle",$rs->title);
$smarty->assign("showcontent",$rs->content);
$smarty->display("content.html");
$this_my_f= ob_get_contents();
ob_end_clean();
$filename = "$id.html";
tohtmlfile_cjjer($filename,$this_my_f);
// 文件生成函数
function tohtmlfile_cjjer($file_cjjer_name,$file_cjjer_content){
if (is_file ($file_cjjer_name)){
@unlink ($file_cjjer_name); //存在,就删除
}
$cjjer_handle = fopen ($file_cjjer_name,"w"); //创建文件
if (!is_writable ($file_cjjer_name)){ //判断写权限
return false;
}
if (!fwrite ($cjjer_handle,$file_cjjer_content)){
return false;
}
fclose ($cjjer_handle); //关闭指针
return $file_cjjer_name; //返回文件名
}
?>

 

smarty中有一个获取模板页内容方法fetch(), 它的声明原形是这样的:

 代码如下 复制代码

<?php
 
function fetch($resource_name, $cache_id = null,
  $compile_id = null, $display = false)
 
?>

第一个参数为模板名称, 第二个参数为缓存的id, 第三个参数为编译id, 第四个参数为是否显示模板内容. 生成静态页我们就需要用到这个方法.

 代码如下 复制代码
<?php
   $smarty = new Smarty();
  //其它模板替换语法...
 
   //下面这句取得页面中所有内容, 注意最后一个参数为false
  $content = $smarty->fetch('模板名称.tpl', null, null, false);
 
  //下面将内容写入至一个静态文件
  $fp = fopen('news.html', 'w');
  fwrite($fp, $content);
  fclose($fp);
 
  //OK, 到这里这个news.html静态页就生成了, 你可以处理你下一步的工作了
?>

好了结合上面的方法我们生成文件几乎原理都一样,先把数据读取出来然后给我们定义好的模板,最后利用fopen函数生成一个.html的文件。

[!--infotagslink--]

相关文章

  • Go语言压缩和解压缩tar.gz文件的方法

    这篇文章主要介绍了Go语言压缩和解压缩tar.gz文件的方法,实例分析了使用Go语言压缩文件与解压文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-05-03
  • php实现网站文件批量压缩下载功能

    利用php实现将文件批量压缩打包下载,这个过程中将使用到 ZipArchive 这个类,注意使用该类之前,linux需开启zlib,windows需取消php_zip.dll前的注释。下面直接给出一个简单的将文件压缩为 zip 格式的示例。具体用法请查询p...2015-10-30
  • 微信小程序对图片进行canvas压缩的方法示例详解

    这篇文章主要给大家介绍了关于微信小程序对图片进行canvas压缩的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-12
  • C#自定义字符串压缩和解压缩的方法

    这篇文章主要介绍了C#自定义字符串压缩和解压缩的方法,通过自定义C#字符串操作类实现对字符串的压缩与解压的功能,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C# 利用ICSharpCode.SharpZipLib实现在线压缩和解压缩

    本文主要主要介绍了利用ICSharpCode.SharpZipLib第三方的DLL库实现在线压缩和解压缩的功能,并做了相关的代码演示。...2020-06-25
  • Linux下常用压缩格式的压缩与解压方法详解

    这篇文章主要介绍了Linux下常用压缩格式的压缩与解压方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • php使用ZipArchive函数实现文件的压缩与解压缩

    PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法这里就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流。这里整理一下利用php zipA...2015-10-30
  • vue在图片上传的时候压缩图片

    这篇文章主要介绍了vue在图片上传的时候压缩图片,帮助大家缓解服务器压力,提高程序性能,感兴趣的朋友可以了解下...2020-11-18
  • php压缩和解压缩字符串的方法

    本文实例讲述了php压缩和解压缩字符串的方法。...2015-03-15
  • 详解C#压缩、解压文件夹/文件(带密码)

    这篇文章主要给大家介绍了关于C#压缩、解压文件夹/文件(带密码)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-04
  • PHP执行Linux命令实现文件压缩

    在php中可以直接调用linux中的文件压缩命令来实现文件快速压缩与解压缩,有需要的朋友可参考参考。 用PHP调用Linux的命令行 ,执行压缩命令,OK,马上行动! /*拆分成3个...2016-11-25
  • 利用R语言解压与压缩.tar.gz.zip等格式文件

    这篇文章主要为大家介绍了利用R语言怎样解压与压缩.tar.gz.zip等各种压缩格式文件实现过程方法,有需要的朋友可以借鉴参考下希望能够有所帮助...2021-11-25
  • Vue项目打包、合并及压缩优化网页响应速度

    网站页面的响应速度与用户体验息息相关,直接影响到用户是否愿意继续访问你的网站,所以这篇文章主要给大家介绍了关于Vue项目打包、合并及压缩优化网页响应速度的相关资料,需要的朋友可以参考下...2021-07-07
  • 实例解说PHP动态内容的缓冲和压缩

    PHP4 采用了缓冲机制,在你决定发送以前,所有内容只是存在于缓冲中 ,而不是直接发送给浏览器 ,虽然你可以用 header 和 setcookie 函数来实现, 但是这两个函数相比于功能强...2016-11-25
  • JS实现异步上传压缩图片

    这篇文章主要为大家详细介绍了JS实现异步上传压缩图片,并立即显示图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-04-27
  • c# 文件压缩zip或将zip文件解压的方法

    下面小编就为大家分享一篇c# 文件压缩zip或将zip文件解压的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • c#调用winrar解压缩文件代码分享

    这篇文章主要介绍了c#调用winrar解压缩文件的方法,大家参考使用吧...2020-06-25
  • PHP压缩javascritp 与CSS的例子

    有的网站有很多的 CSS 文件,如果将它们合并到一起并且进行 Gzip 压缩会减少请求和文件大小,有利于提高网站加载速度。为了方便我不推荐人工压缩和合并 CSS,而是使用 PHP...2016-11-25
  • php在线文件与文件夹压缩实例代码

    注明这款php教程文件压缩代码他要借助于zip.exe文件哦,所以我们要把zip.exe压缩文件给拿出来哦。 <?php if ( !IsSet($_GET['dirname']) ) { show_input_form() ;...2016-11-25
  • php实现文件压缩

    <?php /* -------------------------- Copyright by T.muqiao(39号天堂桥) 本程序仅供学习讨论使用,在未通知作者作为任何商业用途 视为中华人民共和国不道德公民 联系方式:442536...2016-11-25