更新 2(问题已解决):
问题是编译期间参数不正确。有关详细信息,请参阅我的回答。
更新:
以下命令的结果可能会对这个问题有所启发!
# php-cgi -m
[PHP Modules]
...
PDO
pdo_sqlite
...
这里没有 pdo_mysql 扩展...为什么?php.ini 与 CLI 中用于 PHP 的相同,可加载 pdo_mysql 扩展(通过 extension_dir)
原始问题:
在 Ubuntu 12.04 上编译 PHP 5.5.1
# php -v
PHP 5.5.1 (cli) (built: Aug 22 2013 02:57:03)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
PDO MySQL 扩展在 CLI 上加载:
# php --ri pdo_mysql
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.11-dev - 20120503 - $Id: 40933630edef551dfaca71298a83fad8d03d62d4 $
Directive => Local Value => Master Value
pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock
当我使用 CGI/FastCGI 访问页面时,PDO MySQL 扩展不会加载
<?php phpinfo(); ?>
PDO
PDO support enabled
PDO drivers sqlite
在两种情况下,都使用相同的 extension_dir 和 php.ini 文件。
php.ini path: /usr/local/lib/php.ini
extension_dir: /usr/local/lib/php/extensions/no-debug-non-zts-20121212
extension_dir 的内容:
#ls /usr/local/lib/php/extensions/no-debug-non-zts-20121212
mcrypt.so opcache.a opcache.so pdo.so pdo_mysql.so
如何让 PHP 在 FastCGI 中运行以识别和加载 PDO MySQL 扩展?
答案1
伙计,这真是一次令人沮丧的经历……
事实证明,我所遵循的一组指示使用了一个配置参数来为旧版本的 PHP 启用 CGI(这个参数在 PHP 的生命周期中已经发生了 3 次变化),如果你查看手册,仍然不是 100% 清楚: http://php.net/manual/en/configure.about.php
我必须使用该--enable-cgi
选项重新编译,不是--with-fastcgi
(<4.3),也不是--enable-fastcgi
(<5.3),也不是--disable-cgi
(>5.3,文档提到这会启用 fastcgi,但似乎与我的情况不同)
从好的方面来说,我有借口升级到 5.5.2 :)