php类实现MySQL数据库备份、还原

 更新时间:2016年11月25日 16:35  点击:2003
这是一个非常简单的利用php来备份mysql数据库的类文件,我们只要简单的在dbmange中配置好连接地址用户名与数据库即可,下面我们一起来看这个例子。
 代码如下 复制代码

<?php 
/**
 * 创建时间: 2012年5月21日
 *
 * 说明:分卷文件是以_v1.sql为结尾(20120522021241_all_v1.sql)
 * 功能:实现mysql数据库分卷备份,选择表进行备份,实现单个sql文件及分卷sql导入
 * 使用方法:
 *
 * ------1. 数据库备份(导出)------------------------------------------------------------
//分别是主机,用户名,密码,数据库名,数据库编码
$db = new DBManage ( 'localhost', 'root', 'root', 'test', 'utf8' );
// 参数:备份哪个表(可选),备份目录(可选,默认为backup),分卷大小(可选,默认2000,即2M)
$db->backup ();
 * ------2. 数据库恢复(导入)------------------------------------------------------------
//分别是主机,用户名,密码,数据库名,数据库编码
$db = new DBManage ( 'localhost', 'root', 'root', 'test', 'utf8' );
//参数:sql文件
$db->restore ( './backup/20120516211738_all_v1.sql');
 *----------------------------------------------------------------------
 */
