网站提示no input file specified.怎么办?简单几步教你搞定。

吉云

今天就来聊聊那个烦人的 ‘no input file specified.’ 错误,这玩意儿可真是让人头疼过一阵子。刚好前段时间又碰到,顺手记录下当时是咋一步步搞定的。

那天我正在部署一个新的PHP小项目,用的是常见的LNMP环境,面板用的是宝塔。本地测试跑得好好的,一传到服务器上,配置好域名,一访问,好家伙,屏幕上就给我来个 ‘no input file specified.’。当时心里就“咯噔”一下,感觉这事儿没那么简单。

排查开始:常规检查

网站提示no input file specified.怎么办?简单几步教你搞定。

遇到问题,咱不能慌,先从最基本的开始查起。

  • 文件路径对不对? 我先去服务器上看下,网站根目录、程序文件啥的都在正确的位置,路径配置也没写错。这一步没发现问题。
  • 文件权限够不够? 这是个老生常谈的问题。PHP执行需要有读取文件的权限。我就想着是不是权限设置不对,特别是目录的所有者和组。我参考服务器上其他跑得好好的站点的权限设置,用 chownchgrp 命令,把新项目的目录权限刷一遍,确保运行PHP的用户(通常是 www 或 nobody)有权限访问。命令大概是这样:

chown www:www -R /你的网站目录

网站提示no input file specified.怎么办?简单几步教你搞定。

chmod -R 755 /你的网站目录

改完权限,清下浏览器缓存,再访问,还是老样子,‘no input file specified.’。

深入一点:检查PHP配置

基本的文件问题排除,那问题可能出在PHP或者Web服务器(我用的是Nginx)的配置上。

我想起以前看过资料,说PHP配置文件 `*` 里的某些设置可能会导致这个问题。我就去找 `*` 文件,主要看这几个地方:

    网站提示no input file specified.怎么办?简单几步教你搞定。

  • doc_root:这个设置指定PHP脚本的基础目录。如果这里设置,并且跟Nginx配置里的站点根目录不一致,或者设置得不对,就可能找不到文件。我检查下,我这个 `*` 里 `doc_root` 是注释掉的,或者是空的,这通常是推荐的做法,让Web服务器来决定根目录。所以这里应该没问题。
  • *_pathinfo:这个配置在Nginx + PHP-FPM 模式下比较重要。网上很多说法,有的说要设成1,有的说要设成0。我看下我的配置,是 `*_pathinfo=1`。这个设置通常是为让PHP能正确解析 PATH_INFO 信息。我试着把它改成0,然后重启PHP-FPM服务。

service php-fpm restart

改完再试,结果… 还是不行。得,看来问题不在这儿。我又把 `*_pathinfo` 改回1。

转向Nginx和特定环境

网站提示no input file specified.怎么办?简单几步教你搞定。

既然PHP这边看着没啥毛病,那会不会是Nginx配置或者我用的宝塔面板有什么特殊设置?

我打开站点的Nginx配置文件,仔细看里面的 `location ~ \.php$` 这段,特别是 `fastcgi_param SCRIPT_FILENAME` 这一行。它通常是这样写的:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

这里 `$document_root` 指向的是网站根目录,`$fastcgi_script_name` 是请求的脚本名。我反复确认Nginx配置里 `root` 指令设置的网站根目录路径是正确的,和实际文件存放路径一致。看起来也没错。

这时候,我想起来宝塔面板有个特色功能:“防跨站攻击(open_basedir)”。这个功能有时候会限制PHP脚本的文件访问范围,如果配置不当,也可能导致找不到文件,虽然错误信息不一定总是 ‘no input file specified.’,但也值得怀疑。

我就登录宝塔面板,找到出问题的那个网站设置,点开网站目录选项卡。

网站提示no input file specified.怎么办?简单几步教你搞定。

果然看到“防跨站攻击(open_basedir)”这个选项是勾选着的。

按照网上有些帖子的建议,我尝试先把这个勾去掉,保存一下。

然后,再重新勾选上,再次保存。这个操作据说能让宝塔重新生成正确的配置文件,有时候能解决一些奇怪的问题。

做完这个操作,我心里也没底,就去刷新一下网页。

最终解决

这回成!网页正常打开,‘no input file specified.’ 的错误消失。

网站提示no input file specified.怎么办?简单几步教你搞定。

搞半天,原来是宝塔面板的这个“防跨站攻击”设置在捣鬼。可能是之前的配置有问题,或者是取消再勾选的操作强制刷新底层的某些配置(比如 `.*` 文件,有时候这东西也会影响PHP行为)。虽然具体是哪个环节修复不完全确定,但反正是通过操作这个选项解决。

下次再遇到 ‘no input file specified.’,除检查基本的文件路径和权限、PHP和Nginx配置外,如果你用类似宝塔这样的管理面板,一定别忘检查面板上特有的安全设置或目录限制功能,比如这个“防跨站攻击”。有时候,问题就出在这种意想不到的地方。

总算把这问题记下来,希望能帮到以后也踩到这个坑的朋友们。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]