通过重写创建一个PDO对象



我在这里很奇怪。

我正在尝试创建一个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,我删除了它,它起作用了。

谢谢你全部

最新更新