LimeSurvey日本語版をPHP7.1で動かすの巻。

投稿者: | 2017年6月9日

LimeSurveyというアンケートツールがあるのですが、これを日本語化している素晴らしい会社さんがあります。ホント大感謝です。

さて、 https://www.d-ip.jp/limesurvey/download-ls/download1/ で公開されている「LimeSurvey2.64plus日本語対応版」(limesurvey2.64.6+170332_ja_dip.tar.gz)なのですが、PHP7.1.5+opcache環境では管理機能の「プラグインマネージャ」をクリックした瞬間にCPUが100%に張り付いてタイムアウトしてしまいます。これは本アプリケーションで使用されているHTMLPurifierというライブラリがopcacheのバグを踏んでしまっているようです。

そのままの状態ではopcache自体を無効にするか、
(limesurvey-install-dir)/framework/vendors/htmlpurifier/HTMLPurifier.standalone.php
をopcacheのblacklistに追加すると動作するのですが折角ですからソースを修正して対応しておきたいものです。

https://github.com/ezyang/htmlpurifier/issues/134
によると
https://github.com/Xiphin/htmlpurifier/commit/cb4871f4464659918e0c59b914d359a8874ea62a
https://github.com/Xiphin/htmlpurifier/commit/b9bc1039da7b5f49336580bf6d08499199b7309f
でパッチが提示されていますので、これを参考に修正してみます。Good job, Xiphin!

$ diff HTMLPurifier.standalone.php.20170608 HTMLPurifier.standalone.php
14332c14332,14334
< $current_li = false;
---
> // 20170608 to workaround PHP7 bug
> // $current_li = false;
> $current_li = new stdClass();
14353c14355,14358
< if ($current_li === false) {
---
>
> // 20170608 to workaround PHP7 bug
> // if ($current_li === false) {
> if (get_class($current_li) === "stdClass") {

修正済みファイルはここからどうぞ

ちなみにここで配布されているプラグインのうち、「お知らせ表示プラグインパッケージ」(Infomation_plugin_dip_20160714.tar.gz)についてはインストールするとcliで起動したときにFATAL Errorとなってしまいますので当方の環境では外しています。

念の為:今回の環境はAmazon Linux(4.9.27-14.31.amzn1.x86_64)上で、
php71-1.0-1.el6.remi.x86_64
php71-php-fpm-7.1.5-1.el6.remi.x86_64
php71-php-opcache-7.1.5-1.el6.remi.x86_64
httpd24-2.4.25-1.68.amzn1.x86_64
という感じです。