[英]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.