問題タブ [php-8.1]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
78 参照

php - 親メソッドをオーバーロードするとき、PHP8.1 が互換性のない戻り値の型を廃止する方向に変更されたのはなぜですか?

queryクラスのメソッドをmysqli次のようにオーバーロードしました。

PHP8.0 ではそれは問題ではありませんでした。ただし、PHP8.1 の時点で、次のエラーが発生しています。

非推奨: の戻り値の型はRepository\MySql\MySql::query($sql, $resultmode = null)と互換性があるmysqli::query(string $query, int $result_mode = MYSQLI_STORE_RESULT): mysqli_result|boolか、30 行目#[\ReturnTypeWillChange]の通知を一時的に抑制するために属性を使用する必要がありますrepository\src\MySql\MySql.php

エラーを修正する方法はわかっています。独自のカスタム オブジェクトを返したいので、おそらくメソッドの名前を変更することになるでしょう。

質問

おそらく言語理論を使用したり、他の言語と比較したりして、理論的およびオブジェクト指向の観点からこの変更の必要性を捉えた答えを探しています。

なぜこの変更が必要だったのですか?この変更を行う必要性または理由は何でしたか? クラスを拡張するときにPHPでオーバーロードされた戻り値の型を許可する方法は何ですか?

0 投票する
2 に答える
35 参照

php - PHP file_get_contents() および curl_exec() は Web サイトからは失敗しますが、コマンド ラインからは機能します

1 行のコードで .test.php ファイルを作成しました。

ブラウザから .test.php を開くと bool(false) と表示されますが、コマンド ラインから実行すると WAN IP が期待どおりに表示されます。

CentOS 9、nginx 1.20.1、および PHP 8.1.3 を使用しています (ただし、RHEL8 と Apache も試しました)。

/etc/php-fpm.d/www.confを設定して、ユーザーIDとグループを使用して、権限の問題ではないことを確認しました。

phpinfo() は、allow_url_fopenが On に設定されていること、curl 7.76.1 が有効であること、およびバージョン 3.0.1 で OpenSSL が有効になっていることを示します。

http: URL でも試してみました

また、.php ファイルでcurl()ライブラリを使用しようとしましたが、それらは同じ方法で失敗します。

.php ファイルからのexec()の呼び出しは、 php -vまたは別の .php ファイルを呼び出す場合は機能しますが、curlを呼び出す場合は機能しません。

他に何を試すべきかわからないので、おそらくサーバー全体をもう一度核攻撃します。

更新: /var/log/nginx/error.log でこれを見つけました FastCGI sent in stderr: "PHP message: PHP Warning: file_get_contents(https://checkip.amazonaws.com): Failed to open stream: Permission denied

それで?