Necesito usar la extensión example.dll
con el objeto SQLite3 en PHP. La extensión tiene un punto de entrada no estándar custom_init
. sqlite3.extension_dir
en php.ini se especifica correctamente. Probé el siguiente código:
$dbconn = new SQLite3('test.db'); $dbconn->loadExtension('example.dll'); $dbconn->exec("SELECT load_extension('example.dll');");
Como se puede ver, utilicé dos enfoques para cargarlo.
Primer enfoque: $dbconn->loadExtension('sqldba.dll');
.
Not supported in multithreaded Web servers
, aunque se hace especialmente para esto. ¿Qué puede estar mal en la configuración de XAMPP/Apache? Segundo enfoque: $dbconn->exec("SELECT load_extension('example.dll', 'custom_init');");
.
not authorized
. ¿Hay alguna forma de llamar a sqlite3_enable_load_extension aquí? No puedo encontrar dicha función en la documentación del módulo "SQLite for PHP".Upd: de alguna manera relacionado: ¿Cómo cargar la extensión sqlite en PDO?
De todos modos, esto no funcionará en IIS, lo cual (aparentemente) es preferible para mí. De acuerdo con esto (línea 414) solo está habilitado en ZTS (Zend Thread Safety). Deshabilitarlo se discute aquí . Todavía no tengo idea de qué está mal con la configuración de Apache.
Nope. Tal vez alguien debería agregar una solicitud de función de "punto de entrada personalizado" al rastreador de PHP, no parece tan difícil.
"SELECT load_extension('example.dll', 'custom_init');"
- falla con el error "no autorizado". Debe llamar a sqlite3_enable_load_extension
antes de hacer load_extension desde la consulta, y no hay un análogo de sqlite3_enable_load_extension
en php-sqlite. Parchear PDO-Sqlite para esto se describe aquí , pero es muy inseguro. Agregar esto como una nueva característica en php-sqlite sería mucho mejor.