【问题标题】:sqlite3 and pdo_sqlite not loaded in php apache2 localhost but loaded in php cmd windowsqlite3 和 pdo_sqlite 未在 php apache2 localhost 中加载,但在 php cmd 窗口中加载
【发布时间】:2019-12-30 12:06:37
【问题描述】:

问题描述

我使用的是 Windows 10 操作系统。我已经在C:/Apache24PHP7.4.1 in C:/php7 中安装了Apache 2.4。在 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" 

我也修改了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

并且还在php.ini中我也修改了

     [sqlite3]
     ; Directory pointing to SQLite3 extensions
     ; http://php.net/sqlite3.extension-dir
     sqlite3.extension_dir = C:\Apache24\htdocs

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

问题:

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

    <?php phpinfo(); ?>

在 Chrome Web 浏览器中转到“localhost”我看到了 PHP 信息文件。但是,---> 它没有启用 sqlite3 或 pdo_sqlite

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

更新

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

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 不受双反斜杠的困扰。我真的不知道该怎么想!

【问题讨论】:

    标签: php windows apache sqlite


    【解决方案1】:

    将 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"
    

    【讨论】:

    • 添加:LoadFile "C:/Php/libssh2.dll" LoadFile "C:/Php/libsqlite3.dll" 为我解决了这个问题。
    【解决方案2】:

    当 apache 运行 php 时(因为您获取了一个由 Web 服务器提供的 URL 并将 *.php URL 重定向到 php)然后 php 从一个特定目录加载一个php.ini 文件。您可以在 Web 浏览器的 phpinfo() 的输出中看到已加载的 php.ini(以及可能的其他配置文件)的路径。

    相比之下,如果您从命令行运行 php,则 php 使用不同的php.ini,更准确地说,是来自不同目录的 php.ini。您也可以在phpinfo() 的输出中看到此 php.ini 的路径,但它将显示在您的终端中,而不是在您的浏览器中。您可以通过类似于此的命令获得此输出:

    php c:\Apache24\htdocs\index.php
    

    如果你想从命令行和网络服务器使用你的 sqlite 或其他扩展,你需要调整这两个 php.ini 文件。

    也许你应该使用单斜杠而不是双反斜杠,比如extension_dir = "C:/php7/ext",但是,免责声明,我的 Windows 计算机上没有安装 apache 和 php,所以我无法确认我说的是否正确。

    我仍然希望我能提供帮助。 :)

    祝你新年快乐。 :)

    【讨论】:

    • 感谢您的回答。在 Windows 中,没有两个 php.ini 目录,就像我在其他答案中看到的那样,Linux CLI 和 Apache 就是这种情况。相反,只有一个 php.ini 文件(确实有两个,php.ini-production 和 php.ini-development,但其中一个将用作 php.ini)我可以确认命令行和 apache 都使用相同的 php.ini 文件。
    猜你喜欢
    • 2018-08-26
    • 1970-01-01
    • 2014-03-05
    • 2018-04-16
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多