Apache 不从 PHP 加载模块

Posted

技术标签:

【中文标题】Apache 不从 PHP 加载模块【英文标题】:Apache doesn't load module from PHP 【发布时间】:2015-12-22 10:40:25 【问题描述】:

我正在关注这篇葡萄牙文文章来配置 Apache 和 php

How Install And Configure The Development Environment in PHP - Part 2.

我已经设置了 php.inihttpd.conf 文件。除了 php5apache2_4.dll 位于正确的目录之外,但是当我重新启动服务器时显示以下错误:

httpd.exe:D:/Apache24/conf/httpd.conf 第 531 行的语法错误: 无效的 LoadModule 路径 \xe2\x80\xaa"D:/php-5.6.13/php5apache2_4.dll"

httpd.conf:

LoadModule php5_module ‪"D:/php-5.6.13/php5apache2_4.dll"
AddType application/x-httpd-php .php 
PHPIniDir "D:/php-5.6.13/"

编辑

我更改了 Httpd.conf 文件。

LoadModule php5_module ‪"../php-5.6.13/php5apache2_4.dll"
AddType application/x-httpd-php .php 
PHPIniDir "../php-5.6.13/"

现在又给我一个新错误:

httpd.exe:D:/Apache24/conf/httpd.conf 第 531 行的语法错误: 无法将 ../php-5.6.13/php5apache2_4.dll 加载到服务器:%1 n\xe3o \xe9 um aplicativo Win32 v\xe1lido.

英语:不是有效的 Win32 应用程序。

在控制台中:

php -version
PHP 5.6.13 (cli) (built: Sep  3 2015 15:14:40)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies

httpd -version
Server version: Apache/2.4.16 (Win64)
Apache Lounge VC14 Server built:   Jul 22 2015 13:24:19

【问题讨论】:

你的语法看起来是正确的......但外表可能具有欺骗性。确保您在 httpd.conf 和 php.ini 中为 all 模块条目使用“简单双引号”(“== ascii 34)。更多详细信息在此处:webmasterworld.com/forum92/3140.htm。替代建议:因为您的任何路径中都没有任何空格 - 只需完全去掉双引号即可。 我解决了,谢谢(;我改变了Apache的架构,我最后安装了Apache Win32。 【参考方案1】:

我在尝试配置 php7 时遇到了同样的问题,所以对于其他遇到问题的人:

可能存在一些问题。检查您的 php 和 Apache 版本是否位兼容(64 位 x64 或 32 位 x86;请注意,从 windows.php.net/download/ 下载 64 位 PHP 时,zip 文件将称为 @987654328 @)。

还要检查它们是否使用相同版本的 Visual Studio(例如 VC14)编译。这恰好是这里的问题:www.apachelounge.com/viewtopic.php?t=6596

就我而言,我遇到了paulsm4 提到的关于引号的问题。我从一个网站复制并粘贴了代码,发现当我运行httpd -k start 时,我的错误是httpd: Syntax error on line 62 of C:/Apache24/conf/httpd.conf: Invalid LoadModule path \x93c:/php7/php7apache2_4.dll\x94\x93\x94 是 CP1252 encodings 用于花哨的开头和结尾引号。消除这些或用常规引号替换它们可以解决问题,之后 Apache 可以使用 PHP 顺利运行。

其他人遇到的另一个问题是尝试使用 NTS(非线程安全)PHP 配置 Apache。

php.net/manual/en/install.windows.apache2.php PHP 下载网站也说明了这一点。

【讨论】:

"还要检查它们是否使用相同版本的 Visual Studio 编译(例如 VC14)" YES!【参考方案2】:

httpd_uwamp.conf 文件中删除双引号对UnWampPHP 发行版都适用。 (我的任何路径名中都没有空格)

例如更改

LoadModule "PHPMODULENAME PHPPATH/PHPAPACHE2FILE"LoadModule PHPMODULENAME PHPPATH/PHPAPACHE2FILE

感谢 Giancarlo Abel Giulian 的帖子 ;-)

【讨论】:

【参考方案3】:

我遇到了同样的问题:

LoadModule 路径无效\xe2\x80\x9cC:/WAMP/php/php5apache2_4.dll\xe2\x80\x9d。

根据上面paulsm4的建议,我删除了指令LoadModule php5_module中的引号并用简单的引号代替:

LoadModule php5_module "C:/WAMP/php/php5apache2_4.dll"

这为我解决了。

【讨论】:

【参考方案4】:

改变

LoadModule php7_module "c:/php/php7apache2_4.dll"

到  

LoadModule php7_module /php/php7apache2_4.dll

和   

PHPIniDir "c:/php"

到  

PHPIniDir /php

干得好。

【讨论】:

【参考方案5】:

无法将模块/php7apache2_4.dll 加载到服务器中:找不到指定的模块。这是在本地计算机中设置 apache 和 php 环境时的常见问题

我也遇到了同样的问题:解决问题的最佳方法是为 apache 服务器和 php 安装相同的 VC 级别,并确保计算机中也安装了相同的 VC++。

对我来说,我尝试使用 VC14 for apache24 和 php,还安装了恰好是 VC14 的 VC++ 2015 版

【讨论】:

【参考方案6】:

在我的情况下,这是由于下载的 PHP7 类型:Non Thread Safe 只需下载 Thread Safe 版本并解压到 C:\php7 (Default directory),然后再次尝试启动 Apache Service。

希望有帮助!!!

【讨论】:

【参考方案7】:

由于旧的 httpd.conf 文件中的简单剪切和粘贴错误,我遇到了类似的错误

LoadModule php5_module ...

而不是

LoadModule php7_module ...

希望这可以帮助其他人在谷歌上搜索此错误消息。

【讨论】:

【参考方案8】:

我很难摆脱这个错误,最终在(Apache 和 PHP)都安装了 x86 版本(不是 64)后解决了。

还避免使用简单的文件夹名称,即 Apache2.4 或 php,而是使用详细名称(如 php_7.1.21_vc14_x86_tsApache_2.4.34_vc14_x86)通过查看文件夹名称本身而不是不断出现奇怪的错误来捕获不匹配。

【讨论】:

【参考方案9】:

我可以理解出现该错误的感觉。经过数小时的研究,我发现只需删除双引号,你就可以走了。无需从所有三行中删除双引号。从给你错误的行中删除它们。

之前

PHPIniDir “C:/PHP”
AddHandler application/x-httpd-php .php
LoadModule php7_module "C:/PHP/php7apache2_4.dll"

之后

PHPIniDir “C:/PHP”
AddHandler application/x-httpd-php .php
LoadModule php7_module C:/PHP/php7apache2_4.dll

它对我有用。我认为上面两行不会给你错误,除非你以非常错误的方式安装了 PHP。

测试它(如果你不知道)

    打开cmd(不需要以管理员身份打开,但可以)

    导航到 bin 文件夹,进入 c:/apache/bin(或任何您的文件夹)

    输入 httpd -t 它应该显示语法OK 如果不是这样,您需要在它说有错误的行上工作。 他最好。

回复很糟糕?我知道这是我第一次回答任何疑问。

【讨论】:

【参考方案10】:

您必须确保您使用的 PHP 版本与 apache 兼容。这样,如果您正在运行 apache 32 位,请确保您使用的是 PHP 32 位,这同样适用于 64 位。对于初步分析,请执行以下操作。

    打开命令提示符并导航到您的 apache 安装 bin 文件夹,例如 cd "C:/Apache24/bin"

    然后运行以下命令查看语法是否OK httpd.ex -t

响应将告诉您是否在您的 PHP 位置中缺少提到的 dll php5apache2_4.dll。如果是这种情况,那么您必须使用 apache 下载特定的兼容 PHP 版本。否则它会告诉你语法没问题。

欲了解更多信息,请访问此链接

https://danielarancibia.wordpress.com/2015/09/27/installing-apache-2-4-and-php-7-for-development-on-windows/

【讨论】:

【参考方案11】:

我有同样的错误。我唯一改变的是 php_modulephp7_module

之前

PHPIniDir "c:/php"
LoadModule **php_module** "c:/php/php7apache2_4.dll"
AddType application/x-httpd-php .php

之后

PHPIniDir "c:/php"
LoadModule **php7_module** "c:/php/php7apache2_4.dll"
AddType application/x-httpd-php .php

【讨论】:

php_module 用于 PHP8.0,之前是 phpX_module,其中 X 等于 php 的版本号,(如 php7_module 用于 PHP7)。 (# before PHP 8.0.0 the name of the module was php7_module)

以上是关于Apache 不从 PHP 加载模块的主要内容,如果未能解决你的问题,请参考以下文章

求高手解决啊 关于apache启动加载模块错误

怎样在apache2.2.17中加载PHP模块

将php作为一个模块供给Apache加载

apache和php动态加载模块

如何在模块化的 java 11 应用程序中动态加载 Libreoffice jar,而不从自定义类加载器中获取 ClassCastException

DSO动态加载PHP模块到Apache服务器