2014-01-24 42 views
2

我在這裏有一個奇怪的情況。重寫創建一個PDO對象

我試圖創建一個PDO對象,像這樣:

$dbh = new PDO('mysql:host='.$hostname.';dbname='.$dbname,$username, $password); 

我已經在我的.htaccess文件改寫ON。當我嘗試使用,這將觸發一個重寫規則的URL來運行腳本,它讓我看到以下錯誤:

Fatal error: Class 'PDO' not found 

我有一個目錄,劇本,名叫PHP一個例外重寫規則,這樣:

RewriteRule ^(php)($|/) - [L] 

如果我直接從目錄運行腳本,它運行正常,沒有錯誤。

我不知道爲什麼會發生這種情況。任何線索?

謝謝

+0

在這兩種情況下,您是通過網絡服務器運行腳本嗎? – andho

+0

請嘗試以下測試:www.qualocep.com/dbc/和www.qualocep.com/php/dbc.php –

回答

0

解決它。

public_html中有一個空的php.ini,我將其刪除,它工作。

謝謝大家

0

編輯:好吧,我看到了我誤解你的問題了一點,但我仍覺得有什麼不對有關php.ini的路徑。你可以檢查兩個Web調用的phpinfo()輸出。答案的基本思想保持相同的陳述如下(與第二網絡調用替換CLI))

OLD ANSWER

假設,你有更多的共同的Linux發行版之一(Ubuntu的, debian,suse等),你可能有兩個(或更多)php.ini文件。當使用web服務器模塊(它似乎是apache)時,它會被拉出來,另一個用於cli env。根據SAPI,php支持最多一個php.ini。

在較新的debian和ubuntu系統中,php擴展的鏈接方式與apache配置中的sites-available/enabled相同。

如果您在php.ini(默認爲/ usr/local/share/php)的公共位置有一個php-cli.ini的自編譯php外觀。如果存在一個php-cli.ini,它將被用來代替cli命令的php.ini。

(手動參考:http://de2.php.net/manual/en/configuration.file.php

如何找出: 獲取phpinfo()輸出爲INFO_GENERAL部分從您的網絡服務器。爲了達到這個目的,可以在一個web可訪問的目錄(例如DocumentRoot)中創建一個簡單的php文件。記得在獲得您需要的信息後將其刪除!請將'/ var/www'調整爲與您的配置相匹配的內容。

$> echo '<?php phpinfo(INFO_GENERAL);' > /var/www/info.php 

現在去你的瀏覽器並打開http://your.host.name/info.php並查找配置屬性「配置文件(php.ini中)路徑」。請注意這個地方,或只是打開頁面供以後參考。

在你的cli上,這也很容易。下面的例子是我的shell中的一個剪輯。

[email protected] ~$ 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失蹤)
  • 檢查網絡服務器php.ini的任何你不想在cli版本中,然後通過CLI複製網絡服務器php.ini php.ini(Do先備份)。
  • 刪除cli或web服務器php.ini,將其他php.ini的符號鏈接到已刪除的位置。 (不是最好的方法,但我在客戶服務器上看到了很多)。
+0

謝謝您的回覆! phpinfo現在已經顯示,只需訪問www.qualocep.com/dbc/或www.qualocep.com/php/dbc.php –

+0

你認爲它可能在重寫URL時使用一個php.ini,當它不? –