PHP5から、PHP7に乗り換えるときに、いろいろと動かなくなって苦労した記憶がある。今度は、今年の秋にPHP8がリリースされる。PHP7との互換性は、多少損なわれているそうなので、また、移行の苦しみがあるようだ。
自分で、PHPを使ったプログラムは開発していないけれど、PHPのアプリケーションは使っているので、しばらくは対応待ち。そのあとで、移行がある。そして、また、微妙に動かない部分が出たり、忘れた頃に不具合が見つかったりするのだろう。PHP8が出たあとの移行は、すんなりと行くだろうか。
PHP5から、PHP7に乗り換えるときに、いろいろと動かなくなって苦労した記憶がある。今度は、今年の秋にPHP8がリリースされる。PHP7との互換性は、多少損なわれているそうなので、また、移行の苦しみがあるようだ。
自分で、PHPを使ったプログラムは開発していないけれど、PHPのアプリケーションは使っているので、しばらくは対応待ち。そのあとで、移行がある。そして、また、微妙に動かない部分が出たり、忘れた頃に不具合が見つかったりするのだろう。PHP8が出たあとの移行は、すんなりと行くだろうか。
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(): Invalid UID and (not writable for the directory or not a flie): recent.dat
急に、これになったので、権限の問題ではない。単純に、ディスクがいっぱいでファイルの書き込みができなかったからだった。容量不足で書き込めていないので、”recent.dat”というファイルを探しても見つからない。
ディスク上の不要なファイルを削除して、空き容量を作り、無事に書き込めるようになり、解決した。
WordPressのcocoonテーマで、下記のエラーが表示される。
/wp-content/themes/cocoon-master/lib/open-graph.php(356)
調べると、curlを使った処理でエラーになっていた。PHPのモジュールでcurlが入っているかみたところ、インストールされていなかった。FreeBSDのパッケージからcurlのモジュールをインストールして、apacheを再起動した。これで、解決した。
pkg install php73-curl
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にしたため、いろいろと重くなっているのかもしれない。
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のロックが解除されるので、時間が立ってから試す。
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
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
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を再起動して完了。
別サーバから移植していたWord Pressで動作確認していたところ、画面白くなるページがあった。
Apacheのログを調べたところ、以下のようなT_ENDWHILEのParse Errorが表示されれていた。
~~~中略~~~ PHP Parse error: syntax error, unexpected 'endwhile' (T_ENDWHILE) in /var/www/html/ ~~~中略~~~
原因は、実行されているPHPのファイルの中に、(<は半角)
<?
から始まっているものがあった。 これを
<?php
に修正し、正常に動作するようになった。