NetCommons開発TIPS

NC1.xから2.4.0.xへの移行

こんにちは。牟田口です。
NC1.xから2.4.0.xへの移行をする機会があったので、
メモを残しておきます。
 

--- 環境

 
windows8.1
XAMPPlite 1.6.2
 

--- NCMigration1.0.3を使う

 
Get NCMigration1.0.3 for Windows
 

--- 準備NC1

 
・NC1.xは NetCommons1.1.4 にする
・サイト閉鎖中にする
 

--- 準備NC2

 
・NetCommons2.4.0.0.zipを用意する
・NetCommons2.4.0.0を同じサーバの別ディレクトリにインストール
・サイト閉鎖中にする
 

--- 準備NCMigration

 
・NCMigration1.0.3を同じサーバの別ディレクトリに設置
 

--- サイト構成

 
NC1         ⇒ http://localhost/
NC2         ⇒ http://localhost/nc2/
NCMigration ⇒ http://localhost/NCMigration/
 

--- データ移行

 
http://localhost/NCMigration/
・「同意する>>」押下
 
http://localhost/NCMigration/index.php?action=entry
 
NetCommons1.1ルートディレクトリ:C:/Projects/xampp_lite/htdocs
NetCommons1.1管理者ログインID:(NC1の管理者ID)
NetCommons1.1管理者パスワード:(NC1のパスワード)
 
NetCommons2.4ルートディレクトリ:C:/Projects/xampp_lite/htdocs/nc2
NetCommons1.1管理者ログインID:(NC2の管理者ID)
NetCommons1.1管理者パスワード:(NC2のパスワード)
 
「設定内容の確認>>」押下
 
http://localhost/NCMigration/index.php
全てOKなら
「データ移行開始>>」押下
 

--- エラー1

 
「データ移行開始>>」押下後、下記URLになって白画面のまま動かない。
http://localhost/NCMigration/index.php?action=result
 

--- 対応1

 
・NCMigration1.0.3
 \NCMigration1.0.3\templates_c\ にsmartyの古いファイルが残っていて、マイグレーション実行できなかった。
 ⇒ 古いファイルを消せば解消した。
 

--- エラー2

 
データ移行中に下記エラーで止まる。
 
INSERT INTO netcommons2_pages_users_link(`room_id`,`user_id`,`role_authority_id`,`createroom_flag`,`insert_time`,`insert_site_id`,`insert_user_id`,`insert_user_name`,`update_time`,`update_site_id`,`update_user_id`,`update_user_name`) VALUES(?,?,?,?,?,?,?,?,?,?,?,?);:Array ( [room_id] => 9615 [user_id] => 6d2ec6f4f918347aef5cfb189bfedcd8d85ff44d [role_authority_id] => 4 [createroom_flag] => 0 [insert_time] => 20150327233503 [insert_site_id] => 0621068e454f23fc44c714e8eaef6f27f41b2662 [insert_user_id] => 6f08a38bcb67340f22bb7122d5e4ebdbe8c4c58d [insert_user_name] => XX5200 [update_time] => 20150327233503 [update_site_id] => 0621068e454f23fc44c714e8eaef6f27f41b2662 [update_user_id] => 6f08a38bcb67340f22bb7122d5e4ebdbe8c4c58d [update_user_name] => HA5217 ) :Duplicate entry '9615-6d2ec6f4f918347aef5cfb189bfedcd8d85ff44d' for key 1:C:\projects\xampp_lite\htdocs\NCMigration\model\utility.php:393
 

--- 対応2

 
NC2のテーブル「netcommons2_pages_users_link」で本来重複しないはずのデータが重複していた。
エラーメッセージ「Duplicate entry '9615-6d2ec6f4f918347aef5cfb189bfedcd8d85ff44d' for key 1」
 
移行元のNC1テーブル「nc1_rooms_members_link」を確認した処、ルーム参加データに重複があったため、
重複データを削除した処、解消した。
 

--- エラー3

 
移行が完了したけど、日本語が文字化けしていた。
 

--- 対応3

 
本来、MYSQL側の文字コード設定を EUC になっていれば文字化けしない。
 
しかし、手元の古いxamppのmysqlに設定が反映されないため、
暫定対応で、NC1のDB接続は、SET NAMES 'ujis' を強制的に行うようにした。
 
\NCMigration\model\database.php
 
/**
 * NC1データベースコネクションオブジェクト設定
 *
 * @param string $dsn データソース名称(dbType://user:password@host/dbName?new)
 * @return void
 * @access public
 */
