当前位置:  编程技术>php
本页文章导读:
    ▪服务器端解压缩zip的脚本       代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <html xmlns="http://www.w3.org/1999/xhtml">   <head>   <meta http-equiv="Con.........
    ▪Windows2003 下 MySQL 数据库每天自动备份       终于让服务器每天早上备份一次 MySQL 数据库并自动打包,同时删除 5 天前的备份文件。分享如下:     1. 环境: windows server 2003 + Apache 2.0 + PHP5 + MySQL 4.0.26 .     2. 假设 PHP .........
    ▪剖析 PHP 中的输出缓冲       我们先来看一段代码:     〈?php     for ($i=10; $i〉0; $i--)     {      echo $i;      flush();      sleep(1);     }     ?〉     按照php手册里的说法,该函数将当前为止程序的所有.........

[1]服务器端解压缩zip的脚本
    来源: 互联网  发布时间: 2013-11-30

代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
<title>文件解压缩管理</title>  
</head>  
<body>  
<?php  
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead  
// of $_FILES.  
if (isset($_POST["Submit"])) {  
   echo "FileName:     " . $_POST['unpackfile'] . "<br />\n";  
   echo "UnpackPath:   " . $_POST['unpackpath'] . "<br />\n";  
   $zip = zip_open($_POST['unpackfile']);  
   if ($zip) {  
      while ($zip_entry = zip_read($zip)) {  
         echo "Name:               " . zip_entry_name($zip_entry) . "<br />\n";  
         echo "Actual Filesize:    " . zip_entry_filesize($zip_entry) . "<br />\n";  
         echo "Compressed Size:    " . zip_entry_compressedsize($zip_entry) . "<br />\n";  
         echo "Compression Method: " . zip_entry_compressionmethod($zip_entry) . "<br />\n";  

         if (zip_entry_open($zip, $zip_entry, "r")) {  
            $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));   // File content  
            echo "step 1 successful!<br />\n";  
            if(zip_entry_filesize($zip_entry)!=0) {  
               $fp = fopen($_POST['unpackpath']."/".zip_entry_name($zip_entry), 'wb');  
               fwrite($fp, $buf);  
               fclose($fp);  
               zip_entry_close($zip_entry);  
               echo "unpack successful!<br />\n";  
            } else {  
               mkdir($_POST['unpackpath']."/".zip_entry_name($zip_entry), 0777);  
               echo "mkdir successful!<br />\n";  
            }  
         }  
         echo "<br><br>\n\n";  
      }  
      zip_close($zip);  
   }  
?>  
</body>  
</html>  
<?php  
exit();  
}  
?>  
<form id="form1" name="form1" enctype="multipart/form-data" method="post" action="/blog_article/</$_SERVER[.html'PHP_SELF']?>">  
  待解压文件<input type="text" name="unpackfile" />  
  解压缩路径<input type="text" name="unpackpath" />  
  <input type="submit" name="Submit" value="解压" />  
</form>  
</body>  
</html> 

    
[2]Windows2003 下 MySQL 数据库每天自动备份
    来源: 互联网  发布时间: 2013-11-30
终于让服务器每天早上备份一次 MySQL 数据库并自动打包,同时删除 5 天前的备份文件。分享如下:

    1. 环境: windows server 2003 + Apache 2.0 + PHP5 + MySQL 4.0.26 .

    2. 假设 PHP 安装目录为 D:/php ,MySQL 安装目录为 D:/mysql.

    3. 在 D:/php 下建立目录 WinRAR, 把你 winrar 安装目录下的 WinRAR.exe 和 RARReg.KEY 复制到 D:/php/WinRAR .

    4. D:/php 下建立文件 mysql_backup.php:

    /*/////////////////////////
    #FileName: mysql_backup.php #Author: faisun #Website: http://www.softpure.com
    ////////////////////////*/
    //保存目录,路径要用反斜杠。您需要手动建立它。
     $store_folder = 'D:\databse_backup';
    //用户名和密码
    //该帐号须有操作[所有]的数据库及FILE的权限
    //否则有些数据库不能备份
    $db_username = “root“;
    $db_password = ““;
    $time=time();
    $nowdir = “$store_folder\\“.date(“Ymd“,$time).““;
    if(file_exists(“$nowdir.rar“))
      die(“File exists.\n“);
    @mkdir($nowdir);
    mysql_connect(“localhost“,“$db_username“,“$db_password“);
    $query=mysql_list_dbs();
    while($result=mysql_fetch_array($query))
    { system (dirname(__FILE__).'\..\mysql\bin\mysqldump --opt '.“$result[Database]-u{$db_username} “.($db_password?“-p{$db_password}“:““).“ 〉$nowdir\\$result[Database].sql“);
    echo “dumping database `$result[Database]`...\n“;
    }
    echo “\nWinrar loading...\n“;
    system( dirname(__FILE__).“\\WinRAR\\WinRAR.exe a -ep1 -r -o+ -m5 -df \“$nowdir.rar\“ “$nowdir\“ “ );
    //删除 5 天前的文件
    @unlink(“$store_folder\\“.date(“Ymd“,$time-86400*5).“.rar“);
    echo “\nOK!\n“; 〉

    5. D:/php 下建立文件 mysql_backup.bat,内容只有一句:

    php.exe mysql_backup.php

    6. 双击该 bat 文件运行,如果能备份了,OK,下一步添加任务计划.

    7. 把 D:/php/mysql_backup 添加到任务计划,时间选每天. 根据服务器的监测结果,每天早上 5-8 时为流量低峰期. 由于 5-7 时有些数据库的清理工作,可以把时间定在了早上 8 点整。

    
