1 行のコードで .test.php ファイルを作成しました。
<?php
var_dump(file_get_contents('https://checkip.amazonaws.com'));
?>
ブラウザから .test.php を開くと bool(false) と表示されますが、コマンド ラインから実行すると WAN IP が期待どおりに表示されます。
php -f .test.php
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
それで?