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

文章目录

    一个 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式