記事内でソースコードなどを表示するツール prism のバージョンを 1.15.0 から 1.29.0 に更新した。
この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/software/20250224_155450038222.htm
キーワード: prism
記事内でソースコードなどを表示するツール prism のバージョンを 1.15.0 から 1.29.0 に更新した。
この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/software/20250224_155450038222.htm
キーワード: prism
php のバージョンを 8.3.10 から 8.4.3 に上げたら、
PHP RFC: Deprecate implicitly nullable parameter types日本語の解説の例:【PHP8.4】メソッド引数のデフォルトnullがついに禁止されるで説明されているように、引数のデフォルト null が php 8.4 から非推奨になったためだったので、Mobile_Detect.php の 600 行目からの __construct() の引数の記述部分を、
${var}から{$var}への変更と、クラス内の変数のうち宣言のなかったものに宣言を追加し、以下についても修正した。
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in rnotepad5.php on line 450
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in rnotepad5.php on line 581
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in rnotepad5.php on line 597
Deprecated: Creation of dynamic property rnotepad5::$term is deprecated in rnotepad5.php on line 244
Deprecated: Creation of dynamic property rnotepad5::$time_out is deprecated in rnotepad5.php on line 246
Deprecated: Creation of dynamic property tb_tool::$term is deprecated in tb_tool.php on line 19
Deprecated: Creation of dynamic property tb_tool::$time_out is deprecated in tb_tool.php on line 21
Deprecated: Creation of dynamic property entries_list::$def_line is deprecated in entries_list.php on line 71
Deprecated: Creation of dynamic property cmntcnfm::$def_line is deprecated in cmntcnfm.php on line 69
この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/software/20250215_203332966313.htm
キーワード: rNote-re
先に apache の話から。
apache を 2.4.5.7 から 2.4.5.8 にしたら、 module を読み込む extension を読み込まなくなった。
と表記していたのを、
のように絶対パスに変更したら読み込むようになった。何らかの内部的な動作の変更があったのだろうが、相対パス表記では動作しなくなった。
次に php の話。
php を、 8.2.11 から 8.3.1 にしたら、 rnote.php の2098行目付近の、
が、エラーになった。
php.net の PHP RFC: Arbitrary static variable initializers によると、
Currently, redeclaring static variables is allowed, although the semantics are very questionable.
(現在、static 変数の再宣言は許可されているが、この論理的な意味は非常に疑問)
ということで、 static 変数の再定義を認めないように変更されたからだ。
しかし、上の例のように php のバージョンにより異なる動作をする部分を条件文で切り分けることができなくなってしまった。有用な機能だと私は思うのだが、不許可にされたらどうしようもない。
という書き方に変更した。
今後もこういう変更が増えると思うと、 rnote-re のコードも、そろそろ php6 以前のバージョンへの対応をやめてもいいのかも知れない気がした。
キーワード: rnote-re
主な修正点は:
・each が削除されたので、下のように current(), next() を使う形に書き換えた。
(参考:「PHP8 で Call to undefined function each() になる場合の対処法」)
・要素へのオフセットを使ったアクセス演算子「{}」が削除されたので、「[]」に置き換えた。
・MB_OVERLOAD_STRING, MB_OVERLOAD_REGEX が削除されたので、これを使って mbstring へのオーバーロードが可能かチェックするコードをコメントアウト。
→本当は、チェックをコメントアウトするだけではだめで、コード中で mbstring へのオーバーロードを前提にした関数の呼び出しをしている箇所を全て、明示的に mbstring 用の関数に置き換える作業が必要だが、あまりにも大変なのでまだやっていない。
ついでに、古いバージョンでサーバー内のソースコードを上書きしてしまい、きちんと動作しなくなった箇所が何カ所か出たので、エラー表示を元にコードの追加変更を思い出しながら復旧させた。
ちなみに、今回、 php8 で動作させてみたところ、まったく何もエラー内容が表示されず、「HTTP 500」とだけ表示されたため、エラーの内容を確認するために、 php.ini に、「display_errors = On」を追加して作業を行った。
今回の修正は、 pear xmlrpc パッケージにも行った。
XML/RPC.php と、XML/RPC/Server.php
の2つのファイルで、 each を使用している部分に対し修正を行っている。
・・・で、 php8 に対応できたと思っていたが、 pear xmlrpc パッケージへの修正で問題が見つかった。 xml_parser_create() で、 php7 まではリソースハンドルが返されており、それを前提とした設計がされているのだが、 php8 からはオブジェクトのインスタンスが返されるように変更されたため、このままでは正しく動作できない。当面 php7 での運用を続けながら、 pear xmlrpc の部分をどうするかを検討することにした。というわけで、 rNote-re の php8 への対応は、xml-rpc を除いた部分まで完了というのが現状だ。
[2022-04-22]
pear の XML-RPC パッケージを使用するのをやめて、 phpxmlrpc を使用するように修正してみたところ、どうやら php8 で XML-RPC が使用できるようになったようだ。ただし、 phpxmlrpc のソースをざっと眺めてみた感じ each が使用されている箇所があるようなので、場合によって phpxmlrpc に手を入れる必要が出てくるかも知れない。
久しぶりに HTML LINT を使って当ブログのソースをチェックしてみたらエラーだらけになったので、内容を確かめてみた。
エラーとして報告されたもののうちで多かったのは、
<ARTICLE>~</ARTICLE> 内には H1/H2/H3/H4/H5/H6が必要です。
<SECTION>~</SECTION> 内には H1/H2/H3/H4/H5/H6が必要です。
だったが、これらの部分に実際は h2 などが存在しているのだ。
どうやら、 HTML LINT では、 article や section の開始タグの「直後」に h2 などがないと、 h2 などが存在しないという判断をしてエラーにするようだ。だが、文法上はそのような制限はないので、このエラーレポートは間違い。
ちなみに、 rNote-re では、セクション(section)や記事(article)を構造上区分けする意味合いで使用している。例えば section タグで囲まれた部分には、基本的に対応して画面に表示させる見出し文字列といったものは存在していない。(例えば、「ここはサイドメニュー部分」「ここは記事本体の部分」といった構造的な区分けを section タグで行っているのであって、見出し文字列を表示させるために section タグを使用しているわけではないから、ということ。)
また、<table>の属性として、枠線の太さなどを設定する border は HTML5 では廃止されたとしてエラーレポートが表示されるのだが、 HTML5 では、境界線の太さを指定するための border は廃止されたが、「枠線の有無を表す border 」は存在している(HTML5 & CSS3 リファレンス)。ところが、この文法に沿った記述も HTML LINT ではエラーとして扱われている。このエラー表示を減らすために、文法上正しい記述ではあるが border による枠線の有無の設定を削除して枠線の処理は全て CSS に移行したが、 HTML5 自体の仕様に反しているエラー表示なので納得できないものがある。