我已经编译了 PHP 5.3,除了从命令行运行 PHP 时,一切似乎都运行正常。
当我跑步时:
# php --ini
它产生这个输出:
Configuration File (php.ini) Path: /etc/php5/apache2
Loaded Configuration File: /etc/php5/apache2/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
当我创建一个页面并输出 phpinfo(); 我得到这个输出:
Configuration File (php.ini) Path: /etc/php5/apache2
Loaded Configuration File: /etc/php5/apache2/php.ini
Scan for additional .ini files in: /etc/php5/apache2/conf.d
Additional .ini files parsed: /etc/php5/apache2/conf.d/curl.ini, /etc/php5/apache2/conf.d/gd.ini, /etc/php5/apache2/conf.d/imagick.ini, /etc/php5/apache2/conf.d/memcache.ini, /etc/php5/apache2/conf.d/mhash.ini, /etc/php5/apache2/conf.d/ming.ini, /etc/php5/apache2/conf.d/mysql.ini, /etc/php5/apache2/conf.d/mysqli.ini, /etc/php5/apache2/conf.d/pdo.ini, /etc/php5/apache2/conf.d/pdo_mysql.ini, /etc/php5/apache2/conf.d/pdo_sqlite.ini, /etc/php5/apache2/conf.d/pspell.ini, /etc/php5/apache2/conf.d/recode.ini, /etc/php5/apache2/conf.d/snmp.ini, /etc/php5/apache2/conf.d/sqlite.ini, /etc/php5/apache2/conf.d/tidy.ini, /etc/php5/apache2/conf.d/xmlrpc.ini, /etc/php5/apache2/conf.d/xsl.ini
我不明白为什么当通过 apache 执行 php 时会加载额外的 .ini 文件,而使用 CLI 时则不会。有人有什么想法吗?
以下是我用于编译 PHP 的精简配置:
'./configure' \
'--prefix=/usr' \
'--with-config-file-path=/etc/php5/apache2' \
'--with-config-file-scan-dir=/etc/php5/apache2/conf.d'
我需要在命令行上运行某些东西来加载 PDO mysql 驱动程序,我猜这是问题的根源。
我们非常欢迎任何建议。
答案1
我不知道为什么 php 在 cli 中运行时不使用 config-file-scan-dir(您确定您加载的二进制文件是好的吗?我的意思是您重建的那个)。
但您可以使用 php -c /etc/php5/apache2/conf.d 或将 PHP_INI_SCAN_DIR 设置为 /etc/php5/apache2/conf.d 作为解决方法。
答案2
问题不在于 php 最终没有包含额外的 .ini 文件。
我重新编译了 php,发现“make install”命令未能完成。产生的错误是:
apxs:Error: Activation failed for custom /etc/apache2/httpd.conf file..
apxs:Error: At least one `LoadModule' directive already has to exist..
由于 Apache 附带了 apache2.conf(其中包含模块指令和 httpd.conf),因此 httpd.conf 实际上是空的。
简单添加:
# Dummy LoadModule directive to aid module installations
# LoadModule dummy_module /usr/lib/apache2/modules/mod_dummy.so
httpd.conf 允许 apxs 运行而不会出现任何错误,并且完整的 php 安装成功完成。
然后,PDO 驱动程序即可在 CLI 以及通过 Apache 获得。
作为半径建议,本质上,我没有使用好的二进制文件。谢谢你的帮助。
答案3
我遇到了同样的问题。只需检查 /etc/php5/conf.d/ 中每个文件的所有者和权限即可。它必须由 root 拥有,并且任何其他用户都可以读取。