主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: WhiteCloud 於 六月 01, 2005, 04:43:29 下午 這應該不是外掛的功能(當然,我有可能猜錯了 :P)
由於我用的虛擬主機,偶爾會連不上 MySQL,我就自己寫了個簡單程式輸出靜態頁面 HTML 作為備份。 請問我應該從那裡下手去改錯誤處理呢? 從錯誤訊息來看,可能是連結 MySQL 太多 threads 或是 memory 不足的錯誤,這是 pLog 的處理範圍嗎? 環境: ----------------------------------------- Linux(不知道是哪個版本) Apache Release 10333100 Apache API Version 19990320 PHP Version 4.3.11 MySQL Client API version 4.0.24 ----------------------------------------- 我的超簡單輸出程式如下,提供給需要的人。 (由於這支程式輸出全部文章到同一個檔案,文章很多的人可能要考慮清楚這樣做是否合適,或者依情況自行修改) ---------------- <?php // 參數設定 // 資料庫所在 $strMySQL = "xxx"; // 資料庫名稱 $strDatabase = "xxx"; // 資料庫使用者名稱 $strUserName = "xxx"; // 資料庫密碼 $strPassword = "xxx"; // plog 的資料表字首 $strPlogPrefix = "xxx"; // 輸出路徑,最後面要加斜線(目錄要設定為可讀寫,例如777) $strArticleIndexPath = "xxx"; // 輸出備份檔名 $strOutput = "xxx"; // 聯結資料庫 $link = mysql_connect($strMySQL, $strUserName, $strPassword) or die("mysql_connect() failed."); mysql_select_db($strDatabase, $link) or die("mysql_select_db() failed."); // 放文章的變數 $strFileContent = <<<EOT <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh_TW" lang="zh_TW" dir="ltr"> <head> <title>White Cloud's Blog</title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> </head> <body><center> <font size=6 color=green>White Cloud's Blog</font> <br>目前暫時連結不上資料庫,這是備份頁面<br><br> EOT; $strTable = $strPlogPrefix."articles_text"; $sql = "select article_id,topic,text from $strTable order by article_id desc"; $r = mysql_query($sql); while ($row = mysql_fetch_object($r)) { $strArticleID = $row->article_id; $strTopic = $row->topic; $strText = $row->text; $strFileContent = $strFileContent.'<table width="80%" border="1"><tr><td>'; // $strFileContent = $strFileContent.$strArticleID; // $strFileContent = $strFileContent."<br>"; $strFileContent = $strFileContent.'<font size=5><b>'; $strFileContent = $strFileContent.$strTopic; $strFileContent = $strFileContent.'</b></font>'; $strFileContent = $strFileContent."<br><br>"; $strFileContent = $strFileContent.$strText; $strFileContent = $strFileContent."<br><br>"; $strFileContent = $strFileContent."<td><tr><table><br><br>"; } $strFileContent = $strFileContent."All content copyright (c) 2004 White Cloud's Blog"; $strFileContent = $strFileContent."</center></body></html>"; // 輸出成為 HTML //echo $strFileContent; $fp = fopen($strArticleIndexPath.$strOutput, "w"); fputs($fp, $strFileContent); fclose($fp); echo "OK"; ?> 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: markwu 於 六月 02, 2005, 10:35:56 上午 這方法不錯喔!呵呵!也可以用這樣來備份文章。
Mark 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: WhiteCloud 於 六月 02, 2005, 12:04:09 下午 如果要完整的備份方案, Mark 的匯出匯入 RSS
http://forum.lifetype.org.tw/index.php?topic=713.0 才是更好的方法。:-) 這是不得已的方法,因為 PHP 似乎都 OK,但是 MySQL 在某個時段會有問題(不知道是不是固定的維護時間)。 哈,這支簡單程式竟然忘了用變數指定 Database,趕快改正。 :P 請問這種錯誤處理該從哪下手較好,我對 pLog 的整個架構還不清楚.... 有沒有對於架構的相關描述文件呢? 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: WhiteCloud 於 六月 02, 2005, 12:55:44 下午 在 pLog 總站的文件中發現了一篇 MVC 的文件,就開始K 吧....
http://wiki.lifetype.net/index.php/Model-View-Controller_in_pLog 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: lss 於 六月 02, 2005, 03:47:46 下午 引用自: WhiteCloud 在 pLog 總站的文件中發現了一篇 MVC 的文件,就開始K 吧.... http://wiki.lifetype.net/index.php/Model-View-Controller_in_pLog 哇!這個很精采哦! 加油! 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: markwu 於 六月 02, 2005, 10:59:41 下午 引用自: lss 引用自: WhiteCloud 在 pLog 總站的文件中發現了一篇 MVC 的文件,就開始K 吧.... http://wiki.lifetype.net/index.php/Model-View-Controller_in_pLog 哇!這個很精采哦! 加油! 對 MVC 有興趣可以看一下 ROR (Ruby on Rails) 跟 Prado (PHP5) 這兩個 Framework, 資料目前也比較多喔。正在K書中.... :-) Mark 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: markwu 於 六月 02, 2005, 11:00:31 下午 引用自: markwu 引用自: lss 引用自: WhiteCloud 在 pLog 總站的文件中發現了一篇 MVC 的文件,就開始K 吧.... http://wiki.lifetype.net/index.php/Model-View-Controller_in_pLog 哇!這個很精采哦! 加油! 對 MVC 有興趣可以看一下 ROR (Ruby on Rails) 跟 Prado (PHP5) 這兩個 Framework, 資料目前也比較多喔。正在K書中.... :-) Mark 忘了說,如果熟 Java ,可以看 Struts ... 他的資源大概是目前最多的。 Mark 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: WhiteCloud 於 六月 03, 2005, 11:11:21 上午 引用 markwu 寫到: 引用 lss 寫到: 引用 WhiteCloud 寫到: 在 pLog 總站的文件中發現了一篇 MVC 的文件,就開始K 吧.... http://wiki.lifetype.net/index.php/Model-View-Controller_in_pLog 哇!這個很精采哦! 加油! 對 MVC 有興趣可以看一下 ROR (Ruby on Rails) 跟 Prado (PHP5) 這兩個 Framework, 資料目前也比較多喔。正在K書中.... 微笑 Mark 引用 忘了說,如果熟 Java ,可以看 Struts ... 他的資源大概是目前最多的。 Mark 非常感謝 Mark 提供這些資訊和 lss 的鼓勵 :-) Java 我經驗不多,Ruby 更是沒用過,看來我要努力的還多著呢 :-P Mark 所說的正好都有網站,列出給所有有興趣的朋友參考: http://www.rubyonrails.org/ http://www.xisc.com/ http://struts.apache.org/ 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: WhiteCloud 於 六月 03, 2005, 12:17:23 下午 連不上 MySQL 找到原因了,還是 Google 大神幫的忙 :-P
這是 Linux 的 glibc 需要升級!! 資料來源: http://penguin.im.cyut.edu.tw/mysql/manual_Installing.html#Linux-RedHat51 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: Anonymous 於 六月 08, 2005, 08:03:18 下午 之前寫了一個小程式備份全部 pLog 中的文章,這回做了小小的改版,與之前的版本有些差別:
1. 輸出文章備份時,也同時輸出作者名稱和撰寫日期。 2. 自動使用安裝 pLog 時的目錄,所以這個新程式要擺在 pLog 安裝目錄之下,好處是不用設定資料庫所在,使用者名稱....等等 3. 預設輸出檔名為 article.htm 請自行修改 4. 網誌名稱請自行修改 5. 備份完成會自動轉到輸出的靜態 HTML 檔案去。 程式如下: -------------------------------------------------------------------- <?php // 參數設定 if (!defined( "PLOG_CLASS_PATH" )) { define( "PLOG_CLASS_PATH", dirname(__FILE__)."/"); } include_once( PLOG_CLASS_PATH."config/config.properties.php" ); // 資料庫所在 $strMySQL = $config["db_host"]; // 資料庫名稱 $strDatabase = $config["db_database"]; // 資料庫使用者名稱 $strUserName = $config["db_username"]; // 資料庫密碼 $strPassword = $config["db_password"]; // plog 的資料表字首 $strPlogPrefix = $config["db_prefix"]; // 輸出路徑,最後面要加斜線(目錄要設定為可讀寫,例如777) $strArticleIndexPath = PLOG_CLASS_PATH; // 輸出備份檔名 $strOutput = "article.htm"; // 網誌名稱 $strBlogName = "White Cloud's Blog"; // 聯結資料庫 $link = mysql_connect($strMySQL, $strUserName, $strPassword) or die("mysql_connect() failed."); mysql_select_db($strDatabase, $link) or die("mysql_select_db() failed."); // 放文章的變數 $strFileContent = <<<EOT <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh_TW" lang="zh_TW" dir="ltr"> <head> <title>$strBlogName</title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> </head> <body><center> <font size=6 color=green>White Cloud's Blog</font> <br>目前暫時連結不上資料庫,這是備份頁面<br><br> EOT; $strTableArticleText = $strPlogPrefix."articles_text"; $strTableArticle = $strPlogPrefix."articles"; $strTableUsers = $strPlogPrefix."users"; $sql = "select article_id,topic,text,user,date from $strTableArticleText,$strTableArticle,$strTableUsers where $strTableArticleText.article_id = $strTableArticle.id and $strTableUsers.id = $strTableArticle.user_id order by article_id desc"; $r = mysql_query($sql); while ($row = mysql_fetch_object($r)) { $strArticleID = $row->article_id; $strTopic = $row->topic; $strText = $row->text; $strAuthor = $row->user; $strDate = $row->date; $strDate = substr($strDate,0,4)."/".substr($strDate,4,2)."/".substr($strDate,6,2)." ".substr($strDate,8,2).":".substr($strDate,10,2).":".substr($strDate,12,2); $strFileContent = $strFileContent.'<table width="80%" border="1"><tr><td>'; // $strFileContent = $strFileContent.$strArticleID; // $strFileContent = $strFileContent."<br>"; $strFileContent = $strFileContent.'<font size=5><b>'; $strFileContent = $strFileContent.$strTopic; $strFileContent = $strFileContent.'</b></font>'; $strFileContent = $strFileContent."<br>"; $strFileContent = $strFileContent.$strAuthor; $strFileContent = $strFileContent." "; $strFileContent = $strFileContent.$strDate; $strFileContent = $strFileContent."<br><br>"; $strFileContent = $strFileContent.$strText; $strFileContent = $strFileContent."<br><br>"; $strFileContent = $strFileContent."<td><tr><table><br><br>"; } $strFileContent = $strFileContent = $strFileContent."All content copyright (c) 2004 $strBlogName"; $strFileContent = $strFileContent = $strFileContent."</center></body></html>"; // 輸出成為 HTML //echo $strFileContent; $fp = fopen($strArticleIndexPath.$strOutput, "w"); fputs($fp, $strFileContent); fclose($fp); header("Location: $strOutput"); ?> 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: WhiteCloud 於 六月 09, 2005, 01:31:07 上午 可以用這個做出『本站文章全部打包』的功能,讓網友可以存檔回去慢慢看。
此時,程式最後一行 header("Location: $strOutput"); 如果改為 echo "OK"; 這樣輸出後就不會轉向靜態頁面(這支程式由站長執行即可,其他網友只需要靜態頁面)。 然後在適當的模板中加入靜態 HTML 的超連結即可。 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: markwu 於 六月 10, 2005, 10:36:14 上午 引用自: WhiteCloud 可以用這個做出『本站文章全部打包』的功能,讓網友可以存檔回去慢慢看。 此時,程式最後一行 header("Location: $strOutput"); 如果改為 echo "OK"; 這樣輸出後就不會轉向靜態頁面(這支程式由站長執行即可,其他網友只需要靜態頁面)。 然後在適當的模板中加入靜態 HTML 的超連結即可。 WhiteCloud,你可以試用 pLog 的 API 來做 export 喔,我保證會更麻煩,但是你會學到不少喔。 你可以參考一下: http://forums.lifetype.net/viewtopic.php?t=2421&highlight=articles http://forums.lifetype.net/viewtopic.php?t=2264&highlight=articles 加油! Mark 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: WhiteCloud 於 六月 10, 2005, 11:29:21 上午 引用 WhiteCloud,你可以試用 pLog 的 API 來做 export 喔,我保證會更麻煩,但是你會學到不少喔。 你可以參考一下: http://forums.lifetype.net/viewtopic.php?t=2421&highlight=articles http://forums.lifetype.net/viewtopic.php?t=2264&highlight=articles 加油! Mark 多謝 Mark :-) API 我還不熟,所以才會用最簡單的方法完成我要的東西。有範例可循太棒了,我就找個時間來練習 API 的使用,做出同樣功能 :-) 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: WhiteCloud 於 六月 25, 2005, 11:38:33 上午 感謝 Mark 提供的資料,我使用 pLog 內建的物件來重寫備份程式。
程式變動: 改成呼叫 pLog 的 Article 類別物件 可設定網誌編號來備份不同 blog 取消顯示作者名 ------------------------------------------------------------------------ <?php if (!defined( "PLOG_CLASS_PATH" )) { define( "PLOG_CLASS_PATH", dirname(__FILE__)."/"); } include_once( PLOG_CLASS_PATH."config/config.properties.php" ); include_once( PLOG_CLASS_PATH."class/dao/articles.class.php" ); // plog 的資料表字首 $strPlogPrefix = $config["db_prefix"]; // 輸出路徑,最後面要加斜線(目錄要設定為可讀寫,例如777) $strArticleIndexPath = PLOG_CLASS_PATH; // 輸出備份檔名 $strOutput = "article.htm"; // 網誌名稱 $strBlogName = "White Cloud's Blog"; // 網誌編號 $strBlogNumber = "1"; // 放文章的變數 $strFileContent = <<<EOT <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh_TW" lang="zh_TW" dir="ltr"> <head> <title>$strBlogName</title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> </head> <body><center> <font size=6 color=green>$strBlogName </font> <br>這是備份頁面,歡迎存檔慢慢欣賞 :-)<br><br> EOT; // $query = "SELECT * FROM plog_articles As a, plog_articles_text As at WHERE a.id=at.article_id AND a.blog_id = 1 ORDER BY a.date DESC"; $strTableArticleText = $strPlogPrefix."articles_text"; $strTableArticle = $strPlogPrefix."articles"; $strTableUsers = $strPlogPrefix."users"; $sql = "select * from $strTableArticleText,$strTableArticle where $strTableArticleText.article_id = $strTableArticle.id and $strTableArticle.blog_id = $strBlogNumber order by article_id desc"; $articles = new Articles(); $result = $articles->getBlogArticlesByQuery( $sql ); foreach( $result as $article ) { $strTopic = $article->getTopic(); $strText = $article->getText(); //$strAuthor = $article->getUser(); $strDate = $article->getDate(); // 由於改用 MySQL 4.1 的關係,取消此行 //$strDate = substr($strDate,0,4)."/".substr($strDate,4,2)."/".substr($strDate,6,2)." ".substr($strDate,8,2).":".substr($strDate,10,2).":".substr($strDate,12,2); $strFileContent = $strFileContent.'<table width="80%" border="1"><tr><td>'; // $strFileContent = $strFileContent.$strArticleID; // $strFileContent = $strFileContent."<br>"; $strFileContent = $strFileContent.'<font size=5><b>'; $strFileContent = $strFileContent.$strTopic; $strFileContent = $strFileContent.'</b></font>'; $strFileContent = $strFileContent."<br>"; //$strFileContent = $strFileContent.$strAuthor; //$strFileContent = $strFileContent." "; $strFileContent = $strFileContent.$strDate; $strFileContent = $strFileContent."<br><br>"; $strFileContent = $strFileContent.$strText; $strFileContent = $strFileContent."<br><br>"; $strFileContent = $strFileContent."<td><tr><table><br><br>"; } $strFileContent = $strFileContent = $strFileContent."All content copyright (c) 2004 $strBlogName"; $strFileContent = $strFileContent = $strFileContent."</center></body></html>"; // 輸出成為 HTML //echo $strFileContent; $fp = fopen($strArticleIndexPath.$strOutput, "w"); fputs($fp, $strFileContent); fclose($fp); header("Location: $strOutput"); //echo "OK"; ?> 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: markwu 於 六月 27, 2005, 12:01:40 上午 這一個真的改的很棒。
Mark 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: WhiteCloud 於 六月 27, 2005, 02:49:40 下午 引用 這一個真的改的很棒。 Mark 感謝 Mark 鼓勵 :-) 其實還有很多是我需要努力的。:-P WhiteCloud 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: Stud 於 八月 05, 2005, 09:18:44 下午 感謝你的教學,幫助很大,有了初步概念.
這種方式是抓下所有的文章輸出,如果我 是想在首頁(home.htm)調用,只需最新 發表的10篇日誌,跟10篇迴響,那應該修 改哪裡? 謝謝. 主題: 聯結不到資料庫時如何轉向其他備份頁面 作者: WhiteCloud 於 八月 06, 2005, 07:35:43 上午 引用 是想在首頁(home.htm)調用,只需最新 發表的10篇日誌,跟10篇迴響,那應該修 改哪裡? 提供一個方向: 參考 API 中有關 Article 和 Comments 的部分,將輸出整合到 home.htm裡面。 我的程式中你可以改用回圈的方式只輸出十筆文章資料,就得到最新 10 篇日誌。 回響我尚未研究,如果你看的懂 API 或是資料庫格式就 OK 了。 :-) 近期文章是預設功能,近期迴響有外掛,但你的需求要整合輸出 HTML 所以大概沒有現成的,不過也難說,搞不好已經早有人寫過了 :-P 也可去國外站台找找... White Cloud 主題: Re: 聯結不到資料庫時如何轉向其他備份頁面 作者: markwu 於 十月 03, 2005, 01:37:12 下午 我可以先把我再寫的 backup/restore 寄給你, export 部分已經全部完成了!這樣你研究起來應該比較快吧!呵呵!包含 export 成 rss 與 mt 格式。
Mark 主題: Re: 聯結不到資料庫時如何轉向其他備份頁面 作者: junyang296 於 十月 22, 2005, 05:44:43 下午 我可以先把我再寫的 backup/restore 寄給你, export 部分已經全部完成了!這樣你研究起來應該比較快吧!呵呵!包含 export 成 rss 與 mt 格式。 Mark 能不能随便寄给我一份啊?cailylove@gmail.com,谢谢啊。 主題: Re: 聯結不到資料庫時如何轉向其他備份頁面 作者: soarwind 於 十月 20, 2006, 09:16:32 上午 請問一下要去修改哪一個當檔案的原始碼呢?
|