帝國cms 內容存文本轉數據庫處理方案修改優化版
使用方法:
根目錄建一個 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>";
}
}
聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至201542412@QQ.com舉報,一經查實,本站將立刻刪除。
相關推薦
-
帝國CMS多表調用最新信息的方法
這篇文章主要爲大家介紹了帝國CMS多表調用最新信息的方法,主要通過靈動標籤的sql語句調用結合union來實現,是非常實用的技巧,需要的朋友可以參考下
-
帝國CMS判斷是否有內容分頁的方法
帝國CMS判斷是否有內容分頁,有就顯示,沒有就不顯示。以免沒有的分頁的時候佔了一行位子,不是非常美觀。
-
帝國CMS商城系統如何實現在線支付後發送訂單郵件提醒功能
帝國CMS是個強大的內容管理系統,其商城的功能也很強大,當用戶下單,支付後我們怎麼知道有用戶下單了呢?因爲我們不能時時刻刻都在網站後臺,不斷的刷新頁面去看有無訂單,最常用的做法是用郵件提醒我們,有人下單了.
-
帝國CMS內容頁附件中文顯示或者顯示代碼名稱下載
在帝國CMS模板製作中,比如內容頁面顯示該內容的附件地址,必須顯示原始路徑地址,或者說想要中文的路徑地址。那麼就要用以下方法來實現了:
-
帝國cms加載更多時調用對應文章的tags標籤和鏈接
帝國cms如果使用點擊加載更多的時候怎麼樣連gs標籤和鏈接一起循環出來,如果是調用標題,簡介,瀏覽,時間,這些單一的字都很簡單