[[Ethna/memo]]
#setlinebreak(on)

EthnaはPHP5に正しく対応していない様子です。
以下のようなメッセージに遭遇し、対処が必要でした。

** Issue1 [#k457a6ee]
PHP5では、newするとオブジェクトの参照が得られますが、それを =& でさらに参照で受け取ろうとするとエラーが発生します。
この場合、以下のようなメッセージがブラウザに表示されます 。

 Assigning the return value of new by reference is deprecated

対処としては簡単で、エラーが発生している各所で &color(red){''=&''}; となっている箇所を &color(red){''=''}; にしてやるだけです。
簡単な置換作業ですが数が結構あり、根気が必要です。(楽する方法はいくつかありますが、自分で考えてみてください)


** Issue2 [#a429aa60]
非 static メソッドを static に呼び出すと、ワーニングが表示されるようになっています。
この場合、以下のようなメッセージがブラウザに表示されます 。

 Strict Standards: Non-static method Ethna_Logger::errorLevelToLogLevel() should not be called statically in C:\xampp\php\pear\Ethna\class\Ethna_Error.php on line 28
 Strict Standards: Non-static method Ethna_Controller::getInstance() should not be called statically in C:\xampp\php\pear\Ethna\class\Ethna_Error.php on line 62

私の試した環境では、上記のメッセージが5回繰り返して表示されました。

対処としては簡単で、Ethna_Logger::errorLevelToLogLevel()とEthna_Controller::getInstance()をstaticにしてやるだけです。

C:\xampp\php\PEAR\Ethna\class\Ethna_Controller.php (269行目周辺)
     *  (現在アクティブな)コントローラのインスタンスを返す
     *
     *  @access public
     *  @return object  Ethna_Controller    コントローラのインスタンス
     *  @static
     */
 // function &getInstance()           // この行をコメントアウトして
    static function &getInstance()    // この行を追加
    {
        if (isset($GLOBALS['_Ethna_controller'])) {
            return $GLOBALS['_Ethna_controller'];
        } else {
            $_ret_object = null;
            return $_ret_object;


C:\xampp\php\PEAR\Ethna\class\Ethna_Logger.php (225行目周辺)
     *
     *  @access public
     *  @param  int     $errno  PHPエラーレベル
     *  @return array   ログレベル(LOG_NOTICE,...), エラーレベル表示名("E_NOTICE"...)
     *  @static
     */
 // function errorLevelToLogLevel($errno)         // この行をコメントアウトして
    static function errorLevelToLogLevel($errno)  // この行を追加
    {
        switch ($errno) {
        case E_ERROR:           $code = "E_ERROR"; $level = LOG_ERR; break;
        case E_WARNING:         $code = "E_WARNING"; $level = LOG_WARNING; break;
        case E_PARSE:           $code = "E_PARSE"; $level = LOG_CRIT; break;
        case E_NOTICE:          $code = "E_NOTICE"; $level = LOG_NOTICE; break;

これらの修正後、tmpフォルダの中身をクリアする必要があります。

** Issue3 [#v1447e2c]
時刻フォーマット(Windows上だけの問題?)

(あとで)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS