* php-5.4.0で動作させる対応 [#d1d114a0] - ページ: [[BugTrack2]] - 投稿者: [[よっちい]] - 優先順位: 低 - 状態: 提案 - カテゴリー: その他 - 投稿日: 2011-11-20 (日) 17:31:58 - バージョン: #contents ** PHP5関連 [#pda31dfe] - [[BugTrack/632]] PHP5で動作しない -- [[BugTrack2/324]] PHP 5.3 でエラーが出るようになった -- など ** メッセージ [#idc6f06c] php-5.4.0RC1(たぶんalpha1から)で,正常動作しない. -------- - [[php-5.4.0RC1>http://www.php.net/archive/2011.php#id2011-11-11-1]]をちょっと試してるのですが,apacheが500とのたまう感じです.php-5.3.9RC1は問題なさそうなのですけれども.わたしの仕込みだけの問題であれば良いのですけれども. -- [[よっちい]] &new{2011-11-12 (土) 10:50:42}; -- 自分の場合は、extension_dirを設定し忘れたせいでextension=php_mbstring.dllのあたりで呼び出し失敗していたのか、PHP Warning: PHP Startup: in Unknown on line 0というスタートアップエラーがログに記録され、ブラウザにはHTTP 500エラーが表示されてました。今はphp-5.4.0RC1のphp-cgi.exeが動いてます(設定し忘れはもうないハズ) -- &new{2011-11-13 (日) 02:09:44}; -- うちはFreeBSD boxでextensionをモジュール化しているのはdbaだけです.問題があるとすればそのあたりだろうな,とは思ってますがapacheのアクセスログ,エラーログにもこれといった情報は出てきてないです.はっきりわかっていることは「5.3.9RC1と5.4.0RC1で挙動が違う」だけです.phpinfo()によるとmbstringは有効になってます. -- [[よっちい]] &new{2011-11-13 (日) 10:43:46}; ** hex2bin() [#bab61500] - hex2bin()が組み込み関数になってlib/func.phpの実装とぶつかってました. > php ./index.php PHP Fatal error: Cannot redeclare hex2bin() in /(some where)/pukiwiki/lib/func.php on line 317 とりあえず,func.phpを以下のように書き換えることでhtmlファイルを出力するようになりました.lib/auth.phpで直接hex2bin()をコールしていたので,ついでにこれらをdecode()をコールするようにも変えたほうが良いでしょう. // Decode page name function decode($key) { if (function_exists('hex2bin')) { return hex2bin($key); } else { return internal_hex2bin($key); } } // Inversion of bin2hex() function internal_hex2bin($hex_string) { // preg_match : Avoid warning : pack(): Type H: illegal hex digit ... // (string) : Always treat as string (not int etc). See BugTrack2/31 return preg_match('/^[0-9a-f]+$/i', $hex_string) ? pack('H*', (string)$hex_string) : $hex_string; } ただ,これでも日本語がちゃんと出てくれない(出るところと出ないところがあり,規則性が見いだせてない)ので,もうちょっと追ってみます. -- [[よっちい]] &new{2011-11-19 (土) 21:17:34}; --- 例にならうよう,hex2bin()をlib/func.phpの末尾に移動させて以下のように書き換えてみました. // hex2bin -- Converts the hex representation of data to binary // (PHP 5.4.0) // Inversion of bin2hex() if (! function_exists('hex2bin')) { function hex2bin($hex_string) { // preg_match : Avoid warning : pack(): Type H: illegal hex digit ... // (string) : Always treat as string (not int etc). See BugTrack2/31 return preg_match('/^[0-9a-f]+$/i', $hex_string) ? pack('H*', (string)$hex_string) : $hex_string; } } decode()は削除し,全てhex2bin()にしてしまいましょうか. -- [[よっちい]] &new{2011-11-20 (日) 17:39:33}; - 切り分けしてるつもりが途中からhex2bin()の名前を変えたままにしてたみたいです、ごめんなさい。そりゃエラー出なくなるわorz -- 2011-11-13 (日) 02:09:44 コメント主 &new{2011-11-20 (日) 21:38:47}; #comment ** htmlspecialchars() [#k68e563b] - ([[BugTrack2/343]] に移動しました) **Call-time pass-by-reference has been removed [#jb3fa917] - これ,ペイジ名称は関係なく,内容に依存してそうな感じがします.ls2プラグインを用いるたペイジを表示させようとすると500になるようです. #norelated [[FrontPage]] #ls2 この#ls2の有無で挙動が変わります.もうちょっと追ってみます. -- [[よっちい]] &new{2011-11-23 (水) 11:13:06}; - ls2プラグイン単体で実行させると以下のエラーになりました. > php plugin/ls2.php PHP Fatal error: Call-time pass-by-reference has been removed in /(some where)/pukiwiki/plugin/ls2.inc.php on line 69 ちゃんとNEWSに過去機能の削除の件が書いてあります. - Removed legacy features: : . allow_call_time_pass_reference. (Pierrick) そこでls2プラグインの以下の実装 array_walk($args, 'plugin_ls2_check_arg', & $params); の参照渡しのアンパサンドを削除することで,ls2プラグインが正常動作するようになりました.同じような実装がpcommentプラグインにもあるようです. -- [[よっちい]] &new{2011-11-23 (水) 11:42:15}; - アンパサンドで思い出しましたが,lib/convert_html.phpで警告が出ます.以下のようなもので > php ./index.php PHP Strict Standards: Declaration of Heading::canContain() should be compatible with Element::canContain($obj) in /(some where)/pukiwiki/lib/convert_html.php on line 264 「引数の型は同じにせよ」ということのようです.なので, function canContain(& $obj) { return FALSE; } の引数を参照型にしているのは親クラスの宣言と異なるので止めたほうが良いのでは,と. -- [[よっちい]] &new{2011-11-23 (水) 11:56:25}; - わたしのところでは,以上変更でphp-5.4.0RC1による運用ができそうな感じになりました. -- [[よっちい]] &new{2011-11-23 (水) 12:04:23}; -- ペイジ編集のプレビュー機能が正常動作しないことに気付きました,まだ先は長いようです.orz -- [[よっちい]] &new{2011-11-23 (水) 12:10:31}; - [[BugTrack2/182]] allow_call_time_pass_reference 関連のまとめ -- &new{2011-11-23 (水) 16:13:56}; -- CVS版ではls2, pcomment ともに修正済み -- &new{2011-11-23 (水) 16:16:03}; #comment **%%編集のプレビュー時にテンプレートページ読み出しのパスを通る%% [#db0e96ac] - %%プレビュー時になぜかテンプレートページを読み込むパスを通っているようです.%% // Loading template if (isset($vars['template_page']) && is_page($vars['template_page'])) { $vars['msg'] = join('', get_source($vars['template_page'])); // Cut fixed anchors $vars['msg'] = preg_replace('/^(\*{1,3}.*)\[#[A-Za-z][\w-]+\](.*)$/m', '$1$2', $vars['msg']); } %%ここのjoin()している行をコメントアウトすると,プレビュー画面が正常に出てきます.おそらく関連が[[BugTrack2/256]]に.%% -- [[よっちい]] &new{2011-11-23 (水) 13:00:27}; - wiki/.txtファイルがありました.[[BugTrack2/256]]にある既知の問題だった,ということでphp-5.4.0とは無関係でした.orz -- [[よっちい]] &new{2011-11-23 (水) 13:06:55}; #comment ** 外部サイトの事例 [#pa435d97] - MasterChicken’s Blog: EUC-JP の PukiWiki を PHP 5.4 に移行する http://blog.ngnl.org/post/23105831044/euc-jp-pukiwiki-php-5-4 -- CVS版では htmlsc() で対応済みかも --「載っていない事象」じゃなくて既に[[./#k68e563b]]書いてあるのだけど,ちゃんと読んでる?