首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sqlite3和pdo_sqlite未加载到php apache2本地主机中,但加载到了php cmd窗口中。

sqlite3和pdo_sqlite未加载到php apache2本地主机中,但加载到了php cmd窗口中。
EN

Stack Overflow用户
提问于 2019-12-30 20:06:37
回答 2查看 1.7K关注 0票数 4

问题描述

我使用的是Windows 10操作系统。我已经在C:/Apache24PHP7.4.1 in C:/php7中安装了Apache2.4。在Apache的配置文件httpd.conf中,我添加了以下内容

代码语言:javascript
运行
复制
    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文件,如下所示:

代码语言:javascript
运行
复制
     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中,我还修改了

代码语言:javascript
运行
复制
     [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’中,其中包含以下文本:

代码语言:javascript
运行
复制
    <?php phpinfo(); ?>

在Chrome Web浏览器中打开'localhost‘,我看到了PHP信息文件。但是,->它没有启用sqlite3和pdo_sqlite <-。但是,在命令窗口中运行'php -m‘时,会显示sqlite3和pdo_sqlite已加载。此外,在本地主机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但是,在使用Windows10资源管理器的c:\php7\ext中可以看到php_pdo_sqlite.dll,但另一方面,C:\\php7\\ext不是Windows资源管理器的有效路径。我不知道双反斜杠是否仅用于打印,或者实际上它是在该路径上搜索。但是,cmd不会受到双反斜杠的影响。我真的不知道该怎么想!

EN

回答 2

Stack Overflow用户

发布于 2020-01-30 03:11:28

将Apache升级到2.4.41 +后,在我的httpd.conf中添加了以下内容,就解决了这个问题。

代码语言:javascript
运行
复制
# 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"
票数 3
EN

Stack Overflow用户

发布于 2020-01-01 00:52:45

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

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

代码语言:javascript
运行
复制
php c:\Apache24\htdocs\index.php

关键是,如果您想从命令行和web服务器使用sqlite或其他扩展,则需要调整这两个php.ini文件。

也许你应该使用单斜杠而不是双反斜杠,就像extension_dir = "C:/php7/ext"一样,但是,免责声明,我的windows电脑上没有安装apache和php,所以我不能确认我说得是否正确。

我还是希望我能帮上忙。:)

祝你新年快乐。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59530576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档