class DBManage 

    var $db; // 数据库连接 
    var $database; // 所用数据库 
    var $sqldir; // 数据库备份文件夹 
    var $record; 
    // 换行符 
    private $ds = "n"; 
    // 存储SQL的变量 
    public $sqlContent = ""; 
    // 每条sql语句的结尾符 
    public $sqlEnd = ";"; 
    /**
     * 初始化
     *
     * @param string $host
     * @param string $username
     * @param string $password
     * @param string $thisatabase
     * @param string $charset
     */
    function __construct($host = 'localhost', $username = 'root', $password = '', $thisatabase = 'test', $charset = 'utf8') 
    { 
        $this->host = $host; 
        $this->username = $username; 
        $this->password = $password; 
        $this->database = $thisatabase; 
        $this->charset = $charset; 
        // 连接数据库 
        $this->db = mysql_connect ( $this->host, $this->username, $this->password ) or die ( "数据库连接失败." ); 
        // 选择使用哪个数据库 
        mysql_select_db ( $this->database, $this->db ) or die ( "无法打开数据库" ); 
        // 数据库编码方式 
        mysql_query ( 'SET NAMES ' . $this->charset, $this->db ); 
    } 
  
    /*
      * ------------------------------------------数据库备份start----------------------------------------------------------
      */
  
    /**
     * 数据库备份
     * 参数:备份哪个表(可选),备份目录(可选,默认为backup),分卷大小(可选,默认2000,即2M)
     *
     * @param $string $dir
     * @param int $size
     * @param $string $tablename
     */
    function backup($tablename = '', $dir = '', $size = 2000) 
    { 
        //$dir = $dir ? $dir : 'backup/'; 
        //$size = $size ? $size : 2000; 
        $sql = ''; 
        // 只备份某个表 
        if (! empty ( $tablename )) 
        { 
            echo '正在备份表' . $tablename . '<br />'; 
            // 插入dump信息 
            $sql = $this->_retrieve(); 
            // 插入表结构信息 
            $sql .= $this->_insert_table_structure ( $tablename ); 
            // 插入数据 
            $data = mysql_query ( "select * from " . $tablename ); 
            // 文件名前面部分 
            $filename = date ( 'YmdHis' ) . "_" . $tablename; 
            // 字段数量 
            $num_fields = mysql_num_fields ( $data ); 
            // 第几分卷 
            $p = 1; 
            // 循环每条记录 
            while ( $record = mysql_fetch_array ( $data ) ) 
            { 
                // 单条记录 
                $sql .= $this->_insert_record ( $tablename, $num_fields, $record ); 
                // 如果大于分卷大小,则写入文件 
                if (strlen ( $sql ) >= $size * 1000) 
                { 
                    $file = $filename . "_v" . $p . ".sql"; 
                    if ($this->_write_file ( $sql, $file, $dir )) 
                    { 
                        echo "表-" . $tablename . "-卷-" . $p . "-数据备份完成,生成备份文件 <span style='color:#f00;'>$dir$filename</span><br />"; 
                    } 
                    else
                    { 
                        echo "备份表-" . $tablename . "-失败<br />"; 
                    } 
                    // 下一个分卷 
                    $p ++; 
                    // 重置$sql变量为空,重新计算该变量大小 
                    $sql = ""; 
                } 
            } 
            // sql大小不够分卷大小 
            if ($sql != "") 
            { 
                $filename .= "_v" . $p . ".sql"; 
                if ($this->_write_file ( $sql, $filename, $dir )) 
                { 
                    echo "表-" . $tablename . "-卷-" . $p . "-数据备份完成,生成备份文件 <span style='color:#f00;'>$dir$filename</span><br />"; 
                } 
                else
                { 
                    echo "备份卷-" . $p . "-失败<br />"; 
                } 
            } 
        } 
        else
        { // 备份全部表 
            if ($tables = mysql_query ( "show table status from " . $this->database )) 
            { 
                echo "读取数据库结构成功!<br />"; 
            } 
            else
            { 
                exit ( "读取数据库结构成功!<br />" ); 
            } 
            // 插入dump信息 
            $sql .= $this->_retrieve(); 
            // 文件名前面部分 
            $filename = date ( 'YmdHis' ) . "_all"; 
            // 查出所有表 
            $tables = mysql_query ( 'SHOW TABLES' ); 
            // 第几分卷 
            $p = 1; 
            // 循环所有表 
            while ( $table = mysql_fetch_array ( $tables ) ) 
            { 
                // 获取表名 
                $tablename = $table [0]; 
                // 获取表结构 
                $sql .= $this->_insert_table_structure ( $tablename ); 
                $data = mysql_query ( "select * from " . $tablename ); 
                $num_fields = mysql_num_fields ( $data ); 
  
                // 循环每条记录 
                while ( $record = mysql_fetch_array ( $data ) ) 
                { 
                    // 单条记录 
                    $sql .= $this->_insert_record ( $tablename, $num_fields, $record ); 
                    // 如果大于分卷大小,则写入文件 
                    if (strlen ( $sql ) >= $size * 1000) 
                    { 
  
                        $file = $filename . "_v" . $p . ".sql"; 
                        // 写入文件 
                        if ($this->_write_file ( $sql, $file, $dir )) 
                        { 
                            echo "-卷-" . $p . "-数据备份完成,生成备份文件<span style='color:#f00;'>$dir$file</span><br />"; 
                        } 
                        else
                        { 
                            echo "备份卷-" . $p . "-失败<br />"; 
                        } 
                        // 下一个分卷 
                        $p ++; 
                        // 重置$sql变量为空,重新计算该变量大小 
                        $sql = ""; 
                    } 
                } 
            } 
            // sql大小不够分卷大小 
            if ($sql != "") 
            { 
                $filename .= "_v" . $p . ".sql"; 
                if ($this->_write_file ( $sql, $filename, $dir )) 
                { 
                    echo "-卷-" . $p . "-数据备份完成,生成备份文件 <span style='color:#f00;'>$dir$filename<br />"; 
                } 
                else
                { 
                    echo "备份卷-" . $p . "-失败<br />"; 
                } 
            } 
        } 
    } 
  
    /**
     * 插入数据库备份基础信息
     *
     * @return string
     */
    private function _retrieve() { 
        $value = ''; 
        $value .= '--' . $this->ds; 
        $value .= '-- MySQL database dump' . $this->ds; 
        $value .= '-- Created by DBManage class, Power By yanue. ' . $this->ds; 
        $value .= '-- http://yanue.net ' . $this->ds; 
        $value .= '--' . $this->ds; 
        $value .= '-- 主机: ' . $this->host . $this->ds; 
        $value .= '-- 生成日期: ' . date ( 'Y' ) . ' 年  ' . date ( 'm' ) . ' 月 ' . date ( 'd' ) . ' 日 ' . date ( 'H:i' ) . $this->ds; 
        $value .= '-- MySQL版本: ' . mysql_get_server_info () . $this->ds; 
        $value .= '-- PHP 版本: ' . phpversion () . $this->ds; 
        $value .= $this->ds; 
        $value .= '--' . $this->ds; 
        $value .= '-- 数据库: `' . $this->database . '`' . $this->ds; 
        $value .= '--' . $this->ds . $this->ds; 
        $value .= '-- -------------------------------------------------------'; 
        $value .= $this->ds . $this->ds; 
        return $value; 
    } 
  
    /**
     * 插入表结构
     *
     * @param unknown_type $table
     * @return string
     */
    private function _insert_table_structure($table) { 
        $sql = ''; 
        $sql .= "--" . $this->ds; 
        $sql .= "-- 表的结构" . $table . $this->ds; 
        $sql .= "--" . $this->ds . $this->ds; 
  
        // 如果存在则删除表 
        $sql .= "DROP TABLE IF EXISTS `" . $table . '`' . $this->sqlEnd . $this->ds; 
        // 获取详细表信息 
        $res = mysql_query ( 'SHOW CREATE TABLE `' . $table . '`' ); 
        $row = mysql_fetch_array ( $res ); 
        $sql .= $row [1]; 
        $sql .= $this->sqlEnd . $this->ds; 
        // 加上 
        $sql .= $this->ds; 
        $sql .= "--" . $this->ds; 
        $sql .= "-- 转存表中的数据 " . $table . $this->ds; 
        $sql .= "--" . $this->ds; 
        $sql .= $this->ds; 
        return $sql; 
    } 
  
    /**
     * 插入单条记录
     *
     * @param string $table
     * @param int $num_fields
     * @param array $record
     * @return string
     */
    private function _insert_record($table, $num_fields, $record) { 
        // sql字段逗号分割 
        $insert = $comma = ""; 
        $insert .= "INSERT INTO `" . $table . "` VALUES("; 
        // 循环每个子段下面的内容 
        for($i = 0; $i < $num_fields; $i ++) { 
            $insert .= ($comma . "'" .mysql_real_escape_string ( $record [$i] ) . "'"); 
            $comma = ","; 
        } 
        $insert .= ");" . $this->ds; 
        return $insert; 
    } 
  
    /**
     * 写入文件
     *
     * @param string $sql
     * @param string $filename
     * @param string $dir
     * @return boolean
     */
    private function _write_file($sql, $filename, $dir) { 
        $dir = $dir ? $dir : './backup/'; 
        // 不存在文件夹则创建 
        if (! file_exists ( $dir )) { 
            mkdir ( $dir ); 
        } 
        $re = true; 
        if (! @$fp = fopen ( $dir . $filename, "w+" )) { 
            $re = false; 
            echo "打开文件失败!"; 
        } 
        if (! @fwrite ( $fp, $sql )) { 
            $re = false; 
            echo "写入文件失败,请文件是否可写"; 
        } 
        if (! @fclose ( $fp )) { 
            $re = false; 
            echo "关闭文件失败!"; 
        } 
        return $re; 
    } 
  
    /*
      *
      * -------------------------------上:数据库导出-----------分割线----------下:数据库导入--------------------------------
      */
  
    /**
     * 导入备份数据
     * 说明:分卷文件格式20120516211738_all_v1.sql
     * 参数:文件路径(必填)
     *
     * @param string $sqlfile
     */
    function restore($sqlfile) 
    { 
        // 检测文件是否存在 
        if (! file_exists ( $sqlfile )) 
        { 
            exit ( "文件不存在!请检查" ); 
        } 
        $this->lock ( $this->database ); 
        // 获取数据库存储位置 
        $sqlpath = pathinfo ( $sqlfile ); 
        $this->sqldir = $sqlpath ['dirname']; 
        // 检测是否包含分卷,将类似20120516211738_all_v1.sql从_v分开,有则说明有分卷 
        $volume = explode ( "_v", $sqlfile ); 
        $volume_path = $volume [0]; 
        echo "请勿刷新及关闭浏览器以防止程序被中止,如有不慎!将导致数据库结构受损<br />"; 
        echo "正在导入备份数据,请稍等!<br />"; 
        if (empty ( $volume [1] )) 
        { 
            echo "正在导入sql:<span style='color:#f00;'>" . $sqlfile . '</span><br />'; 
            // 没有分卷 
            if ($this->_import ( $sqlfile )) { 
                echo "数据库导入成功!"; 
            } 
            else
            { 
                exit ( '数据库导入失败!' ); 
            } 
        } 
        else
        { 
            //$volume_id = array(); 
            // 存在分卷,则获取当前是第几分卷,循环执行余下分卷 
            $volume_id = explode ( ".sq", $volume [1] ); 
            // 当前分卷为$volume_id 
            $volume_id = intval ( $volume_id [0] ); 
            while ( $volume_id ) 
            { 
                $tmpfile = $volume_path . "_v" . $volume_id . ".sql"; 
                // 存在其他分卷,继续执行 
                if (file_exists ( $tmpfile )) { 
                    // 执行导入方法 
                    echo "正在导入分卷<span style='color:#f00;'>" . $tmpfile . '</span><br />'; 
                    if ($this->_import ( $tmpfile )) 
                    { 
  
                    } 
                    else
                    { 
                        exit ( "导入分卷<span style='color:#f00;'>" . $tmpfile . '</span>失败!可能是数据库结构已损坏!请尝试从分卷1开始导入' ); 
                    } 
                } 
                else
                { 
                    echo "此分卷备份全部导入成功!<br />"; 
                    return; 
                } 
                $volume_id++; 
            } 
        } 
    } 
  
    /**
     * 将sql导入到数据库(普通导入)
     *
     * @param string $sqlfile
     * @return boolean
     */
    private function _import($sqlfile) { 
        // sql文件包含的sql语句数组 
        $sqls = array (); 
        $f = fopen ( $sqlfile, "rb" ); 
        // 创建表缓冲变量 
        $create = ''; 
        while ( ! feof ( $f ) ) { 
            // 读取每一行sql 
            $line = fgets ( $f ); 
            // 如果包含'-- '等注释,或为空白行,则跳过 
            if (trim ( $line ) == '' || preg_match ( '/--*?/', $line, $match )) { 
                continue; 
            } 
            // 如果结尾包含';'(即为一个完整的sql语句,这里是插入语句),并且不包含'ENGINE='(即创建表的最后一句), 
            if (! preg_match ( '/;/', $line, $match ) || preg_match ( '/ENGINE=/', $line, $match )) { 
                // 将本次sql语句与创建表sql连接存起来 
                $create .= $line; 
                // 如果包含了创建表的最后一句 
                if (preg_match ( '/ENGINE=/', $create, $match )) { 
                    // 则将其合并到sql数组 
                    $sqls [] = $create; 
                    // 清空当前,准备下一个表的创建 
                    $create = ''; 
                } 
                // 跳过本次 
                continue; 
            } 
            $sqls [] = $line; 
        } 
        fclose ( $f ); 
        // 循环sql语句数组,分别执行 
        foreach ( $sqls as $sql ) { 
            str_replace ( "n", "", $sql ); 
            if (! mysql_query ( trim ( $sql ) )) { 
                echo mysql_error (); 
                return false; 
            } 
        } 
        return true; 
    } 
  
    /*
      * -------------------------------数据库导入end---------------------------------
      */
  
    // 关闭数据库连接 
    private function close() { 
        mysql_close ( $this->db ); 
    } 
  
    // 锁定数据库,以免备份或导入时出错 
    private function lock($tablename, $op = "WRITE") { 
        if (mysql_query ( "lock tables " . $tablename . " " . $op )) 
            return true; 
        else
            return false; 
    } 
  
    // 解锁 
    private function unlock() { 
        if (mysql_query ( "unlock tables" )) 
            return true; 
        else
            return false; 
    } 
  
    // 析构 
    function __destruct() { 
        mysql_query ( "unlock tables", $this->db ); 
        mysql_close ( $this->db ); 
    } 
}
 
