NGINX PHP环境require()失效问题排查:文件名错误导致
解决NGINX+PHP环境下require()文件找不到的坑
最近在测试NGINX搭配PHP的环境时,踩了个哭笑不得的坑,记录一下整个排查过程:
问题现象
用require()函数引入文件时一直报找不到文件的错误,NGINX错误日志里的提示很明确:
FastCGI sent in stderr: "PHP message: PHP Warning: require(layout.php): failed to open stream: No such file or directory in /var/www/html/php/index.php on line 7"
我一开始确认layout.php和index.php在同一个目录/var/www/html/php下,所以第一反应是怀疑NGINX配置有问题,是不是PHP的工作目录不对,导致它只认index.php,找不到引入的其他文件。
相关代码与配置
测试用的PHP代码(index.php)
<?php echo "<title>Playground</title>"; echo "Hello World"; require('layout.php'); require ('footer.php');
NGINX中对应PHP测试站点的配置片段
location /php { root /var/www/html/; location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } }
服务器文件结构
/var/www/html:同时存放Laravel项目和我的PHP测试代码/var/www/wordpress:单独存放WordPress项目
最终排查结果
折腾了好一会儿,又是检查NGINX的root路径配置,又是验证PHP-FPM的文件权限,结果发现根本不是服务器配置的问题——我代码里写的layout.php根本不存在!实际放在目录里的是header.php,完全是自己手滑打错了文件名……
内容的提问来源于stack exchange,提问作者glembo
相关产品推荐
相关产品推荐

