httpd.conf в Windows: не удается найти структуру модели API `php8_module`

Я пытаюсь установить PHP, Apache и MySQL в Windows, следуя этим рекомендациям. В какой-то момент мне предлагается отредактироватьhttpd.confчтобы указать на мою установку PHP. И каталог apache, и каталог php находятся вC:\: C:\Apache24 а также C:\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. Есть идеи?

8 ответов

У меня была точно такая же проблема. Я нашел решение здесь.

Как выяснилось, в PHP 8 не следует использовать php8_module как и следовало ожидать, но просто php_module

Итак, строка загрузчика должна выглядеть так:

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

Можно было бы ожидать, что директива Apache2 для PHP8 интуитивно будет выглядеть так:

      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

Вы должны получить вывод «Синтаксис ОК». Теперь вы можете запустить свой сервер apache без каких-либо ошибок.

Если вы просто ищете ответ, это:


Если вы хотите продолжить чтение, я пытаюсь помочь людям с другими проблемами, которые возникают при попытке установить php, mysql и apache вместе.

Так что обычно для версии PHP 8, если вы попытаетесь установить ее и попытаться соединить с MySQL и Apache, она не будет работать, о чем мы уже знаем. ЕСЛИ вы этого не знали, удалите PHP 8 и установите Php 7.4 в каталог C.

Теперь строка:

      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% с этой строкой выше.

Поэтому, если вы снова заметили строку с ошибкой, в ней говорится, что невозможно найти API с именем php_module. Таким образом, по умолчанию для PHP 8 вам не нужно изменять эту строку в том виде, в котором он ее понимает, но для Php 7.4 вы должны добавить 7 перед php, чтобы он мог найти модуль.

Итак, правильная строка кода, которая должна быть помещена в файл конфигурации:

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

спасибо за терпеливое чтение, я надеюсь, что это поможет любому, кто ищет более полный ответ относительно попытки загрузить php 7.4, mysql и apache вместе.

Чтобы устранить ошибку в моем случае, я должен добавить как

      LoadModule php_module "c:/php/php8apache2_4.dll"

вместо

      LoadModule php8_module "c:/php/php8apache2_4.dll"

Детали моей рабочей среды..

  1. Windows 10 64 бит
  2. Версия PHP: PHP 8.0.19 64-битная версия, безопасная для потоков
  3. Версия Apache: httpd-2.4.53-win64-VS16

В файле httpd.conf: я добавил ниже строку кода сверху.

      AddHandler application/x-httpd-php .php
AddType application/x-httpd-php .php .html
LoadModule php_module "c:/php/php8apache2_4.dll"
PHPIniDir "c:/php"
      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"

Это должно выглядеть так:

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

У меня была такая же проблема, но в моем случае это сработало, изменив эту строку в файле httpd.conf с

      #ServerName www.example.com:80

к

      ServerName localhost

И это сработало

Не забывая ответ @vmxes

с https://windows.php.net/download#php-8.0 вам необходимо загрузить версию «Thread Safe». в противном случае у вас нет «php8apache2_4.dll», и вам это нужно, чтобы php8 работал с apache в XAMPP. просто скачайте эту версию и у вас есть

Другие вопросы по тегам