$db = new DBManage ( 'localhost', 'root', '', 'tao', 'gbk' );
//$db->backup ('tao_admin'); 
$db->restore ( './backup/20140228222713_tao_admin_v1.sql');
php有强大的功能不但可以支持mysql,mssql,mysqli之个我们还可以与oracle数据连接哦,要让php支持oracle非常的简单我们只要把php.ini中的;extention = php_oci8.dll分号去掉即可。

记php支持oracle连接函数

php.ini文件中的配置,去掉  ;extention = php_oci8.dll,去掉前面的分号
重启apache就可以了,
如果不行,我们再把php目录中的php_oci8.dll拷到windows系统的system32下面去吧。
oracle数据库建立链接

 代码如下 复制代码

1.$conn = oci_connect('username','password',"(DEscriptION=(ADDRESS=(PROTOCOL =TCP)(HOST=192.168.1.100)(PORT = 1521))(CONNECT_DATA =(SID=test)))");

2.$conn = oci_connect('username','password','192.168.1.100/test');

3.Oracle 连接方法:

set adocon=Server.Createobject("adodb.connection")
adocon.open"Driver={microsoft odbc for oracle};server=oraclesever.world;uid=admin;pwd=pass;"

4.Oracle OLE DB 连接方法:

set adocon=Server.Createobject("adodb.connection")
adocon.open"Provider=OraOLEDB.Oracle;data source=dbname;user id=admin;password=pass;"

