2017-06-12 52 views
1

WHM 64升級後,無法訪問eximstat數據庫。 MySQL代碼更改爲用於訪問sqlite3 db的PDO,如下所示:WHM64升級後無法訪問eximstats sqlite3數據庫

$db = new PDO('sqlite:/var/cpanel/eximstats_db.sqlite3', DB_USER, DB_PASSWORD); 

失敗,延遲表全部爲空。實際上,在var/cpanel目錄中創建了一個新的空白文件,而不是連接到eximstats db。令人驚訝的是,CPanel:'查看發送摘要'提取信息都正確,但我不能訪問我的腳本,這是駐留在域。

任何幫助,非常感謝。

謝謝!

回答

0

在與出色的支持的cPanel的聊天,我們想通了這一點:

它是與eximstats_db.sqlite3表權限的問題:您嘗試訪問該數據庫作爲一個非root用戶,但數據庫由root擁有,只能由root用戶寫入。

從理論上講,你應該能夠直接傳遞SQLITE3_OPEN_READONLY標誌調用打開文件訪問該文件所列出的位置:

https://secure.php.net/manual/en/sqlite3.open.php

因此授予讀取訪問eximstats_db.sqlite3表( !NB有其中3):

-rw----r-- 1 root root 135168 Jun 10 06:06 eximstats_db.sqlite3 
-rw----r-- 1 root root 32768 Jun 12 14:34 eximstats_db.sqlite3-shm 
-rw----r-- 1 root root 1058512 Jun 12 14:34 eximstats_db.sqlite3-wal 

,並使用

$dbh = new SQLite3('/var/cpanel/eximstats_db.sqlite3',SQLITE3_OPEN_READONLY); 

應該可以工作,但事實並非如此。它似乎是PHP中SQlite3庫的一個限制:即使對於只讀訪問,它也想鎖定對文件的訪問權限。所以你需要給他們寫訪問權限:

-rw----rw- 1 root root 135168 Jun 10 06:06 eximstats_db.sqlite3 
-rw----rw- 1 root root 32768 Jun 12 14:34 eximstats_db.sqlite3-shm 
-rw----rw- 1 root root 1058512 Jun 12 14:34 eximstats_db.sqlite3-wal 

就是這樣。之後,你會看到延期,失敗和其他表格。 (當然,在現實生活中,你可能想要創建一個組,並給予該組只讀,而不是所有人)。


如果您不能更改權限對這些數據庫文件,然後我可以看到的唯一的解決辦法是將文件複製到域,更改權限那裏,然後轉而使用這些文件:

$target = '/var/cpanel/eximstats_db.sqlite3-shm'; 
$newfile = '/home/yourdomain/where/your/script/is/eximstats_db.sqlite3'; 
copy($target, $newfile); 
chmod($newfile, 0777); 
// same with all 3 files.. 
$dbh = new SQLite3('eximstats_db.sqlite3'); // not '/var/cpanel/eximstats_db.sqlite3'! 
+0

親愛的所謂@Konservin, 非常感謝您的寶貴意見。但在我的情況下,'root'用戶對db文件具有完全權限,並且您建議的代碼段引發異常'無法打開數據庫:無法打開數據庫文件'。 謝謝 –

+0

@MithaVivek你確定你是以root身份連接嗎?你說:「我無法訪問我的腳本,該腳本駐留在域中。」而且AFAIK,SQLite沒有用戶名/密碼的概念,那麼你怎麼能說你是root?順便說一句您是否嘗試更改這3個文件的權限? – Konservin

+0

由於我們在授予數據庫寫入權限方面有限制,因此我們處於滿足此要求的情況。希望,我們將在下次更新中解決這個問題。感謝很多親愛的朋友。 –