2017-06-12 51 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

由于我们在授予数据库写入权限方面有限制,因此我们处于满足此要求的情况。希望,我们将在下次更新中解决这个问题。感谢很多亲爱的朋友。 –