有的时候第一种方式不行,使用第二种,里面的几个参数分别是用户名、密码、oracle服务地址,其中test是服务名。

 代码如下 复制代码

$sql = "select * from table_exmaple"
$ora_test = oci_parse($conn,$sql);  //编译sql语句
oci_execute($ora_test,OCI_DEFAULT);  //执行
while($r=oci_fetch_row($ora_test))  //取回结果
{
echo $ora_test[0];
echo "<BR>"; 
}

看个完整的例子

如果PHP版本>5.0,那么使用下面的函数

oci_connect ( username, password , dbname )

例子:

 代码如下 复制代码

<?php

$conn = oci_connect('hr', 'hr', 'orcl'); // 建立连接

if (!$conn) {

$e = oci_error();

print htmlentities($e['message']);

exit;

}

$query = 'SELECT * FROM DEPARTMENTS'; // 查询语句

$stid = oci_parse($conn, $query); // 配置SQL语句,准备执行

if (!$stid) {

$e = oci_error($conn);

print htmlentities($e['message']);

exit;

}

$r = oci_execute($stid, OCI_DEFAULT); // 执行SQL。OCI_DEFAULT表示不要自动commit

if(!$r) {

$e = oci_error($stid);

echo htmlentities($e['message']);

exit;

}

// 打印执行结果