[3]剖析 PHP 中的输出缓冲
    来源: 互联网  发布时间: 2013-11-30
我们先来看一段代码:

    〈?php
    for ($i=10; $i〉0; $i--)
    {
     echo $i;
     flush();
     sleep(1);
    }
    ?〉

    按照php手册里的说法,该函数将当前为止程序的所有输出发送到用户的浏览器。

    上面的这段代码,应该隔一秒钟输出一次$i。但是实际中却不一定是这样。有可能是等了10秒钟后,所有的输出同时呈现出来。

    好,我们来改一下这段代码,改成

    〈?php
    ob_end_clean();//修改部分
    for ($i=10; $i〉0; $i--)
    {
     echo $i;
     flush();
     sleep(1);
    }
    ?〉
    嘿,加了这一句ob_end_clean();,居然就OK了。实际上,我们把ob_end_clean()换成ob_end_flush()也一样OK。

    我再来改一改。

    〈?php
    for ($i=10; $i〉0; $i--)
    {
     echo $i;
     ob_flush();//修改部分
     flush();
     sleep(1);
    }
    ?〉
    运行一下,是不是发现$i也隔一秒输出一次了?这是为什么呢?
    别急,我们来看看php.ini。

    打开php.ini,搜索output_buffering,我们会看到类似这样的设置 output_buffering = 4096。正如它的名字output_buffering一样,这个设置的作用就是把输出缓冲一下,缓冲大小为4096bytes.

    在我们的第一段代码里,之所以没有按预期的输出,正是因为这个output_buffering把那些输出都缓冲了。没达到4096bytes或者脚本结束,输出是不会被发送出去的。

    而第二段代码中的ob_end_clean()和ob_end_flush()的作用,就是终止缓冲。这样就不用等到有4096bytes的缓冲之后才被发送出去了。

    第三段代码中,用了一句ob_flush(),它的作用就是把缓冲的数据发送出去,但是并不会终止缓冲,所以它必须在每次flush()前使用。

    如果不想使用ob_end_clean(),ob_end_flush()和ob_flush(),我们就必须把php.ini里的output_buffering设得足够小,例如设为0。需要注意的是,如果你打算在脚本中使用ini_set(”output_buffering”,”0″)来设置,那么请停下来吧,这种方法是不行的。因为在脚本一开始的时候,缓冲设置就已经被载入,然后缓冲就开始了。

    可能你会问了,既然ob_flush()是把缓冲的数据发送出去,那么为什么还需要用flush()???直接用下面这段代码不行吗??

    〈?php
    for ($i=10; $i〉0; $i--)
    {
     echo $i;
     ob_flush();
     sleep(1);
    }
    ?〉
    请注意ob_flush()和flush()的区别。前者是把数据从PHP的缓冲中释放出来,后者是把不在缓冲中的或者说是被释放出来的数据发送到浏览器。所以当缓冲存在的时候,我们必须ob_flush()和flush()同时使用。

    那是不是flush()在这里就是不可缺少的呢?不是的,我们还有另外一种方法,使得当有数据输出的时候,马上被发送到浏览器。下面这两段代码就是不需要使用flush()了。(当你把output_buffering设为0的时候,连ob_flush()和ob_end_clean()都不需要了)

    〈?php
    ob_implicit_flush(true);
    for ($i=10; $i〉0; $i--)
    {
     echo $i;
     ob_flush();
     sleep(1);
    }
    ?〉
    〈?php
    ob_end_clean();
    ob_implicit_flush(true);
    for ($i=10; $i〉0; $i--)
    {
     echo $i;
     sleep(1);
    }
    ?〉
    请注意看上面的ob_implicit_flush(true),这个函数强制每当有输出的时候,即刻把输出发送到浏览器。这样就不需要每次输出(echo)后,都用flush()来发送到浏览器了。

    以上所诉可能在某些浏览器中不成立。因为浏览器也有自己的规则。我是用Firefox1.5,IE6,opera8.5来测试的。其中opera就不能正常输出,因为它有一个规则,就是不遇到一个HTML标签,就绝对不输出,除非到脚本结束。而FireFox和IE还算比较正常的。

    最后附上一段非常有趣的代码,作者为PuTTYshell。在一个脚本周期里,每次输出,都会把前一次的输出覆盖掉。
    以下代码只在firefox下可用,其他浏览器并不支持multipart/x-mixed-replace的Content-Type.

    〈?php
      header('Content-type: multipart/x-mixed-replace;boundary=endofsection');
      print “\n--endofsection\n“;

      $pmt = array(“-“, “\\“, “|“, “/“ );
      for( $i = 0; $i 〈10; $i ++ ){
         sleep(1);
         print “Content-type: text/plain\n\n“;
         print “Part $i\t“.$pmt[$i % 4];
         print “--endofsection\n“;
         ob_flush();
         flush();
      }
      print “Content-type: text/plain\n\n“;
      print “The end\n“;
      print “--endofsection--\n“;
    ?〉 

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
unix/linux知识 iis7站长之家
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3