【问题标题】:Cannot loadExtension in SQLite3 module, PHP无法在 SQLite3 模块中加载扩展,PHP
【发布时间】:2020-05-06 21:30:25
【问题描述】:

我需要在 PHP 中使用扩展 example.dll 和 SQLite3 对象。扩展有非标准入口点custom_init。 php.ini 中的sqlite3.extension_dir 已正确指定。尝试了以下代码:

$dbconn = new SQLite3('test.db');
$dbconn->loadExtension('example.dll');
$dbconn->exec("SELECT load_extension('example.dll');");

如您所见,我使用了两种方法来加载它。

第一种方法:$dbconn->loadExtension('sqldba.dll');

  • 在我的 XAMPP/Apache 上不起作用,错误为 Not supported in multithreaded Web servers,尽管它是专门为此完成的。 XAMPP/Apache 配置有什么问题?
  • 在一个不太知名的 HTTP 服务器上,由于非标准入口点,它返回“无法加载扩展”。我可以以某种方式指定自定义入口点吗?

第二种方法:$dbconn->exec("SELECT load_extension('example.dll', 'custom_init');");

  • 失败并出现错误not authorized。有什么方法可以在这里调用 sqlite3_enable_load_extension 吗?我在“SQLite for PHP”模块文档中找不到这样的功能。

更新:不知何故相关:How to load sqlite extension in PDO?

【问题讨论】:

    标签: php apache sqlite xampp


    【解决方案1】:
    • “在多线程 Web 服务器中不受支持”

    无论如何,这在 IIS 上不起作用,这(显然)对我来说更可取。根据this (line 414),它仅在 ZTS(Zend 线程安全)中启用。讨论禁用它here。仍然不知道 Apache 配置有什么问题。

    • '无法加载扩展',因为非标准入口点。我可以以某种方式指定自定义入口点吗?

    唔唔唔。也许有人应该向 PHP 跟踪器添加“自定义入口点”功能请求,这似乎并不难。

    • "SELECT load_extension('example.dll', 'custom_init');" - 失败并出现“未授权”错误。

    您必须在从查询中执行 load_extension 之前调用 sqlite3_enable_load_extension,并且 php-sqlite 中没有 sqlite3_enable_load_extension 的类似物。 here 描述了为此修补 PDO-Sqlite,但它非常不安全。在 php-sqlite 中将此作为新功能添加会更好。

    【讨论】:

      猜你喜欢
      • 2016-12-13
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 2018-07-28
      相关资源
      最近更新 更多