print '<table border="1">';

while($row = oci_fetch_array($stid, OCI_RETURN_NULLS)) {

print '<tr>';

foreach($row as $item) {

print '<td>'.($item?htmlentities($item):' ').'</td>';

}

print '</tr>';

}

print '</table>';

oci_close($conn);

?>

php Mysql类一般都包括了几乎我们常用的数据库操作方法,这里只提供了查询 删除 更新三种操作,算不是很全只是一个简单的数据库查询类了。
 代码如下 复制代码
class mysql
{
    private $host;
    private $user;
    private $pass;
    private $database;
    private $charset;
    function __construct($host,$user,$pass,$database,$charset)
    {
        $this--->host=$host;
        $this->user=$user;
        $this->pass=$pass;
        $this->database=$database;
        $this->charset=$charset;
        $this->connect();
    }
    private function connect()//连接函数
    {
        mysql_connect($this->host,$this->user,$this->pass) or die ("连接数据库服务器失败!");
        mysql_select_db($this->database) or die ("连接数据库失败!");
        mysql_query("set names $this->charset");       
    }
    function select($sql,$tab,$col,$value)//选择函数
    {
        $select=mysql_query("select $sql from $tab where $col=$value");
        $row=mysql_fetch_array($select);
        return $row;
    }
    function insert($tab,$col,$value)//插入数据函数
    {
        mysql_query("INSERT INTO $tab($col)values($value)");
    }
    function update($tab,$col,$new_value,$colm,$value)//更新数据函数
    {
        mysql_query("UPDATE $tab SET $col=$new_value where $colm=$value");   
    }
    function delete($tab,$col,$value)//删除数据函数
    {
        mysql_query("DELETE FROM $tab where $col=$value");
        }
    function close()//关闭连接函数
    {
    mysql_close();
 
    }
}
//$mysql=new mysql("127.0.0.1","root","120360150","test","gbk");连接数据库
//$sql=$mysql->select("*","admin","id","3");//选择数据
//print_r($sql);//打印返回的数组
//$mysql->insert("admin","user_name,user_pass","'123','123'");插入数据
//$mysql->update("admin","user_pass","22","id","3");更新数据
//$mysql->delete("admin","id","4");删除数据
//$mysql->close();关闭连接
?>
百度、QQ、360等大公司都拥有上亿的用户量。不仅所有子网站都通过一个账号登录,而且还开放用户平台,提供给其他网站使用。这种级别的数据量和访问量 如果不做优化,估计很快就会宕机。这些公司都是一个专门的团队,维护一个注册登录,细节设计的非常优秀。现在粗略谈下他们的设计方案

