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 已启用并且 OpenSSL 已启用版本 3.0.1

我还尝试了一个 http: URL

我还尝试在 .php 文件中使用curl()库,这些库以相同的方式失败。

如果调用php -v或另一个 .php 文件,则从 .php 文件调用exec()有效,但如果调用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

1

一旦我找到错误日志,我就能找到我的答案。这是一个 Linux 权限设置,运行以下命令修复它: setsebool -P httpd_can_network_connect on

于 2022-02-28T23:23:58.383 回答
0

在 Command Line Interpreter/Interface CLIvs Common Gateway Interface中使用的 PHP 环境可能有不同的设置CGI

首先比较.ini两个环境中加载了哪些文件,即。

  1. CLI运行_php -i
  2. 用于CGI创建phpinfo.php仅包含内容的文件<?php echo phpinfo();并在 Web 浏览器中打开它。

比较结果并查看modules加载的内容和/或.ini加载的文件。

于 2022-02-26T06:08:50.680 回答