【LNMP】提示Nginx PHP “No input file specified”错误的解决办法

原理:

任何对.php文件的请求,都简单地交给php-cgi去处理,但没有验证该php文件是否存在,PHP文件不存在,没办法返回普通的404错误,它返回 一个404,并带上一句”No input file specified”,另外,还可能跟 路径或者 权限有关系,或者SCRIPT_FILENAME 变量没有被正确的设置(这在nginx是最常见的原因)。

解决办法:

1、打开 php.ini 文件 

vim /usr/local/php/etc/php.ini

把   cgi.fix_pathinfo=0         改为    cgi.fix_pathinfo=1

把   cgi.force_redirect=1     改为    cgi.force_redirect=0

2、修改文件权限

# cd /home/wwwroot   #这里是自己的web 项目目录

# chown -R www:www ./*   

# chmod -R 755 ./*

#lnmp restart    #记得重启服务   最粗暴的重启方法  哈哈

如果项目里边有 .user.ini 文件,你就很头痛了 ,各种坑

如果重启服务后,访问项目出现下面错误,那说明  .user.ini 没有权限

chown: changing ownership of ‘./www.test.com/.user.ini’: Operation not permitted

这个时候 进入www.test.com 项目目录  执行

cd /home/wwwroot/www.test.com

chattr +i .user.ini

重启ngxin服务,下面是见证奇迹的时刻

/etc/init.d/nginx reload 

项目就可以运行了

补充  .user.ini 文件说明

自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 风格的 INI 文件。此类文件被 CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用 .htaccess 文件有同样效果。

除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。

在 .user.ini 风格的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 设置可被识别。

两个新的 INI 指令,user_ini.filename 和 user_ini.cache_ttl 控制着用户 INI 文件的使用。

user_ini.filename 设定了 PHP 会在每个目录下搜寻的文件名;如果设定为空字符串则 PHP 不会搜寻。默认值是 .user.ini

user_ini.cache_ttl 控制着重新读取用户 INI 文件的间隔时间。默认是 300 秒(5 分钟)。

详情请参考:http://www.php.net/manual/zh/configuration.file.per-user.php

你可能感兴趣的:(PHP,Nginx)