我在这里很奇怪。
我正在尝试创建一个PDO对象,例如:
$dbh = new PDO('mysql:host='.$hostname.';dbname='.$dbname,$username, $password);
我在.htaccess文件中重写。当我尝试使用会触发重写规则的URL运行脚本时,它向我显示以下错误:
Fatal error: Class 'PDO' not found
我有一个例外重写脚本为php的目录的例外规则,如下:
RewriteRule ^(php)($|/) - [L]
如果我直接从目录中运行脚本,则它正常运行,没有erros。
我不知道为什么会发生这种情况。有线索吗?
谢谢
编辑:好的,我看到我已经误解了您的问题,但是我仍然认为php.ini路径有问题。您可以检查两个Web调用的phpinfo()输出吗?答案的基本思想保持与下面所述(用第二个网络呼叫替换CLI;)
)旧答案
假设您拥有更常见的Linux发行版之一(Ubuntu,Debian,Suse等),则可能有两个(或更多)Php.ini文件。使用Web服务器模块(似乎是Apache)和一个用于CLI Env的一个时,将拉动的一个。PHP最多支持一个php.ini。
在新的Debian和Ubuntu Systems中,PHP扩展名与Apache配置中的网站可用/启用相同的方式链接。
如果您有一个自我编译的PHP查找php.ini的共同位置的php-cli.ini(默认情况下是/usr/usr/local/share/php)。如果存在php-cli.ini,则将使用CLI命令而不是php.ini。
(手动参考:http://de2.php.net/manual/en/en/configuration.file.php)
如何找出答案:从您的Web服务器中获取info_general部分的phpinfo()输出。为了实现这一目标,请在可访问的目录(例如DocumentRoot)中创建一个简单的PHP文件。请记住在获得所需的信息后删除它!请将"/var/www"调整为与您的配置匹配的东西。
$> echo '<?php phpinfo(INFO_GENERAL);' > /var/www/info.php
现在转到您的浏览器并打开http://your.host.name/info.php,并查找配置属性"配置文件(php.ini)路径"。请注意,在某个地方或仅将页面打开以供稍后参考。
在您的CLI上这也很容易。下面的示例是我的外壳的剪接。
mmueller@bsd ~$ php -i | grep ini
Configuration File (php.ini) Path => /usr/local/etc/php/5.5
Loaded Configuration File => /usr/local/etc/php/5.5/php.ini
[... omitted the tail]
比较这两个路径,看看它们是否不同。
要查看为什么会发生这种情况,请查看"配置命令"部分。您可能会找到三个重要的配置参数。PHP寻找其配置的这三个影响。
'--sysconfdir=/usr/local/etc/php/5.5'
'--with-config-file-path=/usr/local/etc/php/5.5'
'--with-config-file-scan-dir=/usr/local/etc/php/5.5/conf.d'
如果要确保相同的配置,则可以执行以下操作之一:
- 只需将
extension=pdo_mysql
添加到Web服务器版本,看看是否足够 - 删除其他CLI配置(如果存在),这将使PHP使用所有SAPI的php.ini(在执行此操作之前对文件进行备份!)。然后,您需要将规则合并到所需的php.ini中。(就您而言,似乎缺少
extension=pdo_mysql
) - 检查Web服务器php.ini是否您不想在CLI版本中拥有的任何内容,然后通过CLI php.ini复制Weberver php.ini(首先执行备份)。
- 删除CLI或WebServer php.ini,将另一个php.ini符合到已删除的位置。(不是最好的方法,但是我在客户服务器上看到了很多)。
解决它。
public_html中有一个空的php.ini,我删除了它,它起作用了。
谢谢你全部