当前位置:  编程技术>php
本页文章导读:
    ▪php完整备份数据库与备份数据库中指定表的类      一个php类,用于实现mysql数据库的完整备份,也可以备份数据库中指定的表。 代码:   代码示例: <?php /** * mysql数据库完整备份、备份数据库中指定表 * edit: www. */    class Backup     .........
    ▪php静态变量的简单示例      php静态变量的小例子。   代码示例: <?php function test(){ static $a=0; // but if  $a=0; echo $a++.'<br>'; } test(); test(); test(); ?> 您可能感兴趣的文章: php static静态变量修饰符的用法详解 PH.........
    ▪PHP移动文件或文件夹的方法浅析      在php中,大家可能习惯用copy,unlink来实现文件的移动,对于大文件,可能会消耗很长时间。 这里介绍一个更方便的方法,使用php的rename实现文件的快速移动。 rename实现文件[夹]快速移动 分三.........

[1]php完整备份数据库与备份数据库中指定表的类
    来源: 互联网  发布时间: 2013-12-24

一个php类,用于实现mysql数据库的完整备份,也可以备份数据库中指定的表。

代码:
 

代码示例:

<?php
/**
* mysql数据库完整备份、备份数据库中指定表
* edit: www.
*/
   class Backup
       {
 /**
  * @var stores the options
  */
 var $config;

 /**
  * @var stores the final sql dump
  */
 var $dump;

 /**
  * @var stores the table structure + inserts for every table
  */
 var $struktur = array();

 /**
  * @var zip file name
  */
 var $datei;

 /**
  * this function is the constructor and phrase the options
  * and connect to the database
  * @return
  */
 public function Backup($options)
 {
         // write options
         foreach($options AS $name => $value)
         {
   $this->config[$name] = $value;
         }

         // check mysql connection
         mysql_connect()($this->config['mysql'][0], $this->config['mysql'][1], $this->config['mysql'][2]) or die(mysql_error());
         mysql_select_db($this->config['mysql'][3]) or die(mysql_error());
 }

 /**
  * this function start the backup progress its the core function
  * @return
  */
 public function backupDB()
 {
         // start backup
         if(isset()($_POST['backup']))
         {
   // check if tables are selected
   if(empty($_POST['table']))
   {
           die("Please select a table.");
   }

   /** start backup **/
   $tables = array();
   $insert = array();
   $sql_statement = '';

   // lock tables
   foreach($_POST['table'] AS $table)
   {
            mysql_query()("LOCK TABLE $table WRITE");

           // Read table structure
           $res = mysql_query('SHOW CREATE TABLE '.$table.'');
           $createtable = mysql_result($res, 0, 1);
           $str = "\n\n".$createtable."\n\n";

           array_push($tables, $str);

           // Read table "inserts"
             $sql = 'SELECT * FROM '.$table;
             $query = mysql_query($sql) or die(mysql_error());
             $feld_anzahl = mysql_num_fields($query);

           $sql_statement = '---- Data Table `$table`--';

           // start reading progress
             while($ds = mysql_fetch_object($query)){
   $sql_statement .= 'INSERT INTO `'.$table.'` (';

   for ($i = 0;$i <$feld_anzahl;$i++){
       if ($i ==$feld_anzahl-1){
           $sql_statement .= mysql_field_name($query,$i);
       } else {
           $sql_statement .= mysql_field_name($query,$i).', ';
       }
   }

   $sql_statement .= ') VALUES (';

   for ($i = 0;$i <$feld_anzahl;$i++){
       $name = mysql_field_name($query,$i);
       if (empty($ds->$name)){
           $ds->$name = 'NULL';
       }
       if ($i ==$feld_anzahl-1){
           $sql_statement .= '"'.$ds->$name.'"';
       } else {
           $sql_statement .= '"'.$ds->$name.'", ';
       }
   }
   $sql_statement .= ");\n";
             }

           // insert "Inserts" into an array if not exists
           if(!in_array($sql_statement, $insert))
           {
     array_push($insert, $sql_statement);
     unset($sql_statement);
           }

           unset($sql_statement);

   }

   // put table structure and inserts together in one var
   $this->struktur = array_combine($tables, $insert);

   // create full dump
   $this->createDUMP($this->struktur);

   // create zip file
   $this->createZIP();

   /** end backup **/

   // send an email with the sql dump
   if(isset($this->config['email']) && !empty($this->config['email']))
   {
           $this->sendEmail();
   }

   // output
   echo '<h3 >Backup war erfolgreich</h3><a href="'.$this->datei.'">Download Backup</a>
   <br />
   <br />';
         }
 }

 /**
  * this function generate an email with attachment
  * @return
  */
 protected function sendEmail()
 {
   // start sending emails
   foreach($this->config['email'] AS $email)
   {
           $to = $email;

           $from = $this->config['email'][0];

           $message_body = "This email contains the database backup as a zip file.";

           $msep = strtoupper() (md5 (uniqid (time ())));

           // set email header (only text)
           $header =
       "From: $from\r\n" .
       "MIME-Version: 1.0\r\n" .
       "Content-Type: multipart/mixed; boundary="$msep"\r\n\r\n" .
       "--$msep\r\n" .
       "Content-Type: text/plain\r\n" .
       "Content-Transfer-Encoding: 8bit\r\n\r\n" .
       $message_body . "\r\n";

           // file name
           $dateiname = $this->datei;

           // get filesize of zip file
           $dateigroesse = filesize ($dateiname);

           // open file to read
           $f = fopen ($dateiname, "r");
           // save content
           $attached_file = fread ($f, $dateigroesse);
           // close file
           fclose ($f);

           // create attachment
           $attachment = chunk_split() (base64_encode ($attached_file));

           // set attachment header
           $header .=
        "--" . $msep . "\r\n" .
        "Content-Type: application/zip; name='Backup'\r\n" .
        "Content-Transfer-Encoding: base64\r\n" .
        "Content-Disposition: attachment; filename='Backup.zip'\r\n" .
        "Content-Description: Mysql Datenbank Backup im Anhang\r\n\r\n" .
        $attachment . "\r\n";

           // mark end of attachment
           $header .= "--$msep--";

           // eMail Subject
           $subject = "Database Backup";

           // send email to emails^^
           if(mail($to, $subject, '', $header) == FALSE)
           {
     die("The email could not be sent. Please check the email address.");
           }

           echo "<p><small>Email was successfully sent.</small></p>";
   }
 }

 /**
  * this function create the zip file with the database dump and save it on the ftp server
  * @return
  */
 protected function createZIP()
 {

         // Set permissions to 777
         chmod($this->config['folder'], 0777);

         // create zip file
         $zip = new ZipArchive();
         // Create file name
         $this->datei = $this->config['folder'].$this->config['mysql'][3]."_".date("j_F_Y_g:i_a").".zip";

         // Checking if file could be created
         if ($zip->open($this->datei, ZIPARCHIVE::CREATE)!==TRUE) {
   exit("cannot open <".$this->datei.">\n");
         }

         // add mysql dump to zip file
         $zip->addFromString("dump.sql", $this->dump);
         // close file
         $zip->close();

         // Check whether file has been created
         if(!file_exists($this->datei))
         {
   die("The ZIP file could not be created.");
         }

         echo "<p><small>The zip was created.</small></p>";
 }

 /**
  * this function create the full sql dump
  * @param object $dump
  * @return
  */
 protected function createDUMP($dump)
 {
         $date = date("F j, Y, g:i a");

         $header = <<<HEADER
-- SQL Dump
--
-- Host: {$_SERVER['HTTP_HOST']}
-- Erstellungszeit: {$date}

--
-- Datenbank: `{$this->config['mysql'][3]}`
--
-- --------------------------------------------------------
HEADER;
  foreach($dump AS $name => $value)
  {
      $sql .= $name.$value;
  }
  $this->dump = $header.$sql;
 }

 /**
  * this function displays the output form to select tables
  * @return
  */
 public function outputForm()
 {
         // select all tables from database
         $result = mysql_list_tables($this->config['mysql'][3]);

         $buffer = '
         <fieldset>
   <legend>Select some tables</legend>
   <form method="post" action="">
         <select name="table[]" multiple="multiple" size="30">';
         while($row = mysql_fetch_row($result))
         {
   $buffer .= '<option value="'.$row[0].'">'.$row[0].'</option>';
         }
         $buffer .= '</select>
         <br /><br />
         <input type="submit" name="backup" value="Backup Tables" />
         </form>
         </fieldset>';

         echo $buffer;
 }
       }
?>

备份用法:
<?php
//添加email地址
$options = array('email' => array('email1', 'email2'),
'folder' => './backup/',
'mysql' => array('localhost', 'root', '****', 'database'));

$b = new Backup($options);
// 点击备份按钮后,开始备份。
if(isset($_POST['backup']))
{
     // start backup
     $b->backupDB();
}
// display tables
$b->outputForm();
?>

您可能感兴趣的文章:
php数据库备份类 分享一个不错的php数据库备份类
php Mysql数据库备份类及调用方法
php实现mysql的备份与还原实例代码
php实现MYSQL的备份与还原
php mysql备份的代码(xml应用)
php数据备份:单表备份 整表备份 导入数据库

    
[2]php静态变量的简单示例
    来源: 互联网  发布时间: 2013-12-24

php静态变量的小例子。
 

代码示例:

<?php
function test(){

static $a=0;
// but if  $a=0;
echo $a++.'<br>';
}

test();
test();
test();
?>

您可能感兴趣的文章:
php static静态变量修饰符的用法详解
PHP面向对象编程之静态变量
php递归调用与静态变量


    
[3]PHP移动文件或文件夹的方法浅析
    来源: 互联网  发布时间: 2013-12-24

在php中,大家可能习惯用copy,unlink来实现文件的移动,对于大文件,可能会消耗很长时间。

这里介绍一个更方便的方法,使用php的rename实现文件的快速移动。

rename实现文件[夹]快速移动

分三种情况:
1. 对于文件,rename可以在不同盘符之间移动。
2. 对于空文件夹,rename也可以在不同盘符之间移动。但是目标文件夹的父目录必须存在。
3. 对于非空文件夹,只能在同一盘符下移动。

方法1和3,已基本可以满足平时的任务需求。
 

代码示例:
<?php
rename("D:/logs/write/theme/history","F:/logs/write/theme/history");
?>
 

测试分析:
一个40M的文件,copy+unlink方式需要7.6249899864197秒;
而rename方式,则只需要0.024738788604736,快了300倍。

建议:慎用copy+unlink方式,而采用rename方式移动文件与文件夹。


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪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