在WHM64升级后无法访问eximstats sqlite3 db

时间:2017-06-12 12:45:53

标签: php pdo sqlite cpanel whm

WHM 64升级后,无法访问eximstat db。 MySQL代码更改为PDO以访问sqlite3 db,如下所示:

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

失败,推迟表都是空白的。事实上,在var / cpanel目录中创建了一个新的空白文件,而不是连接到eximstats db。令人惊讶的是,CPanel:'查看已发送摘要'正确获取信息,但我无法访问驻留在域中的脚本。

非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

在与cPanel的出色支持下进行聊天时,我们发现了这一点:

eximstats_db.sqlite3表的权限存在问题:您尝试以非root用户身份访问数据库,但数据库由root拥有,只能由root写入。

理论上,您应该能够通过将SQLITE3_OPEN_READONLY标志传递给调用来直接访问该文件,以打开文件,如下所示:

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

因此授予对eximstats_db.sqlite3表的读访问权限(注意!其中有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'!