如何让PHP 5.3.8读取.user.ini文件?(How do I get PHP 5.3.8

2019-09-17 23:34发布

我已经运行的Apache 2.2.21和5.3.8 PHP在Mac OS X服务器

我想设置在每个目录php.ini中的一些风格的指令。 按照PHP 手册 ,它已经可能的,因为PHP 5.3.0被放置在目录中称为“.users.ini”文件覆盖在每个目录的基础上主要的php.ini运行时配置文件中找到的指令包含要受影响的脚本。

对我来说,这个解决方案是非常可取的使用包含.htaccess文件中php_value和的php_flag指令,但是我已经创建了.user.ini文件是由PHP忽略。

据phpinfo()函数,我.user.ini文件应该被重新缓存每隔5分钟,文件名是否正确设置成“.user.ini”:

user_ini.cache_ttl   300
user_ini.filename    .user.ini

Apache是​​设置为AllowOverides,我已经证实,通过设置.htaccess文件,PHP指令正确地覆盖INI设置我想控制。 我曾尝试最简单的测试文件只包含线.user.ini文件:

display_errors = On

这不工作,全系统目录(= OFF)使用。 然而,相当于.htaccess文件按预期工作,覆盖全系统的指令:

php_flag display_errors on

一个线索我能找到的是神秘的[PHP]在主php.ini文件的开头。 我找不到手册中本节标志的任何提及,所以我想也许有必要先从[PHP]文件。 我尝试添加这对我.user.ini文件的开头,并重新加载我的网页,又等了五分钟,重新装入,以确保我没有加载缓存版本,不幸的是它并没有区别。

其他的线索,我发现如果在上述PHP的同样神秘声明手册描述了如何使用.user.ini文件:“这些文件是由CGI / FastCGI的SAPI才会处理。” 不幸的是,我不知道如何确认满足此条件比其他线在我的phpinfo()输出,说:“GATEWAY_INTERFACE CGI / 1.1”,因为实际上在我的phpinfo字符串“CGI”的任何其他实例( )输出。 我留下的假设,这个谜说法并不重要,并且仅说明该CGI / FastCGI的SAPI做的处理(这意味着什么),而不是警告我说,我需要打开一些东西。 如果我错了纠正我。

还有在同一.user.ini手册使用PHP-FPM时.user.ini文件的处理将无法正常工作的意见一提。 据我所知,我没有使用,但如果有是检查一个简单的方法,让我知道。 这确实提出是否有与该功能冲突和禁用的.user.ini文件的加载其他配置选项或模块的问题。 任何人都知道这个问题的答案?

为了完整起见,我包括我的configure命令,万一有人可以看到一些明显的问题,但我不认为我已经从默认改变了它:

'/private/var/tmp/apache_mod_php/apache_mod_php-53.8~2/php/configure' '前缀= / USR' '--mandir =的/ usr /共享/人'“--infodir =的/ usr /共享/信息 ' - 禁用依赖追踪''--sysconfdir = /私营/等'--with-apxs2 = / usr / sbin目录/ apxs的'--enable-CLI' --with-配置文件-path = /等 ' '--with-的libxml-DIR = / USR' '--with-的OpenSSL = / USR' '--with-的Kerberos = / USR' --with-ZLIB = / USR ''' - -enable-bcmath时 ' '--with-BZ2 = / USR' '--enable-日历' '--with卷曲= / USR' '--enable-EXIF' '--enable-FTP'' --with -gd ' '--with-JPEG-DIR = / BinaryCache / apache_mod_php / apache_mod_php-53.8〜2 /根的/ usr /本地'' --with-PNG-DIR = / BinaryCache / apache_mod_php / apache_mod_php-53.8〜2 /根的/ usr /本地 ' '--enable-GD-天然-TTF' '--with-LDAP = / USR' '--with-LDAP的SASL = / USR' '--enable-MBSTRING'' --enable- mbregex ' '--with-的MySQL = mysqlnd' '--with-的mysqli = mysqlnd' '--with-PDO-的MySQL = mysqlnd' '--with MySQL的-袜子= /变种/ MySQL的/的mysql.sock'' --without梨 ' '--with-的iODBC = / USR' '--enable-shmop' '--with-SNMP = / USR' '--enable皂' '--enable-插座'' - 使-sysvmsg”“ - -enable-SYSVSEM ' '--enable-SYSVSHM' '--enable-WDDX' '--with-XMLRPC' '--with-的iconv-DIR = / USR' '--with-XSL = / USR'' - -enable-Zend的多字节” '--enable拉链' '--with-PCRE-正则表达式= / USR'

(既然你,亲爱的读者,已经远远阅读这一点,如果你看到一些奇怪的关于上述配置这是不相关的,可随时提它连接到这个原帖评论)

Answer 1:

从其他成员的意见收集了一些线索,我已经能够做到足够的研究来正确地回答这个问题以供将来参考。

正如解释的一般安装注意事项 PHP文档的部分,PHP可以一起在以下两种方式之一Apache服务器上运行:

  1. 直接在Apache作为Apache模块(mod_php的),也称为SAPI(服务器应用编程接口),或
  2. 作为与Apache通过CGI(公共网关接口)或快速CGI协议一个单独的可执行通信。

当PHP运行作为内阿帕奇(在Mac OS X服务器上的默认设置)的模块,PHP没有给文件系统的直接访问,和Apache提供一切PHP需要做的工作。 这意味着拿起最后一分钟,从文件系统中每个目录的配置选项是不是一种选择。 这意味着Apache需要负责移交任何每目录设置到PHP处理器,因此必须通过htaccess的设置(其Apache进程,并传递到PHP)

当PHP运行作为它自己的进程(通过CGI或FastCGI的使用Apache通信),PHP的处理器能够直接访问的目录结构,它开始处理您的脚本之前,所以它是可能加载基于每个额外的配置文件目录基础这会影响之类的东西解析错误显示(无法在脚本的运行时间来决定,因为如果脚本不解析,PHP可以不遵循其中的任何指示)。

因此短期的版本是,如果PHP运行作为Apache模块时,需要设置每目录配置指令虽然.htaccess文件,或者切换到通用网关接口。



Answer 2:

根据该手册还有更远:

“如果你使用的是Apache,使用.htaccess文件达到相同的效果。”

此外,你通过Apache运行在CGI或FastCGI的模式PHP?



文章来源: How do I get PHP 5.3.8 to read a .user.ini file?