Nginx 下的 PHP 网站显示 "No input file specified."

更新日期: 2019-09-18 阅读次数: 8341 字数: 306 分类: thinkphp

一个 Thinkphp 的网站项目,在本地使用 Nginx 搭建开发环境。但是,其他 ThinkPHP 的项目都能正常显示网页,只有这个项目打开首页,始终显示

No input file specified.

在 Nginx 的 error log 中看到如下错误信息:

2019/09/18 16:48:14 [error] 3395#3395: *4 FastCGI sent in stderr: "PHP message: PHP Warning:  Unknown: open_basedir restriction in effect. File(/home/zhongwei/work/some_thinkphp_project/test.php) is not within the allowed path(s): (/www/wwwroot/some_thinkphp_project/:/tmp/:/proc/) in Unknown on line 0
PHP message: PHP Warning:  Unknown: failed to open stream: Operation not permitted in Unknown on line 0
Unable to open primary script: /home/zhongwei/work/some_thinkphp_project/test.php (Operation not permitted)" while reading response header from upstream, client: ::1, server: _, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.1-fpm.sock:", host: "localhost"

注意这一行:

File(/home/zhongwei/work/some_thinkphp_project/test.php) is not within the allowed path(s): (/www/wwwroot/some_thinkphp_project/:/tmp/:/proc/) in Unknown on line 0

/www/wwwroot 这是什么?为何这个线上的部署目录会出现在我本地的开发环境中。

项目中搜素一下:

grep '/www/wwwroot' -R .
./.user.ini:open_basedir=/www/wwwroot/some_thinkphp_project/:/tmp/:/proc/

原来项目根目录下有个 .user.ini 文件,删除之后,就可以正常访问网页了。

.user.ini 有什么作用

利用 .user.ini 设置 open_basedir 加强 php 系统安全性,从而限制 PHP 脚本动作只发生在指定目录里面,从而一定程度加强系统安全性。

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式