簡體   English   中英

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

[英]sqlite3 and pdo_sqlite not loaded in php apache2 localhost but loaded in php cmd window

問題描述

我使用 Windows 10 操作系統。 我已經在C:/Apache24安裝了 Apache 2.4,在C:/Apache24安裝了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" 

我也對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 瀏覽器中轉到“本地主機”,我看到了 PHP 信息文件。 但是,---> 它沒有啟用 sqlite3 和 pdo_sqlite <---。 但是,在命令窗口中運行'php -m',它顯示sqlite3 和pdo_sqlite 已加載。 此外,在 localhost PHP info 中說它使用在此處找到的加載的配置文件 'C:\\php7\\php.ini' 確實是正確的。

我沒有其他想法,為什么 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但是,使用 Windows 10 資源php_pdo_sqlite.dll器可以在c:\\php7\\ext看到c:\\php7\\ext ,但另一方面C:\\\\php7\\\\ext不是 Windows 資源管理器的有效路徑。 我不知道雙反斜杠是否僅用於打印或確實在該路徑上搜索。 但是 cmd 不會受到雙反斜杠的困擾。 真不知道怎么想!

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

當 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

關鍵是如果你想從命令行和 web 服務器使用你的 sqlite 或其他擴展,你需要調整這兩個 php.ini 文件。

代替雙反斜杠,也許您應該使用單個前向斜杠,例如extension_dir = "C:/php7/ext"但是,免責聲明,我的 Windows 計算機上沒有安裝 apache 和 php,所以我無法確認我說的是否正確。

我仍然希望我能幫上忙。 :)

祝你新年快樂。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM