タグ: PHP

  • 2020年秋に、PHP8がリリースされる

    PHP5から、PHP7に乗り換えるときに、いろいろと動かなくなって苦労した記憶がある。今度は、今年の秋にPHP8がリリースされる。PHP7との互換性は、多少損なわれているそうなので、また、移行の苦しみがあるようだ。

    自分で、PHPを使ったプログラムは開発していないけれど、PHPのアプリケーションは使っているので、しばらくは対応待ち。そのあとで、移行がある。そして、また、微妙に動かない部分が出たり、忘れた頃に不具合が見つかったりするのだろう。PHP8が出たあとの移行は、すんなりと行くだろうか。

    https://forest.watch.impress.co.jp/docs/news/1261630.html

  • Moodleのgitリポジトリをクローンしたところ、拒否された

    Moodleをインストールするために、Gitリポジトリをクローンしようとしたしたところ、「git.moodle.org[0: 34.210.133.53]: errno=接続を拒否されました」と表示された。

    sudo git clone git://git.moodle.org/moodle.git
    Cloning into 'moodle'...
    fatal: unable to connect to git.moodle.org:
    git.moodle.org[0: 34.210.133.53]: errno=接続を拒否されました
    

    で、対処としては、github上のリポジトリから取得するようにした。これで、接続拒否のエラーは解消。

    sudo git clone https://github.com/moodle/moodle.git
    

    下記は、ログ。

    zen@moodle:/opt$ sudo git clone git://git.moodle.org/moodle.git
    Cloning into 'moodle'...
    fatal: unable to connect to git.moodle.org:
    git.moodle.org[0: 34.210.133.53]: errno=接続を拒否されました
    
    zen@moodle:/opt$
    zen@moodle:/opt$
    zen@moodle:/opt$
    zen@moodle:/opt$
    zen@moodle:/opt$ ls
    zen@moodle:/opt$
    zen@moodle:/opt$
    zen@moodle:/opt$ git clone https://github.com/moodle/moodle.git
    fatal: could not create work tree dir 'moodle': 許可がありません
    zen@moodle:/opt$ sudo git clone https://github.com/moodle/moodle.git
    Cloning into 'moodle'...
    remote: Enumerating objects: 7, done.
    remote: Counting objects: 100% (7/7), done.
    remote: Compressing objects: 100% (7/7), done.
    remote: Total 1163958 (delta 0), reused 0 (delta 0), pack-reused 1163951
    Receiving objects: 100% (1163958/1163958), 536.89 MiB | 22.33 MiB/s, done.
    Resolving deltas: 100% (812431/812431), done.
    Updating files: 100% (21140/21140), done.
    zen@moodle:/opt$ ls
    moodle
    zen@moodle:/opt$
    
    
    zen@moodle:/opt/moodle$ sudo git branch -a
    * master
      remotes/origin/HEAD -> origin/master
      remotes/origin/MOODLE_13_STABLE
      remotes/origin/MOODLE_14_STABLE
      remotes/origin/MOODLE_15_STABLE
      remotes/origin/MOODLE_16_STABLE
      remotes/origin/MOODLE_17_STABLE
      remotes/origin/MOODLE_18_STABLE
      remotes/origin/MOODLE_19_STABLE
      remotes/origin/MOODLE_20_STABLE
      remotes/origin/MOODLE_21_STABLE
      remotes/origin/MOODLE_22_STABLE
      remotes/origin/MOODLE_23_STABLE
      remotes/origin/MOODLE_24_STABLE
      remotes/origin/MOODLE_25_STABLE
      remotes/origin/MOODLE_26_STABLE
      remotes/origin/MOODLE_27_STABLE
      remotes/origin/MOODLE_28_STABLE
      remotes/origin/MOODLE_29_STABLE
      remotes/origin/MOODLE_30_STABLE
      remotes/origin/MOODLE_31_STABLE
      remotes/origin/MOODLE_32_STABLE
      remotes/origin/MOODLE_33_STABLE
      remotes/origin/MOODLE_34_STABLE
      remotes/origin/MOODLE_35_STABLE
      remotes/origin/MOODLE_36_STABLE
      remotes/origin/MOODLE_37_STABLE
      remotes/origin/MOODLE_38_STABLE
      remotes/origin/master
    zen@moodle:/opt/moodle$
    zen@moodle:/opt/moodle$
    zen@moodle:/opt/moodle$ sudo git branch --track MOODLE_38_STABLE origin/MOODLE_38_STABLE
    Branch 'MOODLE_38_STABLE' set up to track remote branch 'MOODLE_38_STABLE' from 'origin'.
    zen@moodle:/opt/moodle$
    zen@moodle:/opt/moodle$
    zen@moodle:/opt/moodle$
    zen@moodle:/opt/moodle$ sudo git checkout MOODLE_38_STABLE
    Switched to branch 'MOODLE_38_STABLE'
    Your branch is up to date with 'origin/MOODLE_38_STABLE'.
    zen@moodle:/opt/moodle$
    
  • pukiwikiで突然、pkwk_touch_fileのエラーが出た

    pukiwikiでページを更新したところ、画面が白くなり、何も表示されなくなった。ページを更新したところ、下記のエラーが表示された。更新したはずページは、中身が空っぽで表示されず。更新しても、下記のエラーが表示されるだけになった。

    pkwk_touch_file(): Invalid UID and (not writable for the directory or not a flie): recent.dat
    

    急に、これになったので、権限の問題ではない。単純に、ディスクがいっぱいでファイルの書き込みができなかったからだった。容量不足で書き込めていないので、”recent.dat”というファイルを探しても見つからない。

    ディスク上の不要なファイルを削除して、空き容量を作り、無事に書き込めるようになり、解決した。

  • WordPressのcocoonテーマでエラーが出る

    WordPressのcocoonテーマで、下記のエラーが表示される。

    /wp-content/themes/cocoon-master/lib/open-graph.php(356)
    

    調べると、curlを使った処理でエラーになっていた。PHPのモジュールでcurlが入っているかみたところ、インストールされていなかった。FreeBSDのパッケージからcurlのモジュールをインストールして、apacheを再起動した。これで、解決した。

     pkg install php73-curl
    
  • WordPressのアップデート時に「Maximum execution time」が発生する

    WordPressのアップデート時に、下記のエラーが発生する。

    Fatal error: Maximum execution time of 30 seconds exceeded in /usr/xxxxxx/xxxxxx/blog2/wp-content/plugins/ssh-sftp-updater-support/phpseclib/Crypt/Base.php(2554) : eval()'d code on line 563
    

    いろいろと調べたところ、実行時間の問題のようなので、PHPの最大時間を変更する。php.iniを編集し、「max_execution_time」の値を30から60に変更して、apacheを再起動。

    ;変更前
    ;max_execution_time = 30
    ;変更後
    max_execution_time = 60
    

    実行時間を最大30秒から60秒に増やしたが、それでもギリギリだった。PHP7にしたため、いろいろと重くなっているのかもしれない。

  • WordPressでアップデートするとhash_algos() がエラーになる

    PHPをPHP7.3に上げたところ、Wordpressのアップデートで、下記のエラーが表示された。

    Fatal error: Uncaught Error: Call to undefined function hash_algos() in /usr/xxxxxx/xxxxxx/wp-admin/includes/file.php:1166 Stack trace: #0 
    

    該当ファイルのエラーになったソースコードをみると下記のようになっていた。

            if ( ! function_exists( 'sodium_crypto_sign_verify_detached' ) || ! in_\
    array( 'sha384', array_map( 'strtolower', hash_algos() ) ) ) {
    

    「hash_alogs()」でエラーになっているようだ。調べてみたら、php73-hash-7.3.X がインストールされていなかった。FreeBSDでパッケージから、php73-hashをインストールして、apacheを再起動した。

    # pkg install php73-hash
    Updating FreeBSD repository catalogue...
    FreeBSD repository is up to date.
    All repositories are up to date.
    The following 1 package(s) will be affected (of 0 checked):
    
    New packages to be INSTALLED:
    	php73-hash: 7.3.8
    
    Number of packages to be installed: 1
    
    152 KiB to be downloaded.
    
    Proceed with this action? [y/N]: y
    [1/1] Fetching php73-hash-7.3.8.txz: 100%  152 KiB 155.8kB/s    00:01    
    Checking integrity... done (0 conflicting)
    [1/1] Installing php73-hash-7.3.8...
    [1/1] Extracting php73-hash-7.3.8: 100%
    Message from php73-hash-7.3.8:
    
    This file has been added to automatically load the installed extension:
    /usr/local/etc/php/ext-20-hash.ini
    

    すぐにWordpressのアップデートを試すと、「別の更新が進行中です。」と出てしまうことがある。これは、前のアップデートによるロックが発生しているため。15分経てば、DBのロックが解除されるので、時間が立ってから試す。

  • WordPressで、xml_parser_create()のエラーが発生した

    PHPをPHP5.6からPHP7.3に上げたところ、Wordpressで以下のエラーが発生した。

    Fatal error: Uncaught Error: Call to undefined function xml_parser_create()
    

    PHPのオプションで、xmlに関するモジュールがインストールされていないことが原因だった。FreeBSDでパッケージからインストールしているので、下記のようにpkgコマンドでインストール。その後、Apacheを再起動し、無事にエラーは解消。

    pkg install php73-xml-7.3.8 
    
  • 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

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