#14 PHP 8.2対応

Closed
TechnicalSuwako wants to merge 11 commits from TechnicalSuwako/main into gnusocialjp/main
There is no content yet.
senooken commented 8 months ago
Owner

#13 に対応するPRです。諏訪湖のmainを使って、Debian 11でPHP v8.2をインストールして、PHPのバージョンを置換してトップ画面を開くと以下のエラーが出ました。

Fatal error: Uncaught Error: Undefined constant "DB_DATAOBJECT_ERROR_NODATA" in /var/www/gnusocial/public/index.php:104 Stack trace: #0 [internal function]: handleError() #1 {main} thrown in /var/www/gnusocial/public/index.php on line 104

なお、PHP v7.4だと以下のエラーが出ました。

[Sat Sep 02 11:23:39.998434 2023] [php7:notice] [pid 16745] [client 133.106.38.37:57052] Uncaught Exception: ParseError: syntax error, unexpected '|', expecting variable (T_VARIABLE) in /var/www/gnusocial/lib/util/xmloutputter.php:151
Stack trace:
#0 [internal function]: GNUsocial_class_autoload()
#1 /var/www/gnusocial/lib/util/htmloutputter.php(47): spl_autoload_call()
#2 /var/www/gnusocial/lib/util/framework.php(145): require_once('/var/www/gnusoc...')
#3 [internal function]: GNUsocial_class_autoload()
#4 /var/www/gnusocial/lib/action/action.php(47): spl_autoload_call()
#5 /var/www/gnusocial/lib/util/framework.php(186): require_once('/var/www/gnusoc...')
#6 /var/www/gnusocial/lib/util/common.php(27): require_once('/var/www/gnusoc...')
#7 /var/www/gnusocial/public/index.php(172): require_once('/var/www/gnusoc...')
#8 {main}

心当たりありますか?PHP 7.4でも動作するようにしてほしいです。特にPHP v8.2でのエラーはローカルの修正のコミット忘れに見えます。何か忘れていませんか?あるいは、私の環境の問題でしょうか?

@tak4 などにも確認してもらいたいです。PHPのサーバーは使っていなくてApacheのサーバーを使っています。

#13 に対応するPRです。諏訪湖の[main](https://notabug.org/TechnicalSuwako/gnusocial/commit/8d5b4a7254a230e0222fdfa94db7aca6d0d77d84)を使って、Debian 11でPHP v8.2をインストールして、PHPのバージョンを置換してトップ画面を開くと以下のエラーが出ました。 ``` Fatal error: Uncaught Error: Undefined constant "DB_DATAOBJECT_ERROR_NODATA" in /var/www/gnusocial/public/index.php:104 Stack trace: #0 [internal function]: handleError() #1 {main} thrown in /var/www/gnusocial/public/index.php on line 104 ``` なお、PHP v7.4だと以下のエラーが出ました。 ``` [Sat Sep 02 11:23:39.998434 2023] [php7:notice] [pid 16745] [client 133.106.38.37:57052] Uncaught Exception: ParseError: syntax error, unexpected '|', expecting variable (T_VARIABLE) in /var/www/gnusocial/lib/util/xmloutputter.php:151 Stack trace: #0 [internal function]: GNUsocial_class_autoload() #1 /var/www/gnusocial/lib/util/htmloutputter.php(47): spl_autoload_call() #2 /var/www/gnusocial/lib/util/framework.php(145): require_once('/var/www/gnusoc...') #3 [internal function]: GNUsocial_class_autoload() #4 /var/www/gnusocial/lib/action/action.php(47): spl_autoload_call() #5 /var/www/gnusocial/lib/util/framework.php(186): require_once('/var/www/gnusoc...') #6 /var/www/gnusocial/lib/util/common.php(27): require_once('/var/www/gnusoc...') #7 /var/www/gnusocial/public/index.php(172): require_once('/var/www/gnusoc...') #8 {main} ``` 心当たりありますか?PHP 7.4でも動作するようにしてほしいです。特にPHP v8.2でのエラーはローカルの修正のコミット忘れに見えます。何か忘れていませんか?あるいは、私の環境の問題でしょうか? @tak4 などにも確認してもらいたいです。PHPのサーバーは使っていなくてApacheのサーバーを使っています。
senooken commented 8 months ago
Owner

念のためDockerでも確認しました。動作が変わりました。以下のエラーが出ました。

doom(): Argument #3 ($line) must be of type int, string given, called in /var/www/lib/util/gnusocial.php on line 145

ただ、この前段階で、以下の修正が必要です。

diff --git a/docker/development/docker-compose.yml b/docker/development/docker-compose.yml
index f1d916c3ef..36ac6f88cb 100644
--- a/docker/development/docker-compose.yml
+++ b/docker/development/docker-compose.yml
@@ -10,7 +10,7 @@ services:
        MYSQL_ALLOW_EMPTY_PASSWORD: 1
     ports:
       - 3306:3306
-    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
+    command: mariadbd --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
   php:

DockerのDBのバージョンをなぜ上げたのですか?私が用意したdockerのPHPとDBのバージョンは、GNU socialの稼働に必要な最も古いバージョンです。最も古いバージョンでの動作は最低限確認したいのです。