大数据的时候,压力不在PHP,主要在MySQL。
PHP可以做负载均衡,10台机器抗不住就用20台或者100台,这都不是瓶颈。
但是MySQL是单点的,无论做多少从库,都是优化查询,更新数据就无法只是简单的通过加机器解决了。
而且查询也可以通过Memcache缓存减轻压力,所以不必要做多少从库的,一般1主4从就可以了。
下面主要介绍下数据库的解决方案:
假设用户可以通过“登录名”、“邮箱”或“手机号”登录。
表结构如下:
登录名与ID表,根据login_hash分100张表
CREATE TABLE user_login(
login_name VARCHAR() 用户登录名,可以是“登录名”、“邮箱”或“手机号”登录
login_hash BIGINT 用户登录名的HASH码
user_id BIGINT 用户ID
);
CREATE TABLE user_login0 LIKE user_login;
CREATE TABLE user_login1 LIKE user_login;
… …
CREATE TABLE user_login100 LIKE user_login;

ID与用户信息表,根据user_id分100张表
CREATE TABLE user_info(
user_id BIGINT 用户ID
login_pwd CHAR() 用户登录密码
… … 其他信息,家庭住址、手机号、性别等等
);

CREATE TABLE user_info0 LIKE user_info;
CREATE TABLE user_info1 LIKE user_info;
… …
CREATE TABLE user_info2 LIKE user_info;

