とあるサイトをPHP5.6からPHP7.1に変更したところ編集画面のマルチテキストやリッチテキストが正常に作動しなく… 【解決済み】
とあるサイトをPHP5.6からPHP7.1に変更したところ編集画面のマルチテキストやリッチテキストが正常に作動しなく…
MODXバージョン 1.0.20J
PHPのバージョン 7.1.14
MySQLのバージョン 5.6.23-log
お世話になります。
とあるサイトをPHP5.6からPHP7.1に変更したところ以下のようなメッセージが編集ページの一番下に出てきて、編集画面のマルチテキストやリッチテキストが正常に出てこなくなってしまいました。
Parse error: syntax error, unexpected end of file in ~~~~~~~/assets/plugins/managermanager/widgets/ddmultiplefields/ddmultiplefields.php(44) : eval()'d code on line 1
このような場合、どのように対処すればよろしいでしょうか。
どうぞよろしくお願いいたします。
PHPのバージョン 7.1.14
MySQLのバージョン 5.6.23-log
お世話になります。
とあるサイトをPHP5.6からPHP7.1に変更したところ以下のようなメッセージが編集ページの一番下に出てきて、編集画面のマルチテキストやリッチテキストが正常に出てこなくなってしまいました。
Parse error: syntax error, unexpected end of file in ~~~~~~~/assets/plugins/managermanager/widgets/ddmultiplefields/ddmultiplefields.php(44) : eval()'d code on line 1
このような場合、どのように対処すればよろしいでしょうか。
どうぞよろしくお願いいたします。
とあるサイトをPHP5.6からPHP7.1に変更したところ編集画面のマルチテキストやリッチテキストが正常に作動しなく…
PHP7以降、eval()に渡される文字列(コード)でパースエラーが発生した場合、ParseError例外をスローするとのことなので、
columnsDataパラメタで渡す文字列に問題があるようなんですが、「ddmultiplefields.php」の以下の部分
Evolution CMSでは以下ような処理になっています。
とりあえず上記のように書き換えるとcatch文の中身がエラーの代わりに出力されるようになるので、エラー自体は回避できます。
catch文の中のechoを塞げば表面上何もなく処理できるようです。あまりスッキリはしませんが・・・。
columnsDataパラメタの最後にセミコロンを追加すれば一応evalは通るのですが、PHPコードでない場合
セミコロンを再度削除して・・・
みたいな動作が必要だったりするので、悩ましい所です。
columnsDataパラメタで渡す文字列に問題があるようなんですが、「ddmultiplefields.php」の以下の部分
コード: 全て選択
$eval = @eval($value);
$columnsData[] = $eval ? addslashes(json_encode($eval)) : $value;
コード: 全て選択
try {
$eval = eval($value);
} catch (Throwable $t) {
echo $t->getMessage(), "\n";
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
$columnsData[] = $eval ? addslashes(json_encode($eval)) : addslashes($value);
catch文の中のechoを塞げば表面上何もなく処理できるようです。あまりスッキリはしませんが・・・。
columnsDataパラメタの最後にセミコロンを追加すれば一応evalは通るのですが、PHPコードでない場合
セミコロンを再度削除して・・・
コード: 全て選択
$columnsData[] = $eval ? addslashes(json_encode($eval)) : addslashes(rtrim($value, ';'));
とあるサイトをPHP5.6からPHP7.1に変更したところ編集画面のマルチテキストやリッチテキストが正常に作動しなく…
mod_kks様
詳細なアドバイスありがとうございます!
コードを変えてやってみたのですが、やはり同じ状況のままで、マルチテキストとTinyMCEのところが使えません。
将来、PHP5.6が使えなくなった場合が怖くて。。
詳細なアドバイスありがとうございます!
コードを変えてやってみたのですが、やはり同じ状況のままで、マルチテキストとTinyMCEのところが使えません。
将来、PHP5.6が使えなくなった場合が怖くて。。
とあるサイトをPHP5.6からPHP7.1に変更したところ編集画面のマルチテキストやリッチテキストが正常に作動しなく…
そうですか。
mm_ddMultipleFieldsを設定していると思われますが、columnsDataパラメタ(第13引数)の内容はどんな感じでしょうか。
差し支えなければ参考までに教えていただけませんか。
mm_ddMultipleFieldsを設定していると思われますが、columnsDataパラメタ(第13引数)の内容はどんな感じでしょうか。
差し支えなければ参考までに教えていただけませんか。
とあるサイトをPHP5.6からPHP7.1に変更したところ編集画面のマルチテキストやリッチテキストが正常に作動しなく…
mod_kks様
ありがとうございます。
例えば、mm_rulesのところで
とあるテンプレート変数は以下のようにセッティングしてあります。
mm_ddMultipleFields('流れるバナー_マルチ', '', '112,440,438', 'text,field,text', 'リンクURL,バナー画像のURL,alt', '200,200,200', '||', '::', 300, 100, 0, 150, '');
mm_ddMultipleFields('流れるバナー', '', '334', 'text,field,text', 'リンクURL,バナー画像のURL,alt', '200,200,200', '||', '::', 300, 100, 0, 150, '');
もちろんこれだけではなく、他のマルチテキストも全部使えない状況です。
一応画像もキャプチャしてみました
PHP5.6の場合~~~~~~~~~~~~~~~~~~
マルチテキスト
http://imgur.com/idMBu97
TinyMCE
http://imgur.com/l3VfUb3
PHP7.1の場合~~~~~~~~~~~~~~~~~~
マルチテキスト
http://imgur.com/v89mpuM
TinyMCE
http://imgur.com/IS8JjCa
ありがとうございます。
例えば、mm_rulesのところで
とあるテンプレート変数は以下のようにセッティングしてあります。
mm_ddMultipleFields('流れるバナー_マルチ', '', '112,440,438', 'text,field,text', 'リンクURL,バナー画像のURL,alt', '200,200,200', '||', '::', 300, 100, 0, 150, '');
mm_ddMultipleFields('流れるバナー', '', '334', 'text,field,text', 'リンクURL,バナー画像のURL,alt', '200,200,200', '||', '::', 300, 100, 0, 150, '');
もちろんこれだけではなく、他のマルチテキストも全部使えない状況です。
一応画像もキャプチャしてみました
PHP5.6の場合~~~~~~~~~~~~~~~~~~
マルチテキスト
http://imgur.com/idMBu97
TinyMCE
http://imgur.com/l3VfUb3
PHP7.1の場合~~~~~~~~~~~~~~~~~~
マルチテキスト
http://imgur.com/v89mpuM
TinyMCE
http://imgur.com/IS8JjCa
とあるサイトをPHP5.6からPHP7.1に変更したところ編集画面のマルチテキストやリッチテキストが正常に作動しなく…
ご教示いただきましてありがとうございます。
気になる点ではキャプチャにある「グリッドcontents」のmm_rules設定ですかね。
これはどんな感じの設定になっていますでしょうか。
気になる点ではキャプチャにある「グリッドcontents」のmm_rules設定ですかね。
これはどんな感じの設定になっていますでしょうか。
とあるサイトをPHP5.6からPHP7.1に変更したところ編集画面のマルチテキストやリッチテキストが正常に作動しなく…
mod_kks様
有難うございます。
「グリッドcontents」のmm_rules設定は、以下のようになっています。
mm_ddMultipleFields('グリッドcontents', '', '112,440', 'text,textarea,textarea,field,text,text,text,text,text,select', '段目,タイトル,内容,画像,画像のALT,画像の寄せ,文字の色,枠線の色,背景の色,ボックスの横幅(%)', '40,150,220,100,100,50,50,50,50,50,50', '||', '::', 300, 100, 0, 150, $coloumnsData='||||||||||||||||||[[10],[20],[25],[30],[33],[40],[50],[60],[66],[70],[80],[90],[100]]');
有難うございます。
「グリッドcontents」のmm_rules設定は、以下のようになっています。
mm_ddMultipleFields('グリッドcontents', '', '112,440', 'text,textarea,textarea,field,text,text,text,text,text,select', '段目,タイトル,内容,画像,画像のALT,画像の寄せ,文字の色,枠線の色,背景の色,ボックスの横幅(%)', '40,150,220,100,100,50,50,50,50,50,50', '||', '::', 300, 100, 0, 150, $coloumnsData='||||||||||||||||||[[10],[20],[25],[30],[33],[40],[50],[60],[66],[70],[80],[90],[100]]');
とあるサイトをPHP5.6からPHP7.1に変更したところ編集画面のマルチテキストやリッチテキストが正常に作動しなく…
なるほど。ありがとうございます。
流れるバナー_マルチ、流れるバナー、グリッドcontentsの3つの設定を参考に検証してみました。
とりあえず先日のddmultiplefields.phpの以下の部分を
以下のように変更して
3つのテンプレート変数設定を当てはめて確認してみましたところ、ページ下部にはメッセージが出力されますが、
一応PHP5.6と同じように動作しました。
eval()にかけられる対象は、グリッドcontentsでは'||||||||||||||||||[[10],[20],[25],[30],[33],[40],[50],[60],[66],[70],[80],[90],[100]]'で
他はデフォルトと同じく空です。
この文字列は「||」で配列に分離され一つずつeval()に通されます。グリッドcontentsは、前8つ分は文字列なしで$evalはfalseとなりますが、
元のコードで最後の文字列を通すとPHP7以降は不正なコードとなりsyntax error, unexpected end of file のエラーが出ます。
上記のEvolution CMS方式ではエラーとなる場合eval()を回避する方法で、ページ下部にメッセージが出力されますが、eval()自体は
catch文で回避しているので$columnsDataにはaddslashes($value)が適用されるという感じです。
教示いただいた3つに関してはとりあえず上部の方法で通りましたが、他にもmm_rulesで「columnsData」パラメタを設定しているものがあれば、
その内容によって躓いているのかもしれません。
流れるバナー_マルチ、流れるバナー、グリッドcontentsの3つの設定を参考に検証してみました。
とりあえず先日のddmultiplefields.phpの以下の部分を
コード: 全て選択
foreach ($columnsDataTemp as $value){
$eval = @eval($value);
$columnsData[] = $eval ? addslashes(json_encode($eval)) : $value;
}
コード: 全て選択
foreach ($columnsDataTemp as $value){
try {
$eval = eval($value);
} catch (Throwable $t) {
echo $t->getMessage(), "\n";
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
$columnsData[] = $eval ? addslashes(json_encode($eval)) : addslashes($value);
}
一応PHP5.6と同じように動作しました。
eval()にかけられる対象は、グリッドcontentsでは'||||||||||||||||||[[10],[20],[25],[30],[33],[40],[50],[60],[66],[70],[80],[90],[100]]'で
他はデフォルトと同じく空です。
この文字列は「||」で配列に分離され一つずつeval()に通されます。グリッドcontentsは、前8つ分は文字列なしで$evalはfalseとなりますが、
元のコードで最後の文字列を通すとPHP7以降は不正なコードとなりsyntax error, unexpected end of file のエラーが出ます。
上記のEvolution CMS方式ではエラーとなる場合eval()を回避する方法で、ページ下部にメッセージが出力されますが、eval()自体は
catch文で回避しているので$columnsDataにはaddslashes($value)が適用されるという感じです。
教示いただいた3つに関してはとりあえず上部の方法で通りましたが、他にもmm_rulesで「columnsData」パラメタを設定しているものがあれば、
その内容によって躓いているのかもしれません。
とあるサイトをPHP5.6からPHP7.1に変更したところ編集画面のマルチテキストやリッチテキストが正常に作動しなく…
mod_kks様
検証して戴き、本当にありがとうございます。。
確かに、mm_rulesの「グリッドcontents」の部分をコメントアウトしてみると、他のマルチテキスト、TinyMCEが戻りました!
ただ、ご教授いただきました、ddmultiplefields.phpのコードを変更して、mm_rulesの「グリッドcontents」の部分を復活させてみると、症状は同じで、TinyMCE、他のマルチテキスト全部が作動しなくなってしまいました。
エラーもこのような形です
Parse error: syntax error, unexpected end of file in ~~/assets/plugins/managermanager/widgets/ddmultiplefields/ddmultiplefields.php(44) : eval()'d code on line 1
検証して戴き、本当にありがとうございます。。
確かに、mm_rulesの「グリッドcontents」の部分をコメントアウトしてみると、他のマルチテキスト、TinyMCEが戻りました!
ただ、ご教授いただきました、ddmultiplefields.phpのコードを変更して、mm_rulesの「グリッドcontents」の部分を復活させてみると、症状は同じで、TinyMCE、他のマルチテキスト全部が作動しなくなってしまいました。
エラーもこのような形です
Parse error: syntax error, unexpected end of file in ~~/assets/plugins/managermanager/widgets/ddmultiplefields/ddmultiplefields.php(44) : eval()'d code on line 1
とあるサイトをPHP5.6からPHP7.1に変更したところ編集画面のマルチテキストやリッチテキストが正常に作動しなく… 【解決済み】
グリッドcontentsの「columnsData」パラメタに由来するエラーなのは間違いなさそうな感じですが、
私の検証環境では前回の内容で普通に通ってしまっているので困りましたね。
では、一旦ddmultiplefields.phpをデフォルトに戻して視点を変えてみましょう。
eval()の仕様に合わせた形でmm_rulesのグリッドcontentsの設定を変更してみましょうか。
こんな感じで最後の「columnsData」パラメタを書き換えてみた場合はどうなりますか?
私の検証環境では前回の内容で普通に通ってしまっているので困りましたね。
では、一旦ddmultiplefields.phpをデフォルトに戻して視点を変えてみましょう。
eval()の仕様に合わせた形でmm_rulesのグリッドcontentsの設定を変更してみましょうか。
コード: 全て選択
mm_ddMultipleFields(
'グリッドcontents',
'',
'112,440',
'text,textarea,textarea,field,text,text,text,text,text,select',
'段目,タイトル,内容,画像,画像のALT,画像の寄せ,文字の色,枠線の色,背景の色,ボックスの横幅(%)',
'40,150,220,100,100,50,50,50,50,50,50',
'||',
'::',
300,
100,
0,
150,
'||||||||||||||||||return [[10],[20],[25],[30],[33],[40],[50],[60],[66],[70],[80],[90],[100]];'
);
とあるサイトをPHP5.6からPHP7.1に変更したところ編集画面のマルチテキストやリッチテキストが正常に作動しなく…
mod_kks様
ありがとうございます!
見事に治りました!
mm_rulesのセッティングで、TinyMCEやほかのマルチテキストも影響をうけてしまうのですね。
本当に助かりました!
この問題をずーっと(1年以上)抱えておりまして、とりあえずPHP5.6で動いていましたので、もやもやしながらも、やってまいりました。
これと同様のつくりのサイトがいくつもありますので、一気にもやもやが解消されそうです。(笑)
ありがとうございます!
見事に治りました!
mm_rulesのセッティングで、TinyMCEやほかのマルチテキストも影響をうけてしまうのですね。
本当に助かりました!
この問題をずーっと(1年以上)抱えておりまして、とりあえずPHP5.6で動いていましたので、もやもやしながらも、やってまいりました。
これと同様のつくりのサイトがいくつもありますので、一気にもやもやが解消されそうです。(笑)