今回、PHP8用にdockerを用意するならば、development-php8のようなディレクトリーを作って、そちらに分離したいです。PHP 7.4はまだ必要です。PHP 7.4の対応が終了したり、WordPressでの対応が終わったタイミングで一緒に最低バージョンをPHP 8にします。

なお、上記のmysqld→mariadbdの修正はphp 7.4のほうにあっても問題ないです。

https://notabug.org/gnusocialjp/gnusocial/src/main/docker/development にDockerでの起動方法があります。docker compose up -d を実行するだけでlocalhostでアクセスできます。

私とあなたとの環境の違いを排除したいので、dockerのインストールだけ頑張って、それでdockerでも簡単に動作確認してくれませんか?

念のためDockerでも確認しました。動作が変わりました。以下のエラーが出ました。 ``` doom(): Argument #3 ($line) must be of type int, string given, called in /var/www/lib/util/gnusocial.php on line 145 ``` ただ、この前段階で、以下の修正が必要です。 ``` diff --git a/docker/development/docker-compose.yml b/docker/development/docker-compose.yml index f1d916c3ef..36ac6f88cb 100644 --- a/docker/development/docker-compose.yml +++ b/docker/development/docker-compose.yml @@ -10,7 +10,7 @@ services: MYSQL_ALLOW_EMPTY_PASSWORD: 1 ports: - 3306:3306 - command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin + command: mariadbd --character-set-server=utf8mb4 --collation-server=utf8mb4_bin php: ``` DockerのDBのバージョンをなぜ上げたのですか?私が用意したdockerのPHPとDBのバージョンは、GNU socialの稼働に必要な最も古いバージョンです。最も古いバージョンでの動作は最低限確認したいのです。 今回、PHP8用にdockerを用意するならば、development-php8のようなディレクトリーを作って、そちらに分離したいです。PHP 7.4はまだ必要です。PHP 7.4の対応が終了したり、WordPressでの対応が終わったタイミングで一緒に最低バージョンをPHP 8にします。 なお、上記のmysqld→mariadbdの修正はphp 7.4のほうにあっても問題ないです。 <https://notabug.org/gnusocialjp/gnusocial/src/main/docker/development> にDockerでの起動方法があります。`docker compose up -d` を実行するだけでlocalhostでアクセスできます。 私とあなたとの環境の違いを排除したいので、dockerのインストールだけ頑張って、それでdockerでも簡単に動作確認してくれませんか?
tak4 commented 8 months ago

@tak4 などにも確認してもらいたいです。PHPのサーバーは使っていなくてApacheのサーバーを使っています。

PHP 7.4 のサーバー(Nginxですが)で確認してみます。

> @tak4 などにも確認してもらいたいです。PHPのサーバーは使っていなくてApacheのサーバーを使っています。 PHP 7.4 のサーバー(Nginxですが)で確認してみます。
tak4 commented 8 months ago

PHP 7.4 で再現しました。

関数「elementStart」の引数「$attrs」の型宣言を無くすと(PHP 7.4では)上記のエラーが起きなくなりました。

他の関数では「$attrs」に型宣言が無い様に見え、PHP8.2でエラーにならなければ型宣言は不要なはずです。

PHP 8.2の GNU social 環境をすぐに用意できないので、確認は @senooken さんか @TechnicalSuwako さんにお願いしたいです。

修正内容:

diff --git a/lib/util/xmloutputter.php b/lib/util/xmloutputter.php
index 2c4e1c9545..928d553636 100644
--- a/lib/util/xmloutputter.php
+++ b/lib/util/xmloutputter.php
@@ -148,7 +148,7 @@ class xmloutputter
      *
      * @return void
      */
