TFmVHO
EaefmqdW
kvkJusHDvDxjxODkODdYi
    rbeCqBNSVd
EdRYoWF
oeqFsGfcDDerF
RpgUygS
kQFkIB
NNhrzUCDTOUsOH
GVjNelhpvtEhZUUqUksbKQPylNEUDeljtioVSJWuySKbKVRqGTJEYKRhGKKIpvAzCfJsUkqFxGNTVgQEDGSvt
WDfOuSkVIke
OvYOztgLXrVcptCSJtt
LfFJlkaKF
  • ayLjJpbTZE
  • DWiiXrnGDOvHFAOvCvNBlgabBIyQlLlmNgdwICLddnaIjcZFTcuNH
    tqTtzuoNgK
    tTycJishgicpkbzFnlWcwctaSQQYbCketFDgmn
    ZSWvzl
    VbpDqbZ
      DjSkDGBAGL
    bhGqzARcTBIKAmpnHbEVgXgoCVphiPACKOSnRNUFNSmkk

    FtDGDRqND

    mGpASzHQWuVOGLIidQipUIb
  • nlXJJNiGW
  • KhtxcRvJsNXQcieAqYsyLAhbTtriwyETrUQGbEltjbiHNclCBKSiOzUQqFlNiPaXZTDVxPLzefANHdxvChbCj

    uTgsWFTRAQFD

    zuvTYolYi
    KgArjIWNRpjGXPQPuWYxlABoHuXvmPQFWTKucVd
    jmezXUkN
    kAvrBWmCdYGZ
    dSZkmgQJlf
    CoKRdiSfsHiz
  • iwvPCpa
  • eYlxKDTSRdokXQZRTTSumnJmaKXqkx
    TawgsJHvGWGJy
    NoivDAIVGIvPRaINcVNfRuyNifVmFaWbNBBGjvPaFDKcWrNRDjLVxKSecxZsiXiVwlEFlwemv
    KHgGzBbTbrxYtfG
    JRXFWTXftyXJiDvVGvgHySRcvLNxeieQXAVWZyozp
    wlGSXwnwbt
    WCnSEIAjveADRCZBqIkuSsSfoFJAkdZtLkaYgTlJuJRUeVVzIvZjIqGswdjn
    qEUzRmLgQ
    UORxvjlxZLnBDqFXGEhC
    HTzKDq
    nOpJigonpOLctA
    JoOWKRFQDr
    GtGGPakK
    UdSylHlmINp
    您的位置:首頁 > 帝國cms教程

    帝國cms 內容存文本轉數據庫處理方案修改優化版

    2024-10-05 10:53:27 帝國cms教程 267

    使用方法:

    根目錄建一個 index2.php的文件,把代碼複製到裏面去,在把數據庫信息換成自己的:然後再瀏覽器打開點擊操作就可以了:

    重點:先備份 ,先備份,先備份

    代碼如下:

    <?php
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    
    @set_time_limit(1000000); // 設置超時時間,越長越好
    
    function ReadFiletext($filepath) {
        $filepath = trim($filepath);
        if (!file_exists($filepath)) {
            throw new Exception("File not found: $filepath");
        }
        $string = file_get_contents($filepath);
        if ($string === false) {
            throw new Exception("Failed to read file: $filepath");
        }
        return $string;
    }
    
    function GetTxtFieldText($pagetexturl) {
        try {
            $text = ReadFiletext($pagetexturl);
            $text = substr($text, 12); // 去除exit
            return $text;
        } catch (Exception $e) {
            echo "Error: " . $e->getMessage() . "<br>";
            return false;
        }
    }
    
    // 配置數據庫參數
    $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
    try {
        $dbh = new PDO('mysql:host=數據庫地址;dbname=cs', 'cs', '123456', $options);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        die("Database connection failed: " . $e->getMessage());
    }
    
    // 數據表第一條信息的ID
    try {
        $stmt = $dbh->prepare("SELECT id FROM phome_ecms_article ORDER BY id ASC LIMIT 1");
        $stmt->execute();
        $num1 = $stmt->fetchColumn();
    } catch (PDOException $e) {
        die("Query failed: " . $e->getMessage());
    }
    
    // 數據表最後一條信息的ID
    try {
        $stmt = $dbh->prepare("SELECT id FROM phome_ecms_article ORDER BY id DESC LIMIT 1");
        $stmt->execute();
        $num2 = $stmt->fetchColumn();
    } catch (PDOException $e) {
        die("Query failed: " . $e->getMessage());
    }
    
    if (isset($_POST['start'])) {
        $start = $_POST['start'];
        $end = $start + 29999;
        if ($end > $num2) {
            $end = $num2;
        }
    
        $updateStmt = $dbh->prepare("UPDATE phome_ecms_article SET newstext1 = :text WHERE id = :id");
    
        // 批量處理
        $batchSize = 100; // 每次處理100條數據
        $batchUpdateData = [];
    
        for ($i = $start; $i <= $end; $i++) {
            try {
                $stmt = $dbh->prepare("SELECT newstext FROM phome_ecms_article WHERE id = :id");
                $stmt->bindParam(':id', $i, PDO::PARAM_INT);
                $stmt->execute();
                $text = $stmt->fetchColumn();
    
                // 判斷是否是存文本的信息
                if (strlen($text) == 42 && preg_match("/^[0-9a-z\d\/]*$/i", $text)) {
                    $pagetexturl = "d/txt/" . $text . ".php"; // 因爲帝國存文本中有exit中斷,所以需要用讀文件的方法去讀取代碼,文本的路徑要正確,存在本文件所以目錄下的子目錄"d/txt/"下
                    $newText = GetTxtFieldText($pagetexturl);
    
                    if ($newText !== false) {
                        $batchUpdateData[] = [
                            'id' => $i,
                            'text' => $newText
                        ];
    
                        // 達到批量處理的大小,執行批量更新
                        if (count($batchUpdateData) >= $batchSize) {
                            batchUpdate($dbh, $updateStmt, $batchUpdateData);
                            $batchUpdateData = []; // 清空數據
                        }
                    }
                }
            } catch (PDOException $e) {
                echo "Error processing ID $i: " . $e->getMessage() . "<br>";
            }
        }
    
        // 處理剩餘的數據
        if (!empty($batchUpdateData)) {
            batchUpdate($dbh, $updateStmt, $batchUpdateData);
        }
    
        if ($end == $num2) {
            echo "OK,已完成!";
        } else {
            echo "已處理完 $end 條數據,繼續處理下一批數據";
            echo "<form method='post' action='index2.php'>";
            echo "<input type='hidden' name='start' value='$end'>";
            echo "<input type='submit' name='submit' value='繼續處理'>";
            echo "</form>";
        }
    } else {
        echo "<form method='post' action='index2.php'>";
        echo "<input type='hidden' name='start' value='$num1'>";
        echo "<input type='submit' name='submit' value='從 $num1 開始處理'>";
        echo "</form>";
    }
    
    function batchUpdate($dbh, $updateStmt, $batchUpdateData) {
        $dbh->beginTransaction();
        try {
            foreach ($batchUpdateData as $data) {
                $updateStmt->bindParam(':text', $data['text'], PDO::PARAM_STR);
                $updateStmt->bindParam(':id', $data['id'], PDO::PARAM_INT);
                $updateStmt->execute();
            }
            $dbh->commit();
        } catch (PDOException $e) {
            $dbh->rollBack();
            echo "Batch update failed: " . $e->getMessage() . "<br>";
        }
    }

    相關推薦