业务实现逻辑:
依赖服务器:实现一个自增ID的服务(相当于oracle的sequence),也可以自己实现(用PHP+MySQL或者用C实现都可以)。目的是可以 从这个服务中取ID,每次取的ID数都是在上次基础上+1,和MySQL的autoincrement很像,只是不能在表内部自增。

注册流程
1)验证用户名、邮箱、手机号、密码等格式。省略…
2)从服务中取一个ID,假设是115。
3)如果用户的登录类型是邮箱(如:$loginName=’songhuan@zixue.it’),则在登录名前加上前缀登录名结果(如:$loginName=’mail_songhuan@zixue.it’)
4)求登录名的HASH值:$loginHash=md5($loginName); 对md5值hash,可以求asc码,或者用自己的算法,最后得出$loginHash=16位或32位的整数
5)$tableName  = ‘user_login’ . ($loginHash%100),如果获取user_login表名,假如结果为user_login88。
$tableName  = ‘user_info’ . (115%100),如果获取user_info表名。
6)执行SQL:
INSERT INTO user_login88 (login_name, login_hash, user_id) VALUES (‘songhuan@zixue.it’, 183239324323, 1);
INSERT INTO user_info15 (user_id, login_pwd) VALUES (115, ‘afieflefiefladifadfadfe’);

登录流程 www.111cn.net
1)如果用户的登录类型是邮箱(如:$loginName=’songhuan@zixue.it’),则在登录名前加上前缀登录名结果(如:$loginName=’mail_songhuan@zixue.it’)
2)$loginHash=ord(md5($loginName));
3)$tableName  = ‘user_login’ . ($loginHash%100); 假如结果为user_login88
4)执行SQL:SELECT id FROM user_login88 WHERE login_hash = $loginHash;
如果查询不到数据,则登录名不存在
5)如果能获取到,id=115,则$tableName  = ‘user_info’ . (115%100);
SELECT id, pwd … FROM user_info15 WHERE id = 115;
6)匹配密码,如果密码不相等,返回false
7)如果密码相等,将用户ID加密放入COOKIE,将用户信息存入Memcache

数据库连接我就不介绍了,这里就是简单的mysql连接了,我们主要是看核心代码了,原理就是glob函数遍历目录,然后再利用foreach遍历读取一个个的文件名字再由相关函数处理之后返回给我们编译好的sql语句再执行三表操作即可。

临时写的一个东西省时间而写的,因为有几千个产品带大图,所以我们写了这么一个程序了,希望对各位有帮助。

目录效果如

php导入文件夹图片保存到dedecms中


导入方法

http://www.111cn.net/ a.php?typeid=你的id&path=你的目录


处理php文件

 代码如下 复制代码

$typeid = $_GET['typeid'];
if( ! intval( $typeid ) )
{
 echo '请传值给typeid';
 exit;
}

$path = $_GET['path'];

if( $path =="" )
{
 echo '请传值给path ,如  a/b/c/';
 exit;
}