-    public function elementStart(string $tag, null|array|string $attrs = null): void
+    public function elementStart(string $tag, $attrs = null): void
     {
         $this->xw->startElement($tag);
PHP 7.4 で再現しました。 関数「elementStart」の引数「$attrs」の型宣言を無くすと(PHP 7.4では)上記のエラーが起きなくなりました。 他の関数では「$attrs」に型宣言が無い様に見え、PHP8.2でエラーにならなければ型宣言は不要なはずです。 PHP 8.2の GNU social 環境をすぐに用意できないので、確認は @senooken さんか @TechnicalSuwako さんにお願いしたいです。 修正内容: ``` diff --git a/lib/util/xmloutputter.php b/lib/util/xmloutputter.php index 2c4e1c9545..928d553636 100644 --- a/lib/util/xmloutputter.php +++ b/lib/util/xmloutputter.php @@ -148,7 +148,7 @@ class xmloutputter * * @return void */ - public function elementStart(string $tag, null|array|string $attrs = null): void + public function elementStart(string $tag, $attrs = null): void { $this->xw->startElement($tag); ```
senooken commented 8 months ago
Owner

@tak4 早速の確認ありがとうございます。PHP 8での確認は他のエラーが出るので、そちらを修正してからの確認になりますね…引数の型指定の | はPHP8で入ったのでしょうね。

やっぱり、PHP8や本番環境用のdockerほしいです。実稼働でdockerは私も要らないと思っていますけど、開発で動作・確認環境を統一したいので。 #16 に登録しました。

@tak4 早速の確認ありがとうございます。PHP 8での確認は他のエラーが出るので、そちらを修正してからの確認になりますね…引数の型指定の `|` はPHP8で入ったのでしょうね。 やっぱり、PHP8や本番環境用のdockerほしいです。実稼働でdockerは私も要らないと思っていますけど、開発で動作・確認環境を統一したいので。 #16 に登録しました。
TechnicalSuwako commented 8 months ago
Poster

@senooken

なお、PHP v7.4だと以下のエラーが出ました。
心当たりありますか?PHP 7.4でも動作するようにしてほしいです。特にPHP v8.2でのエラーはローカルの修正のコミット忘れに見えます。何か忘れていませんか?あるいは、私の環境の問題でしょうか?

直しました。( @tak さん、有難う御座います )

念のためDockerでも確認しました。動作が変わりました。以下のエラーが出ました。
ただ、この前段階で、以下の修正が必要です。

どのページで起こっていますか?
PHP 8以降で、assert()は存在していませんので、私作ったdebug.phpファイルを追加して、doom()という関数のせいですが、social-devで8.1も、7.4も起こっていません。

@senooken > なお、PHP v7.4だと以下のエラーが出ました。<br /> > 心当たりありますか?PHP 7.4でも動作するようにしてほしいです。特にPHP v8.2でのエラーはローカルの修正のコミット忘れに見えます。何か忘れていませんか?あるいは、私の環境の問題でしょうか? 直しました。( @tak さん、有難う御座います ) > 念のためDockerでも確認しました。動作が変わりました。以下のエラーが出ました。<br /> > ただ、この前段階で、以下の修正が必要です。 どのページで起こっていますか?<br /> PHP 8以降で、`assert()`は存在していませんので、私作った`debug.php`ファイルを追加して、`doom()`という関数のせいですが、`social-dev`で8.1も、7.4も起こっていません。
senooken commented 8 months ago
Owner

@TechnicalSuwako Dockerのトップ画面 (localhostドメイン直下) です。

以下のログになっていました。

2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] Exception thrown: 'doom(): Argument #3 ($line) must be of type int, string given, called in /var/www/lib/util/gnusocial.php on line 145'
2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] #0 doom(string,string,string,integer) called at [/var/www/lib/util/gnusocial.php:145]
2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] #1 GNUsocial::addPlugin(string,array) called at [/var/www/lib/util/framework.php:114]
2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] #2 addPlugin(string,array) called at [/var/www/config.php:48]
2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] #3 include(string) called at [/var/www/lib/util/gnusocial.php:459]
2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] #4 GNUsocial::loadConfigFile(NULL) called at [/var/www/lib/util/gnusocial.php:199]
2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] #5 GNUsocial::init(NULL,NULL,NULL) called at [/var/www/lib/util/common.php:33]
2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] #6 require_once(string) called at [/var/www/html/index.php:173]
2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] ServerErrorAction: 500 doom(): Argument #3 ($line) must be of type int, string given, called in /var/www/lib/util/gnusocial.php on line 145
#0 /var/www/lib/util/gnusocial.php(145): doom('8192', 'Creation of dyn...', '/var/www/lib/ut...', 145)
#1 /var/www/lib/util/framework.php(114): GNUsocial::addPlugin('TranslateNotice', Array)
#2 /var/www/config.php(48): addPlugin('TranslateNotice', Array)
#3 /var/www/lib/util/gnusocial.php(459): include('/var/www/config...')
#4 /var/www/lib/util/gnusocial.php(199): GNUsocial::loadConfigFile(NULL)
#5 /var/www/lib/util/common.php(33): GNUsocial::init(NULL, NULL, NULL)
#6 /var/www/html/index.php(173): require_once('/var/www/lib/ut...')
#7 {main}

指摘したように、Dockerはディレクトリーを分けて、元のdockerのファイルは残してほしいです。DockerでPHP7とPHP8を両方確認できるようにしたいです。

@TechnicalSuwako Dockerのトップ画面 (localhostドメイン直下) です。 以下のログになっていました。 ``` 2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] Exception thrown: 'doom(): Argument #3 ($line) must be of type int, string given, called in /var/www/lib/util/gnusocial.php on line 145' 2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] #0 doom(string,string,string,integer) called at [/var/www/lib/util/gnusocial.php:145] 2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] #1 GNUsocial::addPlugin(string,array) called at [/var/www/lib/util/framework.php:114] 2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] #2 addPlugin(string,array) called at [/var/www/config.php:48] 2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] #3 include(string) called at [/var/www/lib/util/gnusocial.php:459] 2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] #4 GNUsocial::loadConfigFile(NULL) called at [/var/www/lib/util/gnusocial.php:199] 2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] #5 GNUsocial::init(NULL,NULL,NULL) called at [/var/www/lib/util/common.php:33] 2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] #6 require_once(string) called at [/var/www/html/index.php:173] 2023-09-03 05:50:35 LOG_ERR: [localhost:26.e4c1cceb GET /] ServerErrorAction: 500 doom(): Argument #3 ($line) must be of type int, string given, called in /var/www/lib/util/gnusocial.php on line 145 #0 /var/www/lib/util/gnusocial.php(145): doom('8192', 'Creation of dyn...', '/var/www/lib/ut...', 145) #1 /var/www/lib/util/framework.php(114): GNUsocial::addPlugin('TranslateNotice', Array) #2 /var/www/config.php(48): addPlugin('TranslateNotice', Array) #3 /var/www/lib/util/gnusocial.php(459): include('/var/www/config...') #4 /var/www/lib/util/gnusocial.php(199): GNUsocial::loadConfigFile(NULL) #5 /var/www/lib/util/common.php(33): GNUsocial::init(NULL, NULL, NULL) #6 /var/www/html/index.php(173): require_once('/var/www/lib/ut...') #7 {main} ``` 指摘したように、Dockerはディレクトリーを分けて、元のdockerのファイルは残してほしいです。DockerでPHP7とPHP8を両方確認できるようにしたいです。
TechnicalSuwako commented 8 months ago
Poster

