エントリー
freoをPHP5.5.x、5.6.x、7.xで使用する場合の注意点
freoのバージョンが1.19.3から更新されなくなって久しくなり、その間にどんどんwebの環境は進化しています。 しかし残念ながらfreoの 公式HPでは開発環境は5.4.x のままです。⇒2017/09/03にver1.20.0が公開されました。
freo1.20.0がPHP7で使用できたというツィートが散見されていたので、独断で調べてみたところ、
- Smarty2.6.29以上⇒freo1.20.0以上であればSmarty2.6.30が同梱されているのでOK
- php.ini の設定を
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
にする
であれば、PHP7以上で使用できるようです。
まだPHP7環境では動作確認していないけど。_(:3 」∠ )_
— refirio (@refirio) 2017年9月14日
※作者のないとさんはまだ確認されていないので、使用は自己責任でお願いします。
【2017/09/15】1.20.0にバージョンアップすれば当初の記事の問題は発生しないと思われますので、以下は不要となりました。
もし、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】エラーの対応
これで使えるかどうかはわかりませんが、エラーの表示はなくなるようです。
関連エントリー
- 2022/01/10 freoをあれこれカスタマイズ版の配布
- 2017/09/06 freoのバージョン別変更点一覧
- 2017/06/24 freo用Smarty脚注プラグイン
- 2016/06/16 freoのエントリーギャラリー表示のメディアファイルを限定する
- 2014/04/27 freoのインフォメーションのページにサイドバーを表示させる
- 2013/11/30 freoの投稿者ユーザーがエクスポートやインポートプラグインにアクセスできないようする方法
- 2013/09/20 freoのコメント管理画面に投稿先とコメントを表示する
- 2013/09/16 freoのページの検索結果で該当ページの親ページを表示する方法
- 2013/05/07 freoのタグクラウドのソート順を変更する
- 2012/06/25 freoのRSSにページからの配信をするには
コメント
- コメントはまだありません。
コメント登録
- コメントを入力してください。
- 一旦登録したコメントは、あとで編集できませんのでご注意下さい。