神秘的.user.ini文件
神秘的.user.ini文件
.user.ini究竟是个神秘东东?
我们看看官方怎么说:
http://php.net/manual/zh/configuration.file.per-user.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 设置可被识别。
小白,又举手了,什么是PHP_INI_*模式呢?
官方是这样说的:
配置可被指定的范围(http://php.net/manual/zh/configuration.changes.modes.php )
这些模式决定着一个 PHP 的指令在何时何地,是否能够被设定。手册中的每个指令都有其所属的模式。例如有些指令可以在 PHP 脚本中用 ini_set() 来设定,而有些则只能在 php.ini 或 httpd.conf 中。
例如 output_buffering 指令是属于 PHP_INI_PERDIR,因而就不能用 ini_set() 来设定。但是 display_errors 指令是属于 PHP_INI_ALL 因而就可以在任何地方被设定,包括 ini_set()。
PHP_INI_*模式的定义
模式 含义
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配置选项列表(http://php.net/manual/zh/ini.list.php )
有点意思,并不是所有的配置 .user.ini 都能修改,比如 disable_functions ,upload_max_filesize 。
千年未解之谜,是不是在这里找到了答案?
访问php页面出现“No input file specified”,尝试各种办法(https://jingyan.baidu.com/article/dca1fa6f8d623ff1a44052e8.html ) 无果,你是否开始怀疑自己人品,是否开始怀疑肾亏了,是否觉得自己这么年轻就不行了?
绝望中,你是否发现你的网站目录中有个叫 .user.ini 的文件,一气之下,决定删了它,哦,没错,是个办法。
啥? .user.ini 删不掉,是不是觉得自己真的不行了?
[root@Tech1024]# rm -rf .user.ini rm: cannot remove ‘.user.ini’: Operation not permitted
来看一下,该文件的属性
[root@Tech1024]# lsattr .user.ini ----i--------e-- .user.ini
没错,文件被锁定了,不能修改,那么我们去除文件锁定属性
[root@Tech1024]# chattr -i .user.ini
是不是可以删除了,你是不是喜极而泣,啊,自己终于又行了。
哎,小白可能觉得自己又不行了,怎么还是“No input file specified”啊?
年轻人,别着急,看看官方吧(http://php.net/manual/zh/configuration.file.per-user.php )。
user_ini.cache_ttl 控制着重新读取用户 INI 文件的间隔时间。默认是 300 秒(5 分钟)。
……
5分钟艰难的过去了,你是否再一次喜极而泣:哎,自己终究还是行了。
.user.ini有什么用呢?
好奇请猛戳 https://lnmp.org/faq/lnmp-vhost-add-howto.html#user.ini
最后
作为一个IT职业人,不论从事什么行业,铭记两点 技术和态度,技术决定了你的存在,态度决定了你能存在多久。
原文 http://www.tech1024.com/original/2949.html
原文地址:https://www.cnblogs.com/techone/p/11772083.html
- 【SQLServer】记一次数据迁移-标识重复的简单处理
- Django用户登录与注册系统
- 洛谷P1450 [HAOI2008]硬币购物
- 一个完整的Django入门指南(二)
- 一个完整的Django入门指南(三)
- 1.Django自学课堂 模板的使用
- 23.Django基础
- SpringBoot开发案例之整合Quartz注入Service
- 谈谈代码质量问题
- SpringCloud config配置文件加密
- SpringCloud服务比较快的下线配置
- 洛谷P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold
- 24.Django路由规则
- 洛谷P2852 [USACO06DEC]牛奶模式Milk Patterns
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- java序列化和序列化ID的作用
- python函数式编程
- 让Vim打造成强大的IDE,附_vimrc的配置和使用
- python 中面向切面编程AOP和装饰器
- HashMap&ConcurrentHashMap&HashTable
- python中的垃圾回收机制
- python中值传递还是引用传递?
- 基于Docker+Jenkins+Git的集成开发环境搭建
- python 函数的本质理解
- centOS(离线) off-line install docker-ce
- Java 工厂 Simple Factory&Factory&Abstract Factory
- python 性能的优化
- python中列表的常见操作
- Aop 源码解读
- python字典的合并排序添加查询