@senooken

① この「TranslateNotice」というプラグインって、どんなプラグインですか?
プラグインのソースコードがありますか? gnusocialのレポジトリが入っていませんから。

② /var/www/htmlは何ですか?
それも、gnusocialのレポジトリが入っていません。

@senooken ① この「TranslateNotice」というプラグインって、どんなプラグインですか?<br /> プラグインのソースコードがありますか? gnusocialのレポジトリが入っていませんから。 ② /var/www/htmlは何ですか?<br /> それも、gnusocialのレポジトリが入っていません。
senooken commented 8 months ago
Owner

@TechnicalSuwako 1 ああ。すみません。ローカルで確認していて、他のプラグインの読み込みが干渉していたようです。TranslateNoticeは開発・修正中別のリポジトリーなんですけど、同様のMarkdownプラグインを読み込んで (config.phpにaddPlugin('Markdown');) ドメイン直下の表示でだいたい同じエラーになりました。Markdownプラグインで確認してほしいです。

設置: GNU socialのプラグイン | GNU social JP」がプラグインのインストール手順です。ExampleをMarkdownに置換してインストールできます。

2023-09-03 07:08:18 LOG_ERR: [localhost:20.139bad79 GET /plugins/Markdown/css/markdown.css] Exception thrown: 'doom(): Argument #3 ($line) must be of type int, string given, called in /var/www/local/plugins/Markdown/MarkdownPlugin.php on line 17'
2023-09-03 07:08:18 LOG_ERR: [localhost:20.139bad79 GET /plugins/Markdown/css/markdown.css] #0 doom(string,string,string,integer) called at [/var/www/local/plugins/Markdown/MarkdownPlugin.php:17]
2023-09-03 07:08:18 LOG_ERR: [localhost:20.139bad79 GET /plugins/Markdown/css/markdown.css] #1 MarkdownPlugin->initialize() called at [/var/www/lib/util/event.php:89]
2023-09-03 07:08:18 LOG_ERR: [localhost:20.139bad79 GET /plugins/Markdown/css/markdown.css] #2 Event::handle(string) called at [/var/www/lib/util/gnusocial.php:308]
2023-09-03 07:08:18 LOG_ERR: [localhost:20.139bad79 GET /plugins/Markdown/css/markdown.css] #3 GNUsocial::initModules() called at [/var/www/lib/util/gnusocial.php:211]
2023-09-03 07:08:18 LOG_ERR: [localhost:20.139bad79 GET /plugins/Markdown/css/markdown.css] #4 GNUsocial::init(NULL,NULL,NULL) called at [/var/www/lib/util/common.php:33]
2023-09-03 07:08:18 LOG_ERR: [localhost:20.139bad79 GET /plugins/Markdown/css/markdown.css] #5 require_once(string) called at [/var/www/html/index.php:173]
2023-09-03 07:08:18 LOG_ERR: [localhost:20.139bad79 GET /plugins/Markdown/css/markdown.css] ServerErrorAction: 500 doom(): Argument #3 ($line) must be of type int, string given, called in /var/www/local/plugins/Markdown/MarkdownPlugin.php on line 17
#0 /var/www/local/plugins/Markdown/MarkdownPlugin.php(17): doom('8192', 'Creation of dyn...', '/var/www/local/...', 17)
#1 /var/www/lib/util/event.php(89): MarkdownPlugin->initialize()
#2 /var/www/lib/util/gnusocial.php(308): Event::handle('InitializePlugi...')
#3 /var/www/lib/util/gnusocial.php(211): GNUsocial::initModules()
#4 /var/www/lib/util/common.php(33): GNUsocial::init(NULL, NULL, NULL)
#5 /var/www/html/index.php(173): require_once('/var/www/lib/ut...')
#6 {main}

doom関数の引数の型があっていないのが原因のようで、既存プラグインに影響あるのは困るので、できれば回避してほしいです。

プラグイン側がPHP8対応が必要になるなら、教えてください。きりがないので、PHP8に必要な対応内容を整理してドキュメントに残して、プラグイン側の対応は見送って取り込むことにします。

2 /var/www/htmlはgnusocial/publicへのシンボリックリンクです。

