【问题标题】:Unable to write to a chmod 777 database file on SQlite3 via php 5.3.0无法通过 php 5.3.0 写入 SQlite3 上的 chmod 777 数据库文件
【发布时间】:2010-12-01 21:56:25
【问题描述】:

我正在尝试将数据插入到我的 SQlite3 数据库中(这通过命令行工作)。 我给了 data1.db 文件 777 权限,但它仍然说它无法打开该文件。

我收到此错误:

Warning: SQLite3::exec() [sqlite3.exec]: unable to open database file in /var/www/test.php on line 3

使用此代码:

$db = new SQLite3('./data1.db');
$db->exec("INSERT INTO table1 (fileName) VALUES ('test.txt')");

但奇怪的是,我可以从数据库中读取:(这行得通)

print_r($db->querySingle('SELECT fileName FROM table1', true));

我正在运行 PHP 5.3.0

【问题讨论】:

  • 您不需要对数据库执行权限 - 它不是可执行的脚本或程序。您通常应该避免公共写访问 - 这意味着您不关心谁在任何时候破坏您的数据库(因为如果文件具有公共写权限,任何人都可以这样做)。因此,您最多应该使用 666,最好是 664 或更严格的权限。
  • 是的,我知道,我只是在测试它,看看这是否是错误。 (幸运的是不是)。将其权限改回 644 并将其移到 www 目录之外。

标签: php sql sqlite


【解决方案1】:

包含 SQLite 文件的文件夹必须可由网络用户写入,如果您想对其进行更改。 .db 文件可写是不够的。

Why can't DBD::SQLite insert into a database through my Perl CGI script?

【讨论】:

  • sudo chown www-data. .
【解决方案2】:

尝试将 sqlite 用户添加到拥有 /var/www 目录的组中,或者手动 chown -R user:user /var/www/ ,该目录需要 sqlite 用户可写。

【讨论】:

  • 递归更改目录及其下所有文件的所有权可能是一个非常糟糕的主意,如果只需要授予 Web 服务器用户帐户对目录和其中一个文件的写入权限。
【解决方案3】:

注意,如果你用 CLI 运行 PHP,你必须使用“sudo -u www-data php script.php”,这样 PHP 才能在 sqlite 上写。

【讨论】:

    猜你喜欢
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 2023-03-09
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多