sqlite3 和 pdo_sqlite 未加载到 php apache2 localhost 中,但加载到 php cmd 窗口中

C M*_*ius 4 php windows apache sqlite

问题描述

我使用 Windows 10 操作系统。C:/Apache24我已经在和中安装了 Apache 2.4 PHP7.4.1 in C:/php7。在 Apache 的配置文件 httpd.conf 中,我附加了以下内容

    LoadModule php7_module "c:/php7/php7apache2_4.dll"
    #<FilesMatch \.php$>
    #   SetHandler application/x-httpd-php
    #</FilesMatch>
    AddType application/x-httpd-php .php
    PHPIniDir "C:/php7" 
Run Code Online (Sandbox Code Playgroud)

我还通过以下方式修改了php的php.ini文件:

     extension_dir = C:\php7\ext
     extension=bz2
     extension=curl
     ;extension=ffi
     extension=fileinfo
     extension=gd2
     extension=gettext
     extension=gmp
     extension=intl
     extension=imap
     ;extension=ldap
     extension=mbstring
     extension=exif      ; Must be after mbstring as it depends on it
     extension=mysqli
     ;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
     ;extension=odbc
     extension=openssl
     ;extension=pdo_firebird
     extension=pdo_mysql
     ;extension=pdo_oci
     extension=pdo_odbc
     extension=pdo_pgsql
     extension=pdo_sqlite
     extension=pgsql
     extension=shmop
     ; The MIBS data available in the PHP distribution must be installed.
     ; See http://www.php.net/manual/en/snmp.installation.php
     ;extension=snmp
     extension=soap
     extension=sockets
     ;extension=sodium
     extension=sqlite3
     extension=tidy
     extension=xmlrpc
     extension=xsl
Run Code Online (Sandbox Code Playgroud)

并且仍在 php.ini 中我也进行了修改

     [sqlite3]
     ; Directory pointing to SQLite3 extensions
     ; http://php.net/sqlite3.extension-dir
     sqlite3.extension_dir = C:\Apache24\htdocs
Run Code Online (Sandbox Code Playgroud)

然后我重启了apache几十次,PC也重启了一次。

问题:

我制作了一个“index.php”文件并将其放置在“c:/apache24/htdocs”中,其中包含以下文本:

    <?php phpinfo(); ?>
Run Code Online (Sandbox Code Playgroud)

在 Chrome Web 浏览器中转到“localhost”,我看到了 PHP 信息文件。但是,---> 它没有启用 sqlite3 或 pdo_sqlite <---。但是,在命令窗口中运行“php -m”,它显示 sqlite3 和 pdo_sqlite 已加载。此外,在 localhost PHP 信息中,它使用在“C:\php7\php.ini”处找到的已加载配置文件,这确实是正确的。

我没有其他想法,为什么 sqlite3 或 pdo_sqlite 在 apache2 中不可见,但在 com 窗口中可见,特别是因为它使用相同的 php.ini 文件。

更新

检查“error.log”文件,Apache24\logs我可以看到以下警告:

PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: C:\\php7\\ext\\pdo_sqlite (The specified module could not be found.), C:\\php7\\ext\\php_pdo_sqlite.dll (The specified module could not be found.)) in Unknown on line 0 然而,php_pdo_sqlite.dll在使用Windows 10资源管理器时可以看到c:\php7\ext,但另一方面C:\\php7\\ext对于Windows资源管理器来说不是有效路径。我不知道双反斜杠是否仅用于打印,或者实际上它在该路径中搜索。然而 cmd 不受双反斜杠的困扰。我真不知道该怎么想!

Tom*_*haw 7

将 Apache 升级到 2.4.41 + 将以下内容添加到我的 httpd.conf 解决了我的问题。

# PHP7

LoadModule php7_module "C:/Php/php7apache2_4.dll"
AddHandler application/x-httpd-php .php
AddHandler application/x-httpd-php .phtml
PHPIniDir C:/Php

# FIX CURL REQUIRES LIBSSH2
LoadFile "C:/Php/libssh2.dll"
LoadFile "C:/Php/libsqlite3.dll"
Run Code Online (Sandbox Code Playgroud)