用一行代码创建了.test.php文件:
<?php
var_dump(file_get_contents('https://checkip.amazonaws.com'));
?>
当我从浏览器打开.test.php时,它显示bool(false(,但当我从命令行运行它时,它会按预期显示我的WAN IP。
php -f .test.php
我使用的是Centos9、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
现在怎么办?
命令行解释器/接口CLI
和公共网关接口CGI
中可能使用不同的PHP环境设置。
首先比较两种环境中加载的.ini
文件,即
- 对于
CLI
运行php -i
- 对于CCD_ 7,创建仅具有内容CCD_ 9的文件CCD_
比较结果,查看加载了哪些modules
和/或加载了哪些.ini
文件。
找到错误日志后,我就能找到答案。这是一个Linux权限设置,运行以下命令修复了它:setsebool -P httpd_can_network_connect on