解决PHP5.6+版本“No input file specified”问题
1. 问题描述
在使用PHP5.6+版本的时候,我们有时候会遇到"No input file specified"的问题,这个问题其实是指没有指定脚本文件,导致访问不到对应的php文件。
2. 问题原因
出现这个问题的原因主要是因为PHP5.6之后,FPM的路径匹配规则做了改变,比如我们在Nginx中配置的脚本路径为:`/data/web/test.php`,但实际上FPM的路径为:`/data/web/test.php/`。这意味着,如果我们在Nginx中指定的是`fastcgi_param SCRIPT_FILENAME /data/web/test.php;`这样的文件路径,请求实际上是访问不到PHP-FPM的。这个问题在5.6中被修复了,PHP-FPM会自动尝试在文件夹中查找相同名称的脚本作为默认文件。所以如果没有指定文件名,就会出现No input file specified的错误。
3. 解决方法
3.1 修改Nginx配置
修改Nginx配置,将fastcgi参数的值修改为正确的值。例如:`fastcgi_param SCRIPT_FILENAME /data/web/test.php/;`
3.2 修改PHP-FPM配置文件
另外一种解决方法是在PHP-FPM配置文件中修改cgi.fix_pathinfo参数的值。可在php-fpm.conf或php-fpm/www.conf(根据不同的php版本而定,例如php7中的配置文件为:/etc/php/7.0/fpm/pool.d/www.conf)中进行修改。将其值改为0。
```
cgi.fix_pathinfo=0
```
4. 更进一步的调试方式
如果以上两种解决方法都没有解决问题,我们还可以根据以下方式进行调试:
4.1 检查权限
首先,我们需要确保PHP文件的权限和所属用户/组是否正确。这可以通过以下命令来检查:
ls -l /data/web/test.php
在输出中,我们需要确保文件权限正确(通常为644)并且文件所属用户/组与Nginx和PHP-FPM的用户/组匹配。
4.2 检查日志文件
其次,我们需要检查PHP-FPM和Nginx的错误日志文件,以了解更多信息。 默认情况下,PHP-FPM和Nginx的日志文件路径如下:
```
/var/log/php-fpm.log
/var/log/nginx/error.log
```
4.3 尝试phpinfo功能
我们还可以尝试访问phpinfo功能,以确保PHP与Nginx和PHP-FPM正确配合。 可以在PHP脚本中调用phpinfo()函数,然后在浏览器中访问该文件。 如果所有内容都正常,则表示Nginx和PHP-FPM正确工作。
5. 总结
"No input file specified"的错误在PHP5.6+版本中很常见。在这篇文章中,我们讲解了两种解决方法,以及更进一步的调试方法。如果遇到这个问题,可以参考此文进行解决。