我刚刚安装了 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 扩展访问此数据库?