サーバ上でインストールする際、STEP4でエラーが起きて、インストールを完了できない場合が稀にあります。
また、フォームのメールのチェックやメール送信で、正しいメールアドレスでもエラー扱いになる場合があります。
発生するタイミングと環境
- インストール時のSTEP4でエラーが起きて、インストール作業を完了できないとき
- インストール時のユーザー作成時に正しいメールでもエラー扱いになってしまい、管理者ユーザーが生成されていない状態になる
- フォームのメールのチェックやメール送信で、正しいメールアドレスでもエラー扱いになるとき
- baserCMS 3.0.1 以降で上記症状が起きる
環境
- 大塚商会: アルファメールプレミア: http://www.alpha-prm.jp/
- PHP 5.3.3
- baserCMS 3.0.5
原因
PCREのバージョンが低いときに起きます。
PCRE (Perl Compatible Regular Expressions)
PCRE Library Version 6.6 06-Feb-2006
上記バージョンの場合、正規表現で\p{L}などが使えない状態にあります。
PCRE (Perl Compatible Regular Expressions)
PCRE Library Version 8.32 2012-11-30
上記バージョンだと問題ないようです。(一例)
対策
- /lib/Cake/Utility/Validation.php を app/Utility/Validation.php へコピーする
- /app/Utility/Validation.php を以下のように変更する
protected static $_pattern = array(
//'hostname' => '(?:[_\p{L}0-9][-_\p{L}0-9]*\.)*(?:[\p{L}0-9][-\p{L}0-9]{0,62})\.(?:(?:[a-z]{2}\.)?[a-z]{2,})'
'hostname' => '(?:[_a-z0-9][-_a-z0-9]*\.)*(?:[a-z0-9][-a-z0-9]{0,62})\.(?:(?:[a-z]{2}\.)?[a-z]{2,})'
);
- /app/Utility/Validation.php の public static function email() 内を以下のように変更する
//$regex = '/^[\p{L}0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[\p{L}0-9!#$%&\'*+\/=?^_`{|}~-]+)*@' . self::$_pattern['hostname'] . '$/ui';
$regex = '/^[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@' . self::$_pattern['hostname'] . '$/i';
baserCMS 3.0.5 以降の場合
CakePHPのバージョンアップにより、上記対応に加えて以下の対応も必要です。
- /lib/Cake/Network/Email/CakeEmail.php を /app/Network/Email/CakeEmail.php へコピーする
- /app/Network/Email/CakeEmail.php を下記のように変更する
//protected $_emailPattern = '/^((?:[\p{L}0-9.!#$%&\'*+\/=?^_`{|}~-]+)*@[\p{L}0-9-.]+)$/ui';
protected $_emailPattern = null;
更に正常に稼働しない場合があります
サーバ上でインストール作業を完了した場合、STEP5画面にcss、img、jsが適用されない状態で表示されることがあります。
【現在判っている点】
/app/webroot/内にテーマフォルダ等が存在する配置では、css、img、jsが読み込まれず、画面が正常に表示できません。
/app/webroot/ 内のファイル群をドキュメントルート直下に移動した配置に変更すると、正常な動作が可能です。
配置変更後は以下の構成になります。
- /app
- /files ・・・/app/webroot にあったもの
- /lib
- /theme ・・・/app/webroot にあったもの
- .htaccess ・・・/app/webroot にあったもの
- index.php ・・・/app/webroot にあったもの
なんでだろ?(´・ω・)
アルファメールプレミアでのインストール留意事項
webroot内のファイル群の配置を、ドキュメントルート直下型に変更してからサーバにアップロードし、インストール作業を行うのが「吉」っぽいですね。
参考情報
http://php.net/manual/ja/reference.pcre.pattern.syntax.php#75339
http://phpexcel.codeplex.com/discussions/238547
http://basercms.net/manuals/3/base/1.html