@TechnicalSuwako 1 ああ。すみません。ローカルで確認していて、他のプラグインの読み込みが干渉していたようです。[TranslateNotice](https://github.com/chimo/gs-translate )は開発・修正中別のリポジトリーなんですけど、同様の[Markdown](https://notabug.org/gnusocialjp/Markdown)プラグインを読み込んで (config.phpに`addPlugin('Markdown');`) ドメイン直下の表示でだいたい同じエラーになりました。Markdownプラグインで確認してほしいです。 「[設置: GNU socialのプラグイン | GNU social JP](https://web.gnusocial.jp/post/2023/01/20/3762/)」がプラグインのインストール手順です。ExampleをMarkdownに置換してインストールできます。 ``` 2023-09-03 07:08:18 LOG_ERR: [localhost:20.139bad79 GET /plugins/Markdown/css/markdown.css] Exception thrown: 'doom(): Argument #3 ($line) must be of type int, string given, called in /var/www/local/plugins/Markdown/MarkdownPlugin.php on line 17' 2023-09-03 07:08:18 LOG_ERR: [localhost:20.139bad79 GET /plugins/Markdown/css/markdown.css] #0 doom(string,string,string,integer) called at [/var/www/local/plugins/Markdown/MarkdownPlugin.php:17] 2023-09-03 07:08:18 LOG_ERR: [localhost:20.139bad79 GET /plugins/Markdown/css/markdown.css] #1 MarkdownPlugin->initialize() called at [/var/www/lib/util/event.php:89] 2023-09-03 07:08:18 LOG_ERR: [localhost:20.139bad79 GET /plugins/Markdown/css/markdown.css] #2 Event::handle(string) called at [/var/www/lib/util/gnusocial.php:308] 2023-09-03 07:08:18 LOG_ERR: [localhost:20.139bad79 GET /plugins/Markdown/css/markdown.css] #3 GNUsocial::initModules() called at [/var/www/lib/util/gnusocial.php:211] 2023-09-03 07:08:18 LOG_ERR: [localhost:20.139bad79 GET /plugins/Markdown/css/markdown.css] #4 GNUsocial::init(NULL,NULL,NULL) called at [/var/www/lib/util/common.php:33] 2023-09-03 07:08:18 LOG_ERR: [localhost:20.139bad79 GET /plugins/Markdown/css/markdown.css] #5 require_once(string) called at [/var/www/html/index.php:173] 2023-09-03 07:08:18 LOG_ERR: [localhost:20.139bad79 GET /plugins/Markdown/css/markdown.css] ServerErrorAction: 500 doom(): Argument #3 ($line) must be of type int, string given, called in /var/www/local/plugins/Markdown/MarkdownPlugin.php on line 17 #0 /var/www/local/plugins/Markdown/MarkdownPlugin.php(17): doom('8192', 'Creation of dyn...', '/var/www/local/...', 17) #1 /var/www/lib/util/event.php(89): MarkdownPlugin->initialize() #2 /var/www/lib/util/gnusocial.php(308): Event::handle('InitializePlugi...') #3 /var/www/lib/util/gnusocial.php(211): GNUsocial::initModules() #4 /var/www/lib/util/common.php(33): GNUsocial::init(NULL, NULL, NULL) #5 /var/www/html/index.php(173): require_once('/var/www/lib/ut...') #6 {main} ``` doom関数の引数の型があっていないのが原因のようで、既存プラグインに影響あるのは困るので、できれば回避してほしいです。 プラグイン側がPHP8対応が必要になるなら、教えてください。きりがないので、PHP8に必要な対応内容を整理してドキュメントに残して、プラグイン側の対応は見送って取り込むことにします。 2 /var/www/htmlはgnusocial/publicへのシンボリックリンクです。
TechnicalSuwako commented 8 months ago
Poster

@senooken 両方修正しました、結局簡単でした。

Markdown

MarkdownPlugin.php

問題は、$this->parserです。
PHP8より、動的にプロパーティを作る事がNGですので、classの中にpublic $parser;を追加して下さい。

...
class MarkdownPlugin extends Plugin
{
  public $parser; // これを追加して
  const VERSION = '0.1.1';
  const NAME_SPACE = 'markdown';
...

TranslateNotice

TranslateNoticePlugin.php

require_once INSTALLDIR . '/local/plugins/TranslateNotice/lib/YandexTranslator.php';

下記に変えて下さい:

require_once INSTALLDIR . '/plugins/TranslateNotice/lib/YandexTranslator.php';

この「/local」は不要です。
そうして:

function onPluginVersion(array &$versions)

Pluginと一致様にする事が必須ですので、下記に変えて下さい:

function onPluginVersion(array &$versions): bool

もしかして、この2つのプラグインはgnusocialのレポジトリに入っては良いじゃないですか?

@senooken 両方修正しました、結局簡単でした。 # Markdown ## MarkdownPlugin.php 問題は、`$this->parser`です。<br /> PHP8より、動的にプロパーティを作る事がNGですので、classの中に`public $parser;`を追加して下さい。 ``` ... class MarkdownPlugin extends Plugin { public $parser; // これを追加して const VERSION = '0.1.1'; const NAME_SPACE = 'markdown'; ... ``` # TranslateNotice ## TranslateNoticePlugin.php ``` require_once INSTALLDIR . '/local/plugins/TranslateNotice/lib/YandexTranslator.php'; ``` 下記に変えて下さい: ``` require_once INSTALLDIR . '/plugins/TranslateNotice/lib/YandexTranslator.php'; ``` この「/local」は不要です。<br /> そうして: ``` function onPluginVersion(array &$versions) ``` Pluginと一致様にする事が必須ですので、下記に変えて下さい: ``` function onPluginVersion(array &$versions): bool ``` もしかして、この2つのプラグインはgnusocialのレポジトリに入っては良いじゃないですか?
senooken commented 8 months ago
Owner

@TechnicalSuwako 確認ありがとうございました。プラグイン側の問題ということで理解しました。suwakoの修正を取り込んだ後に、「PHP8への移行の文書」をこちらで残してそれで対応とします。

サードパーティープラグインを本体に取り込むかどうかは、検討が必要なので今は保留にします。

こちらで他に問題がないかもう少し動作確認しますのでお待ちください。また、Dockerの対応はしてくれないようなので、マージ後にこちらで対応します。

@TechnicalSuwako 確認ありがとうございました。プラグイン側の問題ということで理解しました。suwakoの修正を取り込んだ後に、「PHP8への移行の文書」をこちらで残してそれで対応とします。 サードパーティープラグインを本体に取り込むかどうかは、検討が必要なので今は保留にします。 こちらで他に問題がないかもう少し動作確認しますのでお待ちください。また、Dockerの対応はしてくれないようなので、マージ後にこちらで対応します。
TechnicalSuwako commented 8 months ago
Poster

Dockerの対応について、仮想機械で確認してみると思います。 Dockerをインストールするには、systemdは必須だと思いますが、今docker.comで「The owner of this website (www.docker.com) has banned your access based on your browser's signature」ってメッセージが発生しますので、このエラーを修正されるまで確認出来ません。

Dockerの対応について、仮想機械で確認してみると思います。 Dockerをインストールするには、systemdは必須だと思いますが、今docker.comで「The owner of this website (www.docker.com) has banned your access based on your browser's signature」ってメッセージが発生しますので、このエラーを修正されるまで確認出来ません。
senooken commented 8 months ago
Owner

Run the Docker daemon as a non-root user (Rootless mode) | Docker Docs」にあるように、docker自体はsystemdは必須ではないです。systemdなくても動作します。ただ、多くのGNU/Linuxがsystemdを使っているので、推奨されています。

Web Archiveで保存できていないWithout systemd固有の部分のHTMLは以下です。

Without package

If you do not have permission to run package managers like apt-get and dnf, consider using the installation script available at https://get.docker.com/rootlessopen_in_new. Since static packages are not available for s390x, hence it is not supported for s390x.

content_copy
$ curl -fsSL https://get.docker.com/rootless | sh
...
[INFO] Creating /home/testuser/.config/systemd/user/docker.service
...
[INFO] Installed docker.service successfully.
[INFO] To control docker.service, run: `systemctl --user (start|stop|restart) docker.service`
[INFO] To run docker.service on system startup, run: `sudo loginctl enable-linger testuser`

[INFO] Make sure the following environment variables are set (or add them to ~/.bashrc):

export PATH=/home/testuser/bin:$PATH
export DOCKER_HOST=unix:///run/user/1000/docker.sock

The binaries will be installed at ~/bin.

Without-systemd'

To run the daemon directly without systemd, you need to run dockerd-rootless.sh instead of dockerd.

The following environment variables must be set:

  • $HOME: the home directory
  • $XDG_RUNTIME_DIR: an ephemeral directory that is only accessible by the expected user, e,g, ~/.docker/run. The directory should be removed on every host shutdown. The directory can be on tmpfs, however, should not be under /tmp. Locating this directory under /tmp might be vulnerable to TOCTOU attack.
「[Run the Docker daemon as a non-root user (Rootless mode) | Docker Docs](https://docs.docker.com/engine/security/rootless/)」にあるように、docker自体はsystemdは必須ではないです。systemdなくても動作します。ただ、多くのGNU/Linuxがsystemdを使っているので、推奨されています。 [Web Archive](https://archive.li/uTvJc)で保存できていないWithout systemd固有の部分のHTMLは以下です。 ## Without package <div aria-role="tab" :class="selected !== 'Without-packages' &amp;&amp; 'hidden'" class=""><p>If you do not have permission to run package managers like <code>apt-get</code> and <code>dnf</code>, consider using the installation script available at <a class="link" href="https://get.docker.com/rootless" target="_blank" rel="noopener">https://get.docker.com/rootless<span class="ml-1 align-top text-[1em] material-symbols-rounded">open_in_new</span></a>. Since static packages are not available for <code>s390x</code>, hence it is not supported for <code>s390x</code>.</p><div class="group relative"><button x-data="{ code: 'Y3VybCAtZnNTTCBodHRwczovL2dldC5kb2NrZXIuY29tL3Jvb3RsZXNzIHwgc2gKLi4uCltJTkZPXSBDcmVhdGluZyAvaG9tZS90ZXN0dXNlci8uY29uZmlnL3N5c3RlbWQvdXNlci9kb2NrZXIuc2VydmljZQouLi4KW0lORk9dIEluc3RhbGxlZCBkb2NrZXIuc2VydmljZSBzdWNjZXNzZnVsbHkuCltJTkZPXSBUbyBjb250cm9sIGRvY2tlci5zZXJ2aWNlLCBydW46IGBzeXN0ZW1jdGwgLS11c2VyIChzdGFydHxzdG9wfHJlc3RhcnQpIGRvY2tlci5zZXJ2aWNlYApbSU5GT10gVG8gcnVuIGRvY2tlci5zZXJ2aWNlIG9uIHN5c3RlbSBzdGFydHVwLCBydW46IGBzdWRvIGxvZ2luY3RsIGVuYWJsZS1saW5nZXIgdGVzdHVzZXJgCgpbSU5GT10gTWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBzZXQgKG9yIGFkZCB0aGVtIHRvIH4vLmJhc2hyYyk6CgpleHBvcnQgUEFUSD0vaG9tZS90ZXN0dXNlci9iaW46JFBBVEgKZXhwb3J0IERPQ0tFUl9IT1NUPXVuaXg6Ly8vcnVuL3VzZXIvMTAwMC9kb2NrZXIuc29jaw==' }" class="material-symbols-rounded hidden group-hover:block absolute top-3 right-3 text-gray-light-300 dark:text-gray-dark-600" title="Copy" @click="window.navigator.clipboard.writeText(atob(code)); $el.textContent='check_circle'; setTimeout(() => $el.textContent='content_copy', 2000);"> content_copy</button><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-console" data-lang="console"><span class="line"><span class="cl"><span class="gp">$</span> curl -fsSL https://get.docker.com/rootless <span class="p">|</span> sh </span></span><span class="line"><span class="cl"><span class="go">... </span></span></span><span class="line"><span class="cl"><span class="go">[INFO] Creating /home/testuser/.config/systemd/user/docker.service </span></span></span><span class="line"><span class="cl"><span class="go">... </span></span></span><span class="line"><span class="cl"><span class="go">[INFO] Installed docker.service successfully. </span></span></span><span class="line"><span class="cl"><span class="go">[INFO] To control docker.service, run: `systemctl --user (start|stop|restart) docker.service` </span></span></span><span class="line"><span class="cl"><span class="go">[INFO] To run docker.service on system startup, run: `sudo loginctl enable-linger testuser` </span></span></span><span class="line"><span class="cl"><span class="go"></span><span class="err"> </span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="go">[INFO] Make sure the following environment variables are set (or add them to ~/.bashrc): </span></span></span><span class="line"><span class="cl"><span class="go"></span><span class="err"> </span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="go">export PATH=/home/testuser/bin:$PATH </span></span></span><span class="line"><span class="cl"><span class="go">export DOCKER_HOST=unix:///run/user/1000/docker.sock </span></span></span></code></pre></div></div><p>The binaries will be installed at <code>~/bin</code>.</p></div> ## Without-systemd' <div aria-role="tab" :class="selected !== 'Without-systemd' &amp;&amp; 'hidden'" class=""><p>To run the daemon directly without systemd, you need to run <code>dockerd-rootless.sh</code> instead of <code>dockerd</code>.</p><p>The following environment variables must be set:</p><ul><li><code>$HOME</code>: the home directory</li><li><code>$XDG_RUNTIME_DIR</code>: an ephemeral directory that is only accessible by the expected user, e,g, <code>~/.docker/run</code>. The directory should be removed on every host shutdown. The directory can be on tmpfs, however, should not be under <code>/tmp</code>. Locating this directory under <code>/tmp</code> might be vulnerable to TOCTOU attack.</li></ul></div>
senooken commented 8 months ago
Owner

@TechnicalSuwako php8.2状態で、他のサーバーにプロフィールからリモートフォローしようとすると、500になりました。確認お願いします。

ログは以下です。念のため、social-dev.076.moeからでも再現しました。連合周りは相手もいるので慎重にやらないといけません…

2023-09-05 13:30:47 LOG_DEBUG: [gs.senooken.f5.si:4709.ff92c17f POST /main/remotefollowsub] Performing discovery for "acct:test@gnusocial.jp" (normalized "acct:test@gnusocial.jp")
2023-09-05 13:30:47 LOG_DEBUG: [gs.senooken.f5.si:4709.ff92c17f POST /main/remotefollowsub] action.php - Server error '500' on 'remotefollowsub': Class "XML_XRD" not found

なお、最初に報告したこのエラーは、こちらの環境のPHPのモジュール不足が原因でした。

Fatal error: Uncaught Error: Undefined constant "DB_DATAOBJECT_ERROR_NODATA" in /var/www/gnusocial/public/index.php:104

sudo apt install php8.2-bcmath php8.2-curl php8.2-gd php8.2-intl php8.2-mbstring php8.2-xml で不足分をインストールしたら動作しました。

dockerは最初に行ったとおり、ひとまず修正前の元のdevelopmentディレクトリーは残しておいて、今回修正した分をdevelopment-php8など別のディレクトリーにしてほしいです。動作確認はしなくていいです。

今後、php7がサポート終了になるまで、php7/php8での動作確認がしばらくは必要になるからです。suwakoの修正マージ後に、見落としでトラブル起こる可能性が高いと思っています。

@TechnicalSuwako php8.2状態で、他のサーバーにプロフィールからリモートフォローしようとすると、500になりました。確認お願いします。 ログは以下です。念のため、social-dev.076.moeからでも再現しました。連合周りは相手もいるので慎重にやらないといけません… ``` 2023-09-05 13:30:47 LOG_DEBUG: [gs.senooken.f5.si:4709.ff92c17f POST /main/remotefollowsub] Performing discovery for "acct:test@gnusocial.jp" (normalized "acct:test@gnusocial.jp") 2023-09-05 13:30:47 LOG_DEBUG: [gs.senooken.f5.si:4709.ff92c17f POST /main/remotefollowsub] action.php - Server error '500' on 'remotefollowsub': Class "XML_XRD" not found ``` なお、最初に報告したこのエラーは、こちらの環境のPHPのモジュール不足が原因でした。 ``` Fatal error: Uncaught Error: Undefined constant "DB_DATAOBJECT_ERROR_NODATA" in /var/www/gnusocial/public/index.php:104 ``` `sudo apt install php8.2-bcmath php8.2-curl php8.2-gd php8.2-intl php8.2-mbstring php8.2-xml` で不足分をインストールしたら動作しました。 dockerは最初に行ったとおり、ひとまず修正前の元のdevelopmentディレクトリーは残しておいて、今回修正した分をdevelopment-php8など別のディレクトリーにしてほしいです。動作確認はしなくていいです。 今後、php7がサポート終了になるまで、php7/php8での動作確認がしばらくは必要になるからです。suwakoの修正マージ後に、見落としでトラブル起こる可能性が高いと思っています。
senooken commented 7 months ago
Owner

@TechnicalSuwako 2023-09-06に以下のコメントがあったと思ったら削除されています。

@senooken ( /senooken ) リモートフォローを修正するには、下記を自分のconfig.phpファイルに貼って下さい: addPlugin('RemoteFollow');

今作業中なんですか?後回しにしているのか、断念したのか、状況を教えてください。

@TechnicalSuwako 2023-09-06に以下のコメントがあったと思ったら削除されています。 > @senooken ( /senooken ) リモートフォローを修正するには、下記を自分のconfig.phpファイルに貼って下さい: ```addPlugin('RemoteFollow');``` 今作業中なんですか?後回しにしているのか、断念したのか、状況を教えてください。
TechnicalSuwako commented 7 months ago
Poster

間違ってテストしましたから、このコメントを削除しました。
状況について、最後4日は凄く忙しかったですので、その時より何も変わりません。
本日は他のISPの工事さんが来ますので、その後で開発に再開すると思います。

間違ってテストしましたから、このコメントを削除しました。<br /> 状況について、最後4日は凄く忙しかったですので、その時より何も変わりません。<br /> 本日は他のISPの工事さんが来ますので、その後で開発に再開すると思います。
senooken commented 7 months ago
Owner

@TechnicalSuwako ありがとうございます。状況がわかり安心しました。無理せずお願いします。

@TechnicalSuwako ありがとうございます。状況がわかり安心しました。無理せずお願いします。
senooken commented 6 months ago
Owner

@TechnicalSuwako この課題、これ以上やる気がないなら、来年私が続きをやるので、作業内容を覚えている間に他の人が作業できるように以下をお願いしたいです。

  1. PHP8対応の他に効率化の修正が入っているようなので、その修正箇所の分離。効率化部分は別MRにして先に取り込みたい。
  2. PHP8対応の基本方針の提示 (プロパティーの宣言、asssert→doom以外にあれば)。
  3. リモートフォローがうまくいかない理由、影響を与えていると考えられる修正内容の提示 (わかれば)
@TechnicalSuwako この課題、これ以上やる気がないなら、来年私が続きをやるので、作業内容を覚えている間に他の人が作業できるように以下をお願いしたいです。 1. PHP8対応の他に効率化の修正が入っているようなので、その修正箇所の分離。効率化部分は別MRにして先に取り込みたい。 2. PHP8対応の基本方針の提示 (プロパティーの宣言、asssert→doom以外にあれば)。 3. リモートフォローがうまくいかない理由、影響を与えていると考えられる修正内容の提示 (わかれば)
TechnicalSuwako commented 6 months ago
Poster

@senooken お待たせいたしまして、大変申し訳ありませんでした。
8月から転職が必要になりましたので、あんま時間がありませんですた。
2週間前はやっと内定が届きましたが、このMRを忘れましたので、今週週末は修正すると思います。

@senooken お待たせいたしまして、大変申し訳ありませんでした。<br /> 8月から転職が必要になりましたので、あんま時間がありませんですた。<br /> 2週間前はやっと内定が届きましたが、このMRを忘れましたので、今週週末は修正すると思います。
senooken commented 3 months ago
Owner

テストなし、バグありコードをマージすることはありません。私の気が散るので一度クローズします。

レビューの指摘にも対応する気がないなら、対応する気になってからオープンしてください。

テストなし、バグありコードをマージすることはありません。私の気が散るので一度クローズします。 レビューの指摘にも対応する気がないなら、対応する気になってからオープンしてください。
Please reopen this pull request to perform merge operation.
Sign in to join this conversation.
Loading...
Cancel
Save
There is no content yet.