ユーティリティ

2017年08月

- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

キーワード検索

キーワード検索フォーム
キーワード

ユーザー

  • cccのアバター

新着画像

過去ログ

Twitter

Twilogを見る

Feed

エントリー

freoをPHP5.5.x、5.6.xで使用する場合の注意点

freoのバージョンが1.19.3から更新されなくなって久しくなり、その間にどんどんwebの環境は進化しています。 しかし残念ながらfreoの 公式HPでは開発環境は5.4.x のままです。

もし、PHPのバージョンが5.5.x、5.6.xのサーバーを使用していて以下のエラーが発生する場合は、その対処方法を上げておきますので試してみてください(エラーを表示させない設定をしていたり、サーバーの設定によっては上記のバージョンを使用していてもエラー表示が出ない場合があります)。
※PHP7についてはSmarty3(Smarty3.1.28でPHP7に対応済み)に対応するなど大幅にfreoを改造しないと動作しないようです。

1) mbstring.internal_encodingに関するエラーが表示される場合

セットアップ時などに

Deprecated: ini_set(): Use of mbstring.internal_encoding is deprecated in /freo/libs/freo/initialize.php on line 12

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /freo/libs/freo/initialize.php:12) in /freo/libs/freo/common.php on line 37

といったエラーが出る場合があります。原因はmbstring.internal_encodingがPHP5.6で非推奨になったためです。

これを解消するには、libs/freo/initialize.php の12行目あたりにある

ini_set('mbstring.internal_encoding', 'UTF-8');

を削除してアップします(mbstring.internal_encodingではなく11行目にあるdefault_charsetを使用)。

【2016/6/27追記】
併せて、libs/freo/initialize.php の14~15行目にある

ini_set('mbstring.input_encoding', 'pass');
ini_set('mbstring.output_encoding', 'pass');

も同様にPHP5.6から非推奨になったので削除して下さい。

2) preg_replace()に関するエラーが表示される場合

画面の上の方に

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /freo/libs/smarty/Smarty_Compiler.class.php on line 270

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /freo/libs/smarty/Smarty_Compiler.class.php on line 270

といったエラーが出る場合があります。原因はpreg_replace()のe修飾子がPHP5.5から非推奨になったためです。

これを解消するには、freoに同梱されているSmartyのバージョンを2.6.27から2.6.28以上(Smarty2.6.28でPHP5.5に対応済み)にバージョンアップする必要があります(本来はpreg_replace()の代わりにpreg_replace_callback()を使用する必要があるのですが、とりあえず回避するためのオプションが装備されているようです)。

バージョンアップの方法は、SmartyのDownloadページ の「Smarty 2 latest」にあるリンクの先にあるDownloadページから「Source code (zip)」をダウンロードして解凍し、Smarty-2.6.xx/libs/ の中にあるすべてのフォルダとファイルをfreoの libs/smarty/ のものと差し替えてアップします。

【2016/7/19追記】 ⇒ さらに必要ならば...
さらにPHP7では、回避のオプションも効かなくなります(というかSmarty2自体対応していないので、freoのphpファイルとテンプレートファイルをSmarty3仕様に改造する必要があります)。
preg_replace()のe修飾子の使用している箇所として、libs/freo/transfer.php の26~28行目にある

$data = preg_replace('/href="(([^"¥¥¥¥]|¥¥¥¥.)*)"/e', '"href=¥"".freo_transfer_link("$1")."¥""', $data);
$data = preg_replace('/src="(([^"¥¥¥¥]|¥¥¥¥.)*)"/e', '"src=¥"".freo_transfer_link("$1")."¥""', $data);
$data = preg_replace('/(<form [^>]+>)/e', 'freo_transfer_form("$1")', $data);

の部分を

$data = preg_replace_callback('/href="(([^"¥¥¥¥]|¥¥¥¥.)*)"/', function($m) { return "href=¥"".freo_transfer_link($m[1])."¥"";}, $data);
$data = preg_replace_callback('/src="(([^"¥¥¥¥]|¥¥¥¥.)*)"/', function($m) { return "src=¥"".freo_transfer_link($m[1])."¥"";}, $data);
$data = preg_replace_callback('/(<form [^>]+>)/', function($m) { return freo_transfer_form($m[1]);}, $data);

