php-5.4.0で動作させる対応

  • ページ: BugTrack2
  • 投稿者: よっちい?
  • 優先順位: 低
  • 状態: 完了
  • カテゴリー: その他
  • 投稿日: 2011-11-20 (日) 17:31:58
  • バージョン:

PHP5関連

メッセージ

php-5.4.0RC1(たぶんalpha1から)で,正常動作しない.


  • php-5.4.0RC1*1をちょっと試してるのですが,apacheが500とのたまう感じです.php-5.3.9RC1は問題なさそうなのですけれども.わたしの仕込みだけの問題であれば良いのですけれども. -- よっちい? 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が動いてます(設定し忘れはもうないハズ) -- 2011-11-13 (日) 02:09:44
    • うちはFreeBSD boxでextensionをモジュール化しているのはdbaだけです.問題があるとすればそのあたりだろうな,とは思ってますがapacheのアクセスログ,エラーログにもこれといった情報は出てきてないです.はっきりわかっていることは「5.3.9RC1と5.4.0RC1で挙動が違う」だけです.phpinfo()によるとmbstringは有効になってます. -- よっちい? 2011-11-13 (日) 10:43:46
  • 1.5.0リリースに向けて(BugTrack2/355)で、主な部分は取り込まれましたので、完了に -- 2014-12-01 (月) 23:02:15

hex2bin()

  • 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;
    }
    ただ,これでも日本語がちゃんと出てくれない(出るところと出ないところがあり,規則性が見いだせてない)ので,もうちょっと追ってみます. -- よっちい? 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()にしてしまいましょうか. -- よっちい? 2011-11-20 (日) 17:39:33
  • 切り分けしてるつもりが途中からhex2bin()の名前を変えたままにしてたみたいです、ごめんなさい。そりゃエラー出なくなるわorz -- 2011-11-13 (日) 02:09:44 コメント主 2011-11-20 (日) 21:38:47
  • がると申します。特に「function hex2bin」自体の位置はかえずに「if (! function_exists('hex2bin')) {」だけ入れることで、うまいこと動きました。PHP 5.4.5 です。以上、なにかの参考にでもなれば幸いです。 -- がる? 2012-08-13 (月) 11:09:46
    • がるさんの方法でうまく行きました。ご報告まで。 -- kuo? 2012-10-13 (土) 23:48:33
  • decode関数にencode関数のようなstrval関数で型変更する部分を入れた方が安全なのかな?現状のPHP5.4やPukiWikiに埋め込んであるhex2bin関数には型キャストが入ってるので大丈夫(むしろ重複)でしょうけど、PHPのバグでBugTrack2/235が再燃とかなったらアレでしょうし -- 2013-05-15 (水) 22:27:17

htmlspecialchars()

Call-time pass-by-reference has been removed

  • これ,ペイジ名称は関係なく,内容に依存してそうな感じがします.ls2プラグインを用いるたペイジを表示させようとすると500になるようです.
    #norelated
    
    [[FrontPage]]
    
    #ls2
    この#ls2の有無で挙動が変わります.もうちょっと追ってみます. -- よっちい? 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プラグインにもあるようです. -- よっちい? 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;
            }
    の引数を参照型にしているのは親クラスの宣言と異なるので止めたほうが良いのでは,と. -- よっちい? 2011-11-23 (水) 11:56:25
  • わたしのところでは,以上変更でphp-5.4.0RC1による運用ができそうな感じになりました. -- よっちい? 2011-11-23 (水) 12:04:23
    • ペイジ編集のプレビュー機能が正常動作しないことに気付きました,まだ先は長いようです.orz -- よっちい? 2011-11-23 (水) 12:10:31
  • BugTrack2/182 allow_call_time_pass_reference 関連のまとめ -- 2011-11-23 (水) 16:13:56
    • CVS版ではls2, pcomment ともに修正済み -- 2011-11-23 (水) 16:16:03

編集のプレビュー時にテンプレートページ読み出しのパスを通る

  • プレビュー時になぜかテンプレートページを読み込むパスを通っているようです.
           // 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に. -- よっちい? 2011-11-23 (水) 13:00:27
  • wiki/.txtファイルがありました.BugTrack2/256にある既知の問題だった,ということでphp-5.4.0とは無関係でした.orz -- よっちい? 2011-11-23 (水) 13:06:55

外部サイトの事例

  • MasterChicken’s Blog: EUC-JP の PukiWiki を PHP 5.4 に移行する http://blog.ngnl.org/post/23105831044/euc-jp-pukiwiki-php-5-4
    • CVS版では htmlsc() で対応済みかも -- 2012-05-20 (日) 18:43:09
    • 「載っていない事象」じゃなくて既に./#k68e563b書いてあるのだけど,ちゃんと読んでる? -- 2012-05-20 (日) 21:58:39
  • PukiWiki Adv.と、PukiWiki Plus!のGit版はPHP5.4に対応しています。 -- 2013-05-19 (日) 10:07:30

*1 http://www.php.net/archive/2011.php#id2011-11-11-1

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-23 (月) 06:23:09
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.317 sec.

OSDN