function getfile($path)
{
 $dirs    = array();
 foreach(glob("$path*") as $d)
 {
  $tmp = explode('.',$d);
  $k = end($tmp);
  if(is_file($d) && ( $k=='jpg' || $k =='gif' || $k=='png'))
  {
   $dirs[]    = $d;
  }
 }
 return $dirs;
}
$array = getfile($path);
foreach( $array as $v => $vv )
{
 //www.111cn.net取名字
 $t_name = explode( '/',$vv ); ;
 $tV = end($t_name);
 list($name,$ext) = explode('.',$tV);
 
 $sql ="INSERT INTO `dedecms_archives` (`typeid`, `typeid2`, `sortrank`, `flag`, `ismake`, `channel`, `arcrank`, `click`, `money`, `title`, `shorttitle`, `color`, `writer`, `source`, `litpic`, `pubdate`, `senddate`, `mid`, `keywords`, `lastpost`, `scores`, `goodpost`, `badpost`, `voteid`, `notpost`, `description`, `filename`, `dutyadmin`, `tackid`, `mtype`, `weight`) VALUES
($typeid, '0', 1394943742, 'c,p', 1, 17, 0, 156, 0, '$name', 'S".$typeid.mt_rand(0,99999)."', '', 'admin', '未知', '/$vv', 1394943742, 1394943720, 1, '$name', 0, 0, 0, 0, 0, 0, '', '', 1, 0, 0, 11)";
 mysql_query( $sql ) or die( mysql_error().$sql );
 $aid= mysql_insert_id();

 $sql2 ="INSERT INTO `dedecms_addonarticle17` (`aid`, `typeid`, `body`, `redirecturl`, `templet`, `userip`, `s_type`) VALUES
($aid, $typeid, '<img  src=/".str_replace('231','600',$vv)." />', '', '', '192.168.1.108', 'S12000".$name."')";
 
 mysql_query( $sql2 ) or die( mysql_error().$sql2 );
 
 $sql3 ="INSERT INTO `dedecms_arctiny` (`id`, `typeid`, `typeid2`, `arcrank`, `channel`, `senddate`, `sortrank`, `mid`) VALUES
($aid, $typeid, '0', 0, 17, 1394943720, 1394943742, 1)";

 mysql_query( $sql3 ) or die( mysql_error().$sql3 );

 
}

echo '导入成功';

print_r($array);

之后碰到一个小问题,就是导入数据在栏目可以看到,但在所有数据中看不到记录,生成时只有选择栏目生成才可以但用一键生成有问题,这个时我在发布时间是固定一个以前的时间了,大家可以使用time函数来获取当前时间了。

本站原创文章,转让注明来自http://www.111cn.net/phper/php.html

 

[!--infotagslink--]

相关文章

  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • mysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21
  • Mysql数据库错误代码中文详细说明

    1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23
  • c#异步读取数据库与异步更新ui的代码实现

    这篇文章主要介绍了c#从数据库里取得数据并异步更新ui的方法,大家参考使用吧...2020-06-25
  • Yii2.0高级框架数据库增删改查的一些操作

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2使用中的一些基本的增删改查操作。 User::find()->all(); //返回所有用户数据; User::findOne($id); //返回 主键...2015-11-24
  • springBoot 项目排除数据库启动方式

    这篇文章主要介绍了springBoot 项目排除数据库启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-10
  • MYSQL数据库使用UTF-8中文编码乱码的解决办法

    1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci” 或执行语句: 复制代码 代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 创...2015-10-21
  • Linux 下使用shell脚本定时维护数据库的案例

    这篇文章主要介绍了Linux 下使用shell脚本定时维护数据库,本文通过案例分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • PHP连接公司内部服务器的MYSQL数据库的简单实例

    “主机,用户名,密码”得到连接、“数据库,sql,连接”得到结果,最后是结果的处理显示。当然,数据库连接是扩展库为我们完成的,我们能做的仅仅是处理结果而已。...2013-09-29
  • C#连接加密的Sqlite数据库的方法

    对数据加密分两种,一种是对数据库本身进行加密,另一种是对数据表中的数据进行加密,下面通过本文给大家介绍C#连接加密的Sqlite数据库的方法,感兴趣的朋友一起看看吧...2020-06-25
  • Java连接数据库oracle中文乱码解决方案

    这篇文章主要介绍了Java连接数据库oracle中文乱码解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-16
  • 深入分析C#连接Oracle数据库的连接字符串详解

    本篇文章是对C#连接Oracle数据库的连接字符串进行了详细的分析介绍,需要的朋友参考下...2020-06-25
  • 修改MySQL数据库中表和表中字段的编码方式的方法

    今天向MySQL数据库中的一张表添加含有中文的数据,可是老是出异常,检查程序并没有发现错误,无奈呀,后来重新检查这张表发现表的编码方式为latin1并且原想可以插入中文的字段的编码方式也是latin1,然后再次仔细观察控制台输...2014-05-31