Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2011-02-14 11:00:44

kotorisan
メンバー
登録日: 2007-01-17
投稿: 49

Re: 機能改善の要望(V3.62):バックアップ

一部のプラグインでアップデート時に
追加テーブルを作成し忘れなど
何らかの理由で
getTableList()に載っていてもテーブルが無い場合があります。

そういう場合のバックアップファイルは、
エラーがプリントされて、構文エラーになっていますので
手動修正しない限りバックアップファイルからのリストアができません。

そこで、コードを修正する必要あります
「エラーを書き出さないようにする」か「コメント化する」必要があります。

ob_get_contents()で内容があれば #付けて
はき出すのもいいでしょうけど、
面倒なので下記のコードでは省きました。

テーブルを確認するコードが必要です。
sql_queryが大きなお世話でかってにプリントするようになっていますので
今回は、面倒なのでバッファリングして、エラーをはかないようにすることで対処しました。
全テーブル出力完了後に管理操作履歴にテーブルエラーを書き出します。

以前のコメント内の部分の修正も含めています

Index: nucleus-3-62/nucleus/libs/backup.php
===================================================================
--- nucleus-3-62/nucleus/libs/backup.php	(リビジョン 1148)
+++ nucleus-3-62/nucleus/libs/backup.php	(作業コピー)
@@ -45,6 +45,8 @@
 	function do_backup($gzip = 0) {
 		global $manager;
 		
+		$this->error_logs = array();
+		
 		// tables of which backup is needed
 		$tables = array(
 						sql_table('actionlog'),
@@ -130,6 +132,14 @@
 			echo "\x1f\x8b\x08\x00\x00\x00\x00\x00".substr($contents, 0, strlen($contents) - 4).$this->gzip_PrintFourChars($Crc).$this->gzip_PrintFourChars($Size);
 		}
 		
+		ob_start();
+		if (count($this->error_logs)>0)
+		 {
+		    $lebel = 1;
+		    if (defined('ERROR')) $lebel = constant('ERROR');
+		    addToLog($lebel, implode('\n', $this->error_logs));
+		 }
+		ob_end_clean();
 		exit;
 	
 	}
@@ -140,7 +150,8 @@
 	  * ($tablename and $key are filled in by array_walk)
 	  */
 	function _backup_dump_table($tablename, $key) {
-	
+		if (strlen($tablename) <= 0) return ;
+		
 		echo "#\n";
 		echo "# " . _BACKUP_BACKUPFILE_TABLE_NAME . $tablename . "\n";
 		echo "#\n";
@@ -159,7 +170,16 @@
 	
 		// add command to drop table on restore
 		echo "DROP TABLE IF EXISTS $tablename;\n";
+		ob_start();
 		$result = sql_query("SHOW CREATE TABLE $tablename");
+		$msg = ob_get_contents();
+		ob_end_clean();
+		if (!$result)
+		{
+			$this->error_logs[] = $msg;
+		    return;
+		}
+		
 		$create = sql_fetch_assoc($result);
 		echo $create['Create Table'];
 		echo ";\n\n";
@@ -173,12 +193,13 @@
 	
 		// add command to drop table on restore
 		echo "DROP TABLE IF EXISTS $tablename;\n";
-		echo "CREATE TABLE $tablename(\n";
+		$result = mysql_query("SHOW FIELDS FROM $tablename");
+        if (!$result) { return ; }
 	
 		//
 		// Ok lets grab the fields...
 		//
-		$result = mysql_query("SHOW FIELDS FROM $tablename");
+		echo "CREATE TABLE $tablename(\n";
 		$row = mysql_fetch_array($result);
 		while ($row) {
 	
@@ -270,7 +291,10 @@
 		//
 		// Grab the data from the table.
 		//
+		ob_start();
 		$result = sql_query("SELECT * FROM $tablename");
+		ob_end_clean ();
+		if (!$result) return;
 	
 		if(sql_num_rows($result) > 0)
 			echo "\n#\n# " . sprintf(_BACKUP_BACKUPFILE_TABLEDATAFOR, $tablename) . "\n#\n";

オフライン

#2 2011-02-15 21:13:31

きゃしゃ
メンバー
From: 北河内
登録日: 2007-12-15
投稿: 351

Re: 機能改善の要望(V3.62):バックアップ

kotorisan さんの発言:

sql_queryが大きなお世話でかってにプリントするようになっていますので

いやまったく。
おっしゃるとうりだわ~

kotorisan さんの発言:

バッファリングして、エラーをはかないようにすることで対処しました。

[size=150:qhb5axte]こんな手があったか!

オフライン

#3 2011-02-16 12:52:16

kotorisan
メンバー
登録日: 2007-01-17
投稿: 49

Re: 機能改善の要望(V3.62):バックアップ

修正してもらえるかは別として、とりあえず、投稿しておきました。
http://forum.nucleuscms.org/viewtopic.php?t=20301

追記
本家は対応する気がないようです。
本家ではプラグインは全能の神様?

プラグインが完璧とは限らないので
必要な方は、パッチはご自分で当ててください。

なにか問題があった場合には
操作履歴にテーブルの構造取得時のエラーが書き出されますので
それを手がかりに欠損したテーブルや問題を解決できると思います。

オフライン

#4 2011-02-21 12:44:32

kotorisan
メンバー
登録日: 2007-01-17
投稿: 49

Re: 機能改善の要望(V3.62):バックアップ

操作履歴に残るように サンプルコード 差し替えました。

オフライン

#5 2011-02-21 17:07:09

Mocchi
メンバー
登録日: 2006-11-19
投稿: 438

Re: 機能改善の要望(V3.62):バックアップ

kotorisan さんの発言:

追記
本家は対応する気がないようです。
本家ではプラグインは全能の神様?

うーん、なかなか難しいところですね。

ftruscotの返信を要約すると「リリースコードにマージするなら、もっと多くの人のレビューと議論を経てからになるし、マージ後のメンテナンスをする人も必要。もっと手っ取り早く実現することを望むなら、プラグインに実装して下さい。」といったところかと。妥当な判断と思います。

今回のような提案は、本家の開発チームの中で活動しながらの実装を目指すのが流儀かと思います。その面倒くささは理解できるのですが、十分な手続きを伴わない修正をリリースに含めるというのは、避けた方がよいことのひとつかと思います。ここらへんは、オープンソースであろうがなかろうが、変わらないことかと思います。

私も、今月にいわゆる本家の開発チームに合流する予定だったのですが、(不幸なことに)日本プロジェクトのセキュリティに関わる雑務に追われていて、合流できてません。合流した後も、マルチバイト処理を本家に実装する作業で手一杯かと思います。

オフライン

#6 2011-02-22 03:24:11

ftruscot
メンバー
登録日: 2009-01-21
投稿: 28

Re: 機能改善の要望(V3.62):バックアップ

Again, there is no lack of interest in your suggestions, kotorisan. My response in the english thread for this suggestion was simply a request for clarification of what bugs were being fixed by the changes. I made a guess on each change and asked for your verification.

You may be the best coder in the world, but until you establish a relationship of trust and understanding with this community, as with any other, you must reasonably expect to be questioned and tried out a little. Even long-time contributors should expect the community to ask for explanation or justification of changes and recommendations. It's done respectfully and productively. It's just how we operate.

オフライン

Board footer