错误消息 PDOException: open_basedir 禁止打开(我的文件)

问题描述 投票:0回答:0

我刚刚安装了 php7.4-sqlite3 扩展,并尝试在该服务器上第一次使用它。

我有以下从 CLI 运行的简单 PHP 脚本:

#!/usr/bin/env php
<?php

require_once('lovefunctions.php') ;
$lov->setLogName(LoveFunctions::MONTHLY_LOG_WITH_HEADER) ;

$db = pdoSQLITE('/m/arm.db') ;
$debug = true ;


function pdoSQLITE($dbPath, $flags = 0) {
    if (substr($dbPath, 0, 7) != 'sqlite:')
        $dbPath = sprintf('sqlite:%s/combadd.sqlite', $dbPath) ;
    try {
        $handle = new PDO($dbPath) ;
        return $handle ;
        }
    catch (Exception $e) {
        throw new Exception($e) ;
        }
    }

脚本名为 /usr/local/bin/browse-arm-db。

当我运行此脚本时,会生成以下输出:

[29-Jul-2023 19:55:14 America/New_York] PHP Fatal error:  Uncaught Exception: 
PDOException: open_basedir prohibits opening /m/arm.db/combadd.sqlite in /usr/local/bin/browse-arm-db:15
Stack trace:
#0 /usr/local/bin/browse-arm-db(15): PDO->__construct()
#1 /usr/local/bin/browse-arm-db(7): pdoSQLITE()
#2 {main} in /usr/local/bin/browse-arm-db:19
Stack trace:
#0 /usr/local/bin/browse-arm-db(7): pdoSQLITE()
#1 {main}
  thrown in /usr/local/bin/browse-arm-db on line 19

根据phpinfo(),open_basedir值为空:

> echo '<?php phpinfo();'|php|grep 'open_basedir'
open_basedir => no value => no value

并且,如果我理解该变量的值,这应该就是我想要的。 php.ini 中的描述如下:

; open_basedir, if set, limits all file operations to the defined directory
; and below.  This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file.
; Note: disables the realpath cache
; http://php.net/open-basedir
open_basedir =

(注意:我使用 file() 和 file_get_contents 等从任何目录(包括这个文件)访问文件都没有问题。只是这个 PDO 打开是反对的。

我搜索此解决方案没有返回任何结果 - 令人惊讶的是,谷歌除了this之外,对这个主题几乎没有什么可说的,它没有答案,对我一点帮助也没有。

我可以做什么才能使用 PDO sqlite 扩展访问此数据库?

php sqlite pdo ubuntu-20.04
© www.soinside.com 2019 - 2024. All rights reserved.