【问题标题】:Cant access eximstats sqlite3 db after WHM64 upgradeWHM64 升级后无法访问 eximstats sqlite3 db
【发布时间】:2017-11-13 22:53:32
【问题描述】:

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

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

failues, defers 表都是空白的。事实上,在 var/cpanel 目录中创建了一个新的空白文件,而不是连接到 eximstats db。令人惊讶的是,CPanel:'View Sent summary' 可以正确获取信息,但我无法在驻留在域中的脚本中访问。

非常感谢任何帮助。

谢谢!!

【问题讨论】:

    标签: php pdo sqlite cpanel whm


    【解决方案1】:

    在 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
    

    就是这样。之后,您将看到 defers、failures 和其他表。

    (当然,在现实生活中,您可能希望创建一个组并仅授予该组读写权限,而不是每个人)。


    如果您无法更改这些数据库文件的权限,那么我能看到的唯一解决方案是将文件复制到域,更改那里的权限,然后改用这些文件:

    $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'!
    

    【讨论】:

    • 亲爱的@Konservin,非常感谢您的宝贵意见。但在我的情况下,“root”用户对 db 文件具有完全权限,并且您建议的代码段抛出异常“无法打开数据库:无法打开数据库文件”。谢谢
    • @MithaVivek 你确定你是以 ​​root 身份连接的吗?您说“我无法访问驻留在域中的脚本”。而且AFAIK,SQLite没有用户名/密码的概念,所以你怎么能说你是root?顺便说一句,您是否尝试更改这 3 个文件的权限?
    • 由于我们在授予数据库写入权限方面存在限制,因此我们可以满足此要求。希望我们会在下次更新时解决这个问题。非常感谢亲爱的朋友。
    • 在这种情况下,尝试将文件复制到您可以更改权限的位置,并使用 cron 作业。 (我也更新了答案。)
    • 这种临时方法行不通,因为我们的脚本在任何尝试访问它时总是收到警告“权限被拒绝”/“访问被拒绝”。我已经尝试过 is_file 。 :-(
    猜你喜欢
    • 1970-01-01
    • 2020-11-13
    • 2018-01-27
    • 2017-08-01
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 2021-09-17
    • 2022-01-04
    相关资源
    最近更新 更多