に変更(緑字赤字に)して下さい。
参考:PHPのpreg_replace()で「The /e modifier is deprecated」となる場合の対処方法

3)HTML_Emoji(絵文字の変換)を使用している場合【2016/7/24追記】

使用している人は少ないかもしれませんが...

Deprecated: Non-static method HTML_Emoji::getInstance() should not be called statically in /freo/libs/freo/pictogram.php on line 45

Deprecated: Non-static method HTML_Emoji::_detectCarrier() should not be called statically in /freo/libs/HTML/Emoji.php on line 135

Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /freo/libs/freo/pictogram.php on line 84

Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in //freo/libs/freo/pictogram.php on line 55

Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /freo/libs/freo/pictogram.php on line 56

といったエラーが出る場合があります。原因は2)と同じくpreg_replace()のe修飾子がPHP5.5から非推奨になったためとPHP5.6ではstaticではないメソッドを直接呼び出したためにエラーが出ているようです。

これを解消するには、2)と同様にfreoに同梱されているSmartyのバージョンを2.6.27から2.6.28以上にバージョンアップした上で、
libs/freo/pictogram.php の30行目の

$data = preg_replace('/¥[e:([^¥]]+)¥]/e', '$translations[pack("H*","$1")]', $data);

の部分を

$data = preg_replace_callback('/¥[e:([^¥]]+)¥]/', function($m) { return $translations[pack("H*",$m[1])];}, $data);

に、 同じく55~56行目の

$data = preg_replace('/(value="([^"¥¥¥¥]|¥¥¥¥.)*")/e', 'freo_pictogram_unescape("$1","text")', $data);
$data = preg_replace('/(<textarea [^>]+>[^<]+<¥/textarea>)/e', 'freo_pictogram_unescape("$1","text")', $data);

の部分を

$data = preg_replace_callback('/(value="([^"¥¥¥¥]|¥¥¥¥.)*")/', function($m) { return freo_pictogram_unescape($m[1],"text");}, $data);
$data = preg_replace_callback('/(<textarea [^>]+>[^<]+<¥/textarea>)/', function($m) { return freo_pictogram_unescape($m[1],"text");}, $data);

に、 同じく84行目の

return preg_replace('/<img class="emoji" src="([^"]+)" alt="" width="12" height="12" ¥/>/e', '"[E:".basename("$1",".gif")."]"', $data);

の部分を

return preg_replace_callback('/<img class="emoji" src="([^"]+)" alt="" width="12" height="12" ¥/>/', function($m) { return "[E:".basename($m[1],".gif")."]";}, $data);

に、 同じく93行目の

return preg_replace('/¥[E:([^¥]]+)¥]/e', '"[e:".basename("$1",".gif")."]"', $data);

の部分を

return preg_replace_callback('/¥[E:([^¥]]+)¥]/', function($m) { return "[e:".basename($m[1],".gif")."]";}, $data);

にそれぞれ変更(緑字赤字に)して下さい。

また、libs/freo/pictogram.php の45行目と73行目の

$emoji = HTML_Emoji::getInstance();

の2ヶ所の部分を

$HTML_Emoji = new HTML_Emoji();
$emoji = $HTML_Emoji->getInstance();

に、 Emoji.phpの135行目の

$carrier = HTML_Emoji::_detectCarrier();

の部分を

$HTML_Emoji = new HTML_Emoji();
$carrier = $HTML_Emoji->_detectCarrier();

にそれぞれ変更(緑字赤字に)して下さい。
参考:PHP5.6での【Deprecated: Non-static method】エラーの対応
これで使えるかどうかはわかりませんが、エラーの表示はなくなるようです。

ページ移動

関連エントリー

コメント

  • コメントはまだありません。

コメント登録

  • コメントを入力してください。
  • 一旦登録したコメントは、あとで編集できませんのでご注意下さい。
登録フォーム
名前
メールアドレス
URL
コメント(コメント本文の装飾について
閲覧制限
※基本的には「全体に公開」されますが、内容によっては管理人の方で公開を制限する場合がございますので、その旨ご了承下さい。
freoをカタカナ3文字で入力してください(スパム対策)