1

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

それで?

4

2 に答える 2

0

CLICommand Line Interpreter/Interfaceと Common Gateway Interfaceで使用される PHP 環境の設定が異なる場合がありますCGI

.ini最初に、両方の環境にロードされているファイルを比較します。

  1. CLI実行用php -i
  2. コンテンツのみCGIのファイルを作成し、Web ブラウザーで開きます。phpinfo.php<?php echo phpinfo();

結果を比較して、何modulesがロードされているか、どの.iniファイルがロードされているかを確認します。

于 2022-02-26T06:08:50.680 に答える