タグ: PHP

  • php56からphp73にあげたら、pukiwikiのRSSリーダーでエラー

    PHP5.6からPHP7.3にアップデートしたところ、pukiwikiでエラーが発生。このエラーの前に、pukiwikiはPHP7対応版の1.5.2にバージョンアップした。アップグレード用のパッチを当てたが、それでも下記のエラーが発生した。

    Parse error: syntax error, unexpected 'new' (T_NEW) in /usr/xxxxxx/xxxxxx/wiki/plugin/rssreader.inc.php on line 56
    

    エラーを調べてみると、PHP7では「NEWで生成されたオブジェクトは参照として代入できない」ので、エラーになっていることが判明。とりあえず、動作するようにしたかったので、参照渡しをやめるようにコードを変更した。

    変更した記述は、下記。

       //変更前
       //$r =& new XML_RSS($rdf);
       //変更後 =& を = に変更。エラー原因の参照渡しをやめている。
       $r = new XML_RSS($rdf);
    

    参考

    https://www.shirokuma-systems.com/seisaku/wordpress/284.html
    https://www.slideshare.net/yohgaki/php56php70

  • PHPのstrtotime()のエラーがApacheのログに記録される

    Apacheのログに下記のPHP WarnningでStrtotime()のエラーが記録される。

    PHP Warning:  strtotime(): It is not safe to rely on the system's timezone
    settings. You are *required* to use the date.timezone setting or the
     date_default_timezone_set() function. In case you used any of those methods
     and you are still getting this warning, you most likely misspelled the
     timezone identifier. We selected the timezone 'UTC' for now, but please
      set date.timezone to select your timezone.
    

    対応は、php.iniにtimezoneの設定がされていなかったので、上記のエラーに従い、UTCで設定を追加した。

    date.timezone = UTC

    設定後、Apacheを再起動して完了。

  • PHPでParse Errorの T_ENDWHILEが発生する

    別サーバから移植していたWord Pressで動作確認していたところ、画面白くなるページがあった。
    Apacheのログを調べたところ、以下のようなT_ENDWHILEのParse Errorが表示されれていた。

    ~~~中略~~~
    PHP Parse error:  syntax error, unexpected 'endwhile' (T_ENDWHILE) in /var/www/html/
    ~~~中略~~~
    

    原因は、実行されているPHPのファイルの中に、(<は半角)

    <?

    から始まっているものがあった。 これを

    <?php

    に修正し、正常に動作するようになった。

  • Client does not support authentication protocol が表示されてMySQLに接続できない

    MySQL5.1とPHP5.2.17で接続しようとしたところ、下記のエラーが表示されて、PHPからMySQLに接続できなかった。
    (これを使いたいわけではなく、かなり前に作った検証環境・・・)

    このエラーは、MySQLのバージョンにより、認証方式が変更されたことによる影響。
    PHP側のMySQLクライアントのバージョンが古いのが原因。

    ■エラーメッセージ

    Client does not support authentication protocol requested by server; consider upgrading MySQL client.
    

    PHP側のMySQLクライアントを新しいものにするのが一番だが、 できないときはMySQLの設定を変更することで回避可能。

    対応方法としては、my.cnfに古いパスワード形式の指定をする。

    [mysqld]
    (・・・中略・・・)
    old_passwords = 1
    

    my.cnfの中から、[mysqld] の箇所を探して、そこに「old_passwords=1」の記述を入れる。
    設定変更した後は、MySQLサーバのプロセスを再起動する。

    テストしても、同じ様になる場合は、念のため、ウェブサーバも再起動する。
    (自分の環境では、Apacheも再起動しないとダメだった。)