使用 Nginx 系统环境的人多多少少也该遇到过 .user.ini,它比 .htaccess 用的更广,首先要知道,php.ini 是 PHP 的核心配置文件,在 PHP 启动时被读取,按照此说法,不管服务器是 Nginx/Apache/IIS,但凡使用 CGI/FastCGI 来解析 PHP 时,PHP 会优先搜索目录下所有的 .ini 文件,并应用其中的配置,类似于 Apache 的 .htaccess,但语法与 .htacces 不同,跟 php.ini 几乎一致。
解决方法
1、user.ini 文件无法删除,是由于文件权限已经被锁定,需要先解除 user.ini 文件锁定,首先通过命令进入 user.ini 文件所在目录执行以下命令,去掉保护,命令如下:
# 进入所在目录 cd /文件所在目录路径 # 解除 user.ini 文件锁定 chattr -i .user.ini
2、通过 SFTP 手动进入目录删除,或通过 rm 命令来执行删除 .user.ini 文件,命令如下:
# 删除 .user.ini 文件 rm -rf .user.ini
什么是 .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 文件实际就是一个可以由用户自定义的 php.ini,能够自定义的设置是模式为 PHP_INI_PERDIR 或者 PHP_INI_USER 的设置,除了PHP_INI_SYSTEM 以外的模式都是可以通过 .user.ini 来设置的,是能被动态加载的 INI 文件。
也就是说我修改了 .user.ini 后,不需要重启服务器中间件,只需要等待 user_ini.cache_ttl 所设置的时间(默认为300秒),即可被重新加载。
学习要点
首先要了解下 chattr 命令,Linux chattr 命令用于改变文件属性,这项指令可改变存放在 ext2 文件系统上的文件或目录属性,chattr 命令用来改变文件属性,系统不允许对这个文件进行任何的修改,如目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
相关文章
发表评论
评论列表