lnmp配置laravel/thinkphp时出现no input file specified的常见问题

24
Nov

lnmp配置laravel/thinkphp时出现no input file specified的常见问题

lnmp的域名绑定命令即使到最新的1.5版都是一套不太成熟的做法。
我们每次执行诸如lnmp vhost add时,都会在目录下生成一个类似这样的.user.ini文件

open_basedir=/home/wwwroot/your-project/:/tmp/:/proc/

.user.ini的作用是覆写php.ini中的部分参数,在这里来说,open_basedir在php.ini中可能有一个全局值,而在这个目录下有一个局部的值会覆盖全局值。

而open_basedir则是造成nginx/php-fpm 报错的罪魁祸首,这么说可能不恰当,因为.user.ini的本意是好的,其机理是限制php访问目录,举例来说,你在这个目录下配置的php文件只能操作/home/wwwroot/your-project/下的文件。

而这样就导致了我们在使用诸如laravel/ThinkPHP框架时的问题。比如我们在home/wwwroot下建立了名为your-project的laravel项目,但是lnmp绑定vhost时,按常理是要绑定到/public目录下的。因为/public下是整个网站的入口,这样一来就产生问题了:.user.ini中会生成/home/wwwroot/your-project/public/:/tmp/:/proc/这样的参数,然而这个项目的php是必须要有要调用/public外文件的权限的!这个问题的产生往往会让人难以排查,因为不管是浏览器输出,亦或是nginx和php-fpm的log都不会给出任何错误信息,一个隐藏在/public下的.user.ini文件很难让新手发觉出问题。

解决方案:

.user.ini被安全锁定了,先使用

chattr -i .user.ini

将其解锁,然后vim编辑去掉/public,再chattr +i .user.ini加锁。
当然你也可以直接解锁后删掉,这样损失了一定安全性,对于小项目或者本地项目倒没什么意义了。

添加新评论