function setNC1ADOConnection($dsn)
{
	$dsn = $this->addDSNNew($dsn);
	$this->nc1ADOConnection = NewADOConnection($dsn);
	if (!empty($this->nc1ADOConnection)) {

		// 追記箇所
		$adoConnection = $this->nc1ADOConnection;
		if (strpos($adoConnection->dataProvider, "mysql") === 0) {
			$serverInfo = $adoConnection->ServerInfo();
			if (floatval($serverInfo["version"]) >= 4.01) {
				$adoConnection->Execute("SET NAMES 'ujis';");
			}
		}

		$this->nc1ADOConnection->SetFetchMode(ADODB_FETCH_ASSOC);
	}
}
 
これで文字化けは解消した。

NetCommons2のFileUploadフィルター調査

こんにちは。牟田口です。

よくアップロード処理の開発でハマるので、FileUploadフィルターについて調べてみた。

### maple.ini

 
[FileUpload]

name = file_csv             ← input type=file属性のname名称。実際のテンプレートに合わせる
allow_extension = "true"    ← configテーブルの許す拡張子の一覧から拡張子チェックを行うかどうかのフラグ
maxsize = ""                ← 最大ファイル容量=無制限
stopper = "false"           ← 無指定だと trueになる。
                              true:FileUploadフィルタ内で、MIME-Typeチェック、拡張子チェック等行う。チェックエラーの場合、画面に出るエラーメッセージは一律「ファイルアップロードに失敗しました」
                              false:ファイルの最大ファイル容量チェック、ルームの合計最大ファイル容量チェックのみ行う。

### stopper = "true"チェック

 
 
 

### stopper = "false"でもチェック

 
ファイルの最大ファイル容量チェック
 
ルームの合計最大ファイル容量チェック
 

### 参考

 
 

### おまけ  allow_attachment

 

[FileUpload]
;allow_attachment = _ALLOW_ATTACHMENT_IMAGE

基本、指定しなくて良い。
指定しないと、allow_attachment = _ALLOW_ATTACHMENT_ALL として扱われる。

maple.iniで allow_attachment を設定すると、ここに入る。
 
//configの権限でアップロード可能かどうかを取得
$allow_attachment_flag = $session->getParameter("_allow_attachment_flag");
//maple.iniで allow_attachment の定数取得
$attributes_allow_attachment_flag = $this->constantDef($attributes["allow_attachment"]);
 
 
何等かエラー有り(PHP自体が感知するエラーは発生していない場合)の時
  • configのアップロード権限が、_ALLOW_ATTACHMENT_IMAGE
  • maple.iniの allow_attachment _ALLOW_ATTACHMENT_ALL
だとエラーにしてた。
理由はよくわからんのです。

ではでは。

NetCommons2で開発中はsmartyのコンパイルを自動にする

こんにちは。牟田口です。

忘れるのでメモ。
NetCommons2で使っているテンプレートエンジン smarty。
smartyは一度、phpに変換をするコンパイルが必要。

通常は、モジュール管理からモジュールをアップデートすると、
対象モジュールのsmartyがコンパイルされる。

開発中は、smartyテンプレートを変えたら、すぐに画面に反映して欲しいので、自動コンパイルさせたい。
NetCommons2だと、下記パラメータにすればOK

\html\webapp\config\maple.inc.php

define('SMARTY_FORCE_COMPILE',     true);


maple.inc.php - github
https://github.com/netcommons/NetCommons2/blob/e89bfb7c3e9253c07c34ac16999b44428473b51e/html/webapp/config/maple.inc.php#L55

本番リリース時は、パフォーマンスが落ちるので、false を推奨。

ではでは。

PHP5.6 をremi からインストールしたら、SimpleXML は明示的にインストール

こんにちは。
永原です。

PHP5.6 をremi からインストールしたら、SimpleXML は明示的にインストールすること。

# yum install --enablerepo=remi --enablerepo=remi-php56 php-xml

これを忘れていて、phpExcel でコケました。

[追記]
php-xml がインストールされていないと、検索モジュールでコケました。
検索の初期画面が出ない現象なので、ちょっとはまりました。

MySQL5.6 はSTRICT_TRANS_TABLES が初期値

こんにちは。
永原です。

MySQL5.6 はSTRICT_TRANS_TABLES が初期値で設定されているんですよね。
my.cnf にしっかりと。

NetCommons2.4.2.1 では、まだ汎用データベースのデータベース作成アクションにバグがあり、この状態ではコケてしまいます。
(他にどこにバグがあるかはわからない)

ということで、以下の通り、MySQL の設定を変更して対応しています。

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
sql_mode=NO_ENGINE_SUBSTITUTION

以上