Windows 上的 httpd.conf:找不到 API 模型结构 `php8_module`

Posted

技术标签:

【中文标题】Windows 上的 httpd.conf:找不到 API 模型结构 `php8_module`【英文标题】:httpd.conf on Windows: can't locate API model structure `php8_module` 【发布时间】:2020-12-03 14:27:12 【问题描述】:

我正在尝试在 Windows 上安装 php、Apache 和 mysql,遵循 these guidelines。在某些时候,系统会提示我编辑 httpd.conf 以指向我的 PHP 安装。 apache目录和php目录都在C:\下:C:\Apache24C:\php-8.0.0beta1-Win32-vs16-x64.

我安装的相关行是:

PHPIniDir "C:/php-8.0.0beta1-Win32-vs16-x64"
AddHandler application/x-httpd-php .php .phar
LoadModule php8_module "C:/php-8.0.0beta1-Win32-vs16-x64/php8apache2_4.dll"

不幸的是,这些似乎破坏了 Apache,因为即使在之后运行 httpd 也会产生:

httpd.exe: Syntax error on line 542 of C:/Apache24/conf/httpd.conf: Can't locate API module structure `php8_module' in file C:/php-8.0.0beta1-Win32-vs16-x64/php8apache2_4.dll: No error

似乎php8_module 无法被 PowerShell 识别。有什么想法吗?

【问题讨论】:

您的 Windows 系统是 32 位还是 64 位? PowerShell 与这些有什么关系? 那个教程现在有点老了。您是否安装了所有必需的 MSVC 运行时,特别是最新的运行时 你安装的是什么版本的 Apache。 您可能会发现安装 XAMPP 或 WAMPServer 之类的东西会更容易,因为所有繁重的工作都会为您完成 【参考方案1】:

我遇到了完全相同的问题。我找到了解决方案here。

正如在 PHP 8 中所证明的那样,我们不应该像预期的那样使用 php8_module,而只能使用普通的 php_module

所以加载器行应该是这样的:

LoadModule php_module "c:/Program Files/PHP/php-8.0.0RC2/php8apache2_4.dll"

【讨论】:

我最终下载了整个堆栈,fwiw XAMPP 或 WAMPServer 是否支持 PHP 8?在他们的网站上,我只能找到 7.4.x 版本。 @Vmxes 非常感谢您的帮助,这是 100% 有效的:before: LoadModule php7_module 但对于 PHP8 使用 NOW: LoadModule php_module就是这样,对我来说运行良好:-) 这适用于 Laragon,我们中的许多人更喜欢 XAMP。 它成功了,我正在使用 Laragon,在文件“C:\Laragon\apache2\mod_php.conf”中我将 php8_module 更改为 php_module 并且成功了,谢谢【参考方案2】:

您会期望 PHP8 的 Apache2 指令直观地是:

LoadModule php8_module "path/to/PHP/php8apache2_4.dll"

但你必须使用:

LoadModule php_module "path/to/PHP/php8apache2_4.dll"

我觉得这很奇怪,但就是这样。

如果您现在导航到 Apache2bin 目录(类似于 C:/Apache24/bin) 并使用以下命令检查您的 httpd.conf 文件是否有任何语法错误:

httpd -t

您应该得到输出“Syntax OK”。现在您可以启动 apache 服务器而不会出现任何错误。

【讨论】:

【参考方案3】:

如果您只是在寻找答案,那就是:

LoadModule php7_module "C:/Apache/modules/php7apache2_4.dll"

如果您想继续阅读,我正在努力帮助人们解决在尝试同时安装 php、mysql 和 apache 时遇到的其他问题。

所以通常对于 PHP 8 版本,如果您尝试安装它并尝试将其与 MySQL 和 Apache 连接,我们已经知道它不会工作。 如果你不知道这个,请去卸载 PHP 8 并在你的 C 目录安装 PHP 7.4。

现在该行:

httpd.exe: Syntax error on line 244 of C:/Apache/conf/httpd.conf: Can't locate API module structure `php_module' in file C:/Apache/modules/php7apache2_4.dll: No error

如果您注意到错误实际上是语法错误,如果您逐字逐句尝试解决问题,这会非常令人困惑。 事实证明,这更像是一个逻辑错误而不是语法错误。

现在,如果您在配置代码中输入以下内容:

LoadModule php_module "C:/Apache/modules/php7apache2_4.dll"

您没有错或与实际解决方案相去甚远,实际上您对上述行的正确率为 99%。

因此,如果您再次注意到错误行,则表明它无法找到名为 php_module 的 API。 所以默认情况下,对于 PHP 8,您不需要更改它所理解的这一行,但对于 PHP 7.4,您必须在 php 前面添加一个 7 以便它可以定位模块。

所以要放在配置文件中的正确代码行是:

LoadModule php7_module "C:/Apache/modules/php7apache2_4.dll"

感谢您耐心阅读本文,我希望它可以帮助任何人寻找与尝试一起下载 php 7.4、mysql 和 apache 相关的更完整的答案。

【讨论】:

【参考方案4】:

它应该如下所示:

# PHP8 module
AddHandler application/x-httpd-php .php
AddType application/x-httpd-php .php .html
LoadModule php_module "c:/php/php8apache2_4.dll"
PHPIniDir "c:/php"

【讨论】:

【参考方案5】:
LoadModule php[PHP_MAIN_VERSION]_module "path/to/PHP/php[PHP_MAIN_VERSION]apache2_4.dll"

例子:

LoadModule php7_module "C:/php7.4.27/php7apache2_4.dll"

【讨论】:

干得好 - 讨厌的小家伙。【参考方案6】:

我遇到了同样的问题,但在我的情况下,它可以改变 httpd.conf 文件中的这一行

#ServerName www.example.com:80

ServerName localhost

成功了

不要忘记@vmxes 的回答

【讨论】:

【参考方案7】:

来自https://windows.php.net/download#php-8.0 您必须下载“线程安全”版本。否则你没有“php8apache2_4.dll”,你需要这样才能使 php8 在 XAMPP 中与 apache 一起工作。 只需下载此版本即可

【讨论】:

以上是关于Windows 上的 httpd.conf:找不到 API 模型结构 `php8_module`的主要内容,如果未能解决你的问题,请参考以下文章

无法打开配置文件bin/conf/httpd.conf:系统找不到指定的路径

无法打开配置文件bin/conf/httpd.conf:系统找不到指定的路径

ubuntu或linux下找不到apache服务器配置文件httpd.conf

centos6.2安装好lamp环境后,要配置虚拟主机的目录 但是找不到apache下的httpd-vhosts.conf

Apache 忽略 httpd.conf 分配的路径

更改 httpd 配置上的侦听端口以进行 Varnish 配置