页面报错 No input file specified

如往常一样我熟练的操作LNMP 部署完系统后.

在打开页面一看OJbK,关机,下钟。第二天早上收到了销售的消息,说是页面偶尔打不开,一看截图是No input file specified.

瞬间感觉不敢相信,到了公司页面打开一看,的确有这样的问题。王医生熟练的打开度娘,没想到search我的问题,没想到的是,遇到这个问题的小伙伴还真不少。

看完之后,貌似是php的一个文件搞的鬼 — .user.ini

我们看看PHP的官方怎么说 -> 传送门

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

这个时候就有小白举手道:表示没看懂~

众所周知,php.ini是php的核心配置文件,在 PHP 启动时被读取,那么web目录的其他ini文件也是可以被php识别,官方还说了

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

这样说的话,所有的配置都可以被.user.ini重新配置修改?噢,买噶的!

你想多了,官方还说了:

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

这个时候角落的张三突然站起来说到:什么是PHPINI*模式呢?

官方是这样说的:

配置可被指定的范围(php.net/manual/zh/configuration.cha...

这些模式决定着一个 PHP 的指令在何时何地,是否能够被设定。手册中的每个指令都有其所属的模式。例如有些指令可以在 PHP 脚本中用 ini_set() 来设定,而有些则只能在 php.inihttpd.conf 中。

例如 output_buffering 指令是属于 PHP_INI_PERDIR,因而就不能用 ini_set() 来设定。但是 display_errors 指令是属于 PHP_INI_ALL 因而就可以在任何地方被设定,包括 ini_set()

PHPINI*模式的定义

/**模式  含义
PHP_INI_USER    可在用户脚本(例如 ini_set())或 Windows 注册表(自 PHP 5.3 起)以及 .user.ini 中设定
PHP_INI_PERDIR  可在 php.ini,.htaccess 或 httpd.conf 中设定
PHP_INI_SYSTEM  可在 php.ini 或 httpd.conf 中设定
PHP_INI_ALL 可在任何地方设定**/

也就是说只有PHP_INI_USER模式,才可以在 .user.ini 中设定,那么哪些配置可以在 .user.ini 中设定呢?

php.ini配置选项列表(php.net/manual/zh/ini.list.php

有点意思,并不是所有的配置 .user.ini 都能修改,比如 disable_functionsupload_max_filesize

千年未解之谜,是不是在这里找到了答案?

  • 访问php页面出现“No input file specified”,尝试各种办法(jingyan.baidu.com/article/dca1fa6f... ) 无果,你是否开始怀疑自己人品,是否开始怀疑肾亏了,是否觉得自己这么年轻就不行了?

    绝望中,你是否发现你的网站目录中有个叫 .user.ini 的文件,一气之下,决定删了它,哦,没错,是个办法。

  • 啥? .user.ini 删不掉,是不是觉得自己真的不行了?

[root@BlackJoker]# rm -rf .user.ini 
rm: cannot remove ‘.user.ini’: Operation not permitted

来看一下,该文件的属性

[root@BlackJoker]# lsattr .user.ini 
----i--------e-- .user.ini

没错,文件被锁定了,不能修改,那么我们去除文件锁定属性

[root@BlackJoker]# chattr -i .user.ini

是不是可以删除了,你是不是喜极而泣,啊,自己终于又行了。

  • 哎,旁边的李四可能觉得自己又不行了,怎么还是“No input file specified”啊?
    年轻人,别着急,看看官方吧(php.net/manual/zh/configuration.fil... )。
    user_ini.cache_ttl 控制着重新读取用户 INI 文件的间隔时间。默认是 300 秒(5 分钟)。
    …..
    5分钟艰难的过去了,你是否再一次喜极而泣:哎,自己终究还是行了。

.user.ini有什么用呢?

好奇请猛戳 lnmp.org/faq/lnmp-vhost-add-howto....

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

一看 .user.ini 就知道是宝塔

2年前 评论
JokerWang (楼主) 2年前
sunny123456 2年前

user.ini 还是挺好的, 可以限制项目可以访问的目录, 安全一点. 还可以动态的添加一些选项,比如打开关闭 opcache

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!