php通用安裝程序,導入數據文件(.sql)的安裝程序



php通用安裝程序,導入數據文件(.sql)的安裝程序

該程序只需要1個php文件 和 1個數據文件,很方便調用.
install/index.php         程序文件
install/mycms.sql        要導入的mysql數據文件( .sql文件)


本通用程序可以正確導入各種編碼的數據文件 ,默認utf8,如果要換其它的,修改DB_CHARSET  常量即可。
本通用程序尚未處理  表前綴 事宜。

效果截圖:( ui引用某商城的安裝界面, 程序代碼原創 )

主要程序代碼如下:

<?php
!defined( 'DB_CHARSET' ) && define( 'DB_CHARSET' , 'utf8' );// 數據庫保存編碼, 不可缺少
header( 'Content-Type:text/html; charset=utf-8' ); // 本程序執行編碼

// 顯示填寫mysql信息的表單 , 並停止
if ( !isset( $_POST['dbinfo'] ) ) {
    include 'install_form.html';
    exit;
}


// 提交表單后, 獲得mysql賬號信息
$db = array(  );
$data = $_POST['dbinfo'];
$db['host'] = $data['dbhost'];
$db['dbname'] = $data['dbname'];
$db['user'] = $data['dbuser'];
$db['pwd'] = $data['dbpw'];


// 導入數據文件
$sql_file = dirname(__FILE__)."/mycms.sql";
run_sql_file( $sql_file , $db );

// 生成已安裝文件
file_put_contents( '../install_lock' , '' );

// 安裝完成 , 跳轉回首頁
echo "
\n\r<pre>
+-------------+-------------+-------------+
            安裝完成。... 
</pre>
\n\r

<meta http-equiv='refresh' content='2;url=../index.php' />
";



/* 執行mysql數據文件.  參數: 數據文件 , 數據庫賬號信息 */
function run_sql_file( $sql_file , $dbconfig ) {
    $host = $dbconfig['host'] ;
    $dbname = $dbconfig['dbname'] ;
    $user = $dbconfig['user'] ;
    $pwd = $dbconfig['pwd'] ;

    // 連接mysql數據庫
    $conn = mysql_connect($host,$user,$pwd) or die( '連接mysql錯誤:'.mysql_error() );

    // 刪除舊的數據庫 
    mysql_query( "DROP database IF EXISTS {$dbname} ;" ) or die ( "重新建立新的數據庫 操作失敗,無法刪除【舊】數據庫, 請檢查mysql操作權限。錯誤信息: \n".mysql_error() ); 

    // 重新建立新數據庫
    mysql_query( "CREATE DATABASE {$dbname} CHARACTER SET ".DB_CHARSET." ;" ) or die ( "無法創建數據庫, 請檢查mysql操作權限。錯誤信息: \n".mysql_error() ); 

    // 選擇數據庫
    mysql_select_db($dbname,$conn) or die( "連接數據庫名 {$dbname} 錯誤:\n".mysql_error() );


    /* ############ 數據文件分段執行 ######### */
    $sql_str = file_get_contents( $sql_file );
    $piece = array(  ); // 數據段
    preg_match_all( "@([\s\S]+?;)\h*[\n\r]@" , $sql_str , $piece ); // 數據以分號;\n\r換行  為分段標記
    !empty( $piece[1] ) && $piece = $piece[1];
    $count = count($piece);
    if ( $count <= 0 ) {
        exit( 'mysql數據文件: '. $sql_file .' , 不是正確的數據文件. 請檢查安裝包.' );
    }

    $tb_list = array(  ); // 表名列表
    preg_match_all( '@CREATE\h+TABLE\h+[`]?([^`]+)[`]?@' , $sql_str , $tb_list );
    !empty( $tb_list[1] ) && $tb_list = $tb_list[1];
    $tb_count = count( $tb_list );

    // 開始循環執行
    for($i=0;$i<$count ;$i++){

        $sql = $piece[$i] ;
        mysql_query("SET character_set_connection='".DB_CHARSET."', character_set_results='".DB_CHARSET."', character_set_client='binary'");
        $result = mysql_query($sql);
        
        // 建表數量
        if ( $i < $tb_count ) {
            echo "<span style='display: inline-block; width: 200px;'>創建表: ".$tb_list[ $i ]. '</span>';
            if($result){
                echo " <font color='green'>成功</font> ......";
            }
            else {
                echo " <font color='red'>失敗</font> , 原因:".mysql_error();
            }
            echo "<br />\n";
        }
        // 執行其它語句
        else {
            if(!$result){
                echo "\n<br /> sql語句執行<font color='red'>失敗</font> , 原因:".mysql_error();
            }
        }
    }
    
}

?>
View Code

 

完整的安裝程序壓縮包 下載:http://files.cnblogs.com/wangqishu/mycms_install.rar


單獨使用方法:
把你的mysql數據文件,如test.sql 放到install目錄下,修改它在index.php里面的文件名 即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM