22 сентября, 2020 11:45 дп
9 919 views
| Комментариев нет
LAMP Stack
Эта серия мануалов поможет вам предотвратить или устранить самые распространенные ошибки, которые возникают при работе с веб-сервером Apache.
Каждый мануал в этой серии включает описание распространенных ошибок Apache, связанных с конфигурацией, сетью, файловой системой или привилегиями.
Сообщение об ошибке Apache «AH00072: make_sock: could not bind to address» появляется, когда тот порт, который настроен для Apache, уже прослушивает другой процесс (Обычно это стандартный порт 80 для HTTP-соединений или порт 443 для HTTPS-соединений). Однако вызвать ошибку AH00072 может любой другой конфликт порта и процесса.
Ошибка возникает в сетевом стеке базовой операционной системы. Проблема заключается в том, что в любой момент времени к конкретному порту может быть привязан только один процесс. Если на прослушивание порта 80 настроен другой веб-сервер (допустим, Nginx) и он работает, то Apache не сможет запросить порт для себя.
Чтобы обнаружить конфликт порта Apache, вам необходимо изучить вывод systemctl и journalctl, чтобы определить IP-адрес и порт, вызывающие ошибку. Затем вы можете выбрать путь решения проблемы: переключить веб-серверы, изменить IP-адрес или порт для Apache (или подобрать комбинацию этих параметров).
Устранение ошибки с помощью systemctl
Следуя инструкциям по устранению неполадок из мануала Устранение общих ошибок Apache, первым делом мы должны проверить состояние Apache с помощью systemctl.
Если вывод systemctl не содержит данных, описывающих проблему, перейдите к последнему разделу этого руководства. В нем вы узнаете, как с помощью journalctl исследовать логи systemd, чтобы найти конфликтующий порт.
Команда systemctl status во многих случаях может предоставить всю диагностическую информацию, необходимую для устранения ошибки. Ее вывод укажет на IP-адрес, который использует Apache, а также на порт, к которому он пытается подключиться. Из этих выходных данных вы узнаете, как долго Apache не запускался (это поможет определить, как долго эта проблема мешает работе Apache) .
В дистрибутивах Ubuntu и Debian запустите следующую команду, чтобы проверить статус Apache:
sudo systemctl status apache2.service -l --no-pager
В системах CentOS и Fedora для проверки статуса Apache используйте эту команду:
sudo systemctl status httpd.service -l --no-pager
Флаг -l выводит все содержимое строки без сокращений (без замены длинных строк многоточием (…)). Флаг –no-pager выводит весь лог на ваш экран, не вызывая инструмент less, который показывает только один экран контента за раз.
Если у вас есть ошибка AH00072, вы должны получить подобный вывод:
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Tue 2020-07-28 13:58:40 UTC; 8s ago
Docs: man:httpd.service(8)
Process: 69 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
Main PID: 69 (code=exited, status=1/FAILURE)
Status: "Reading configuration..."
Tasks: 213 (limit: 205060)
Memory: 25.9M
CGroup: /system.slice/containerd.service/system.slice/httpd.service
Jul 28 13:58:40 e3633cbfc65e systemd[1]: Starting The Apache HTTP Server…
Jul 28 13:58:40 e3633cbfc65e httpd[69]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
Jul 28 13:58:40 e3633cbfc65e httpd[69]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
Jul 28 13:58:40 e3633cbfc65e httpd[69]: no listening sockets available, shutting down
Jul 28 13:58:40 e3633cbfc65e httpd[69]: AH00015: Unable to open logs
Jul 28 13:58:40 e3633cbfc65e systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE
Jul 28 13:58:40 e3633cbfc65e systemd[1]: httpd.service: Failed with result 'exit-code'.
Jul 28 13:58:40 e3633cbfc65e systemd[1]: Failed to start The Apache HTTP Server.
Ваш вывод может немного отличаться, если вы используете дистрибутив Ubuntu или Debian (в них имя процесса Apache не httpd, а apache2).
Этот пример вывода systemctl содержит пару строк из лога systemd, описывающих ошибку AH00072 (они выделены красным). Эти строки, каждая из которых начинается с «(98)Address already in use: AH00072: make_sock: could not bind to address», предоставляют вам всю информацию об ошибке AH00072, которая необходима для дальнейшего ее устранения, поэтому вы можете пропустить следующий раздел мануала, посвященный работе с journalctl. Переходите сразу к разделу об утилитах ss и ps в конце этого руководства.
Если ваш вывод systemctl не показывает конкретной информации об IP-адресе и портах, которые вызывают ошибку AH00072, вам необходимо проверить вывод journalctl из логов systemd. В следующем разделе мы расскажем, как использовать journalctl для устранения ошибки AH00072.
Устранение ошибки с помощью логов journalctl
Если ваши выходные данные systemctl не содержат сведений об ошибке AH00072, вам следует продолжить поиски с помощью команды journalctl, которая предназначена для проверки логов systemd для Apache.
В системах, производных от Ubuntu и Debian, выполните следующую команду:
sudo journalctl -u apache2.service --since today --no-pager
В системах типа CentOS, Fedora и RedHat используйте эту команду:
sudo journalctl -u httpd.service --since today --no-pager
Флаг –since today ограничивает вывод команды только записями, созданными с 00:00:00 текущего дня. Использование этой опции поможет ограничить объем записей, которые вам необходимо изучить при поиске ошибок.
Если Apache не может подключиться к используемому порту, найдите в выходных данных следующие записи (в частности строки, содержащие код ошибки AH00072, как показано в этом примере):
-- Logs begin at Tue 2020-07-14 20:10:37 UTC, end at Tue 2020-07-28 14:01:40 UTC. --
. . .
Jul 28 14:03:01 b06f9c91975d apachectl[71]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
Jul 28 14:03:01 b06f9c91975d apachectl[71]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
Jul 28 14:03:01 b06f9c91975d apachectl[71]: no listening sockets available, shutting down
Эти выходные данные указывают на две ошибки AH00072. Первая строка объясняет, что Apache не может связаться с адресом [::]:80 (это порт 80 на всех доступных интерфейсах IPv6). Вторая строка с адресом 0.0.0.0:80 указывает, что Apache не может подключиться к порту 80 на всех доступных интерфейсах IPv4. В зависимости от конфигурации вашей системы IP-адреса могут отличаться, вывод может отображать только отдельные IP-адреса и включать только ошибки IPv4 или только IPv6.
Несмотря на то, что ваша система может иметь разные конфликтующие интерфейсы и порты, ваши ошибки будут похожи на показанный здесь вывод. Получив данные journalctl, вы сможете диагностировать проблему с помощью ss, о чем мы и поговорим в следующем разделе этого руководства.
Устранение ошибки с помощью утилит ss и ps
Чтобы устранить ошибку AH00072, вам необходимо определить, какой именно процесс прослушивает IP-адрес и порт, которые пытается использовать Apache. Большинство современных дистрибутивов Linux включают утилиту ss, которую можно использовать для сбора информации о состоянии сетевых сокетов системы.
В предыдущем разделе (о journalctl) вы видели, что какой-то процесс уже был привязан к адресам IPv4 и IPv6 на порту 80. Следующая команда определит имя процесса, который привязан к интерфейсу IPv4 на порту 80. Убедитесь, что вы заменили номер порта (если в вашем сообщении об ошибке указан другой порт, а не 80):
sudo ss -4 -tlnp | grep 80
Флаги команды ss изменяют ее стандартный вывод следующим образом:
- -4 запрашивает только информацию о сокетах, связанных с IPv4.
- -t ограничивает вывод только сокетами tcp.
- -l отображает все прослушивающие сокеты с учетом ограничений -4 и -t.
- -n отображает номера портов вместо имен протоколов типа «http» или «https». Это важно, поскольку Apache может пытаться подключиться к нестандартному порту, а имя сервиса будет сбивать с толку, в таком случае фактический номер порта удобнее.
- -p выводит информацию о процессе, который привязан к порту.
Запустив команду со всеми этими флагами, вы получите следующий вывод:
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=40,fd=6))
Первые три поля не важны для устранения ошибок AH00072, поэтому их можно игнорировать. Важными полями являются четвертое (0.0.0.0:80), которое соответствует обнаруженной ранее (с помощью journalctl) ошибке, а также последнее поле «users:((“nginx”,pid=40,fd=6))», в частности, фрагмент pid=40.
Если у вас есть ошибка AH00072, связанная с интерфейсом IPv6, повторите вызов ss, на этот раз используя флаг -6, чтобы ограничить интерфейсы IPv6:
sudo ss -6 -tlnp |grep 80
LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=40,fd=7))
Убедитесь, что вы заменили номер порта (если в вашем сообщении об ошибке указан другой порт, а не 80).
Независимо от IPv4 и IPv6, выходные данные ss указывают, что программа с идентификатором процесса 40 (pid=40) привязана к интерфейсам 0.0.0.0:80 и [::]:80 соответственно. Этот процесс препятствует запуску Apache, поскольку он уже занимает необходимый порт. Чтобы определить имя программы, используйте утилиту ps, указав идентификатор процесса из вашего вывода вместо условного значения 40 в этом примере:
sudo ps -p 40
Вы получите похожий вывод:
PID TTY TIME CMD
40 ? 00:00:00 nginx
nginx – это имя процесса, который прослушивает нужные интерфейсы. Теперь, когда у вас есть имя программы, которая препятствует запуску Apache, вы можете решить, как устранить ошибку. Например, вы можете остановить процесс nginx, перенастроить его на другой интерфейс и порт или перенастроить Apache, чтобы избежать конфликта портов.
Обратите внимание: при поиске ошибки AH00072 в вашем случае это может быть не nginx, а другой процесс; порт и IP-адреса не обязательно будут 0.0.0.0 или [::], это может быть любой порт и адрес. Часто на одном сервере используются разные веб-серверы и прокси. Каждый может пытаться подключиться к разным портам IPv4 и интерфейсам IPv6 для обработки разного веб-трафика. Например, сервер, на котором настроен HAProxy, прослушивающий loopback адрес IPv4 (также называемый localhost) по порту 8080, будет отображаться в выводе ss следующим образом:
LISTEN 0 2000 127.0.0.1:8080 0.0.0.0:* users:(("haproxy",pid=545,fd=7))
Важно научиться объединять вывод systemctl или journalctl, который указывает определенные IP-адреса и порты, с диагностическими данными из ss, а затем и ps, чтобы сузить диапазон поиска и обнаружить процесс, который вызывает сбой Apache.
Заключение
В этом мануале вы узнали, как устранить ошибку Apache «AH00072 make_sock: could not bind to address» на интерфейсах IPv4 и IPv6. Вы также узнали, как использовать systemctl для проверки состояния сервера Apache, как с помощью journalctl изучить логи systemd на предмет конкретной информации об ошибке AH00072.
Собрав данные об ошибках, вы использовали утилиту ss для проверки состояния сетевых сокетов системы. После этого мы объединили информацию утилиты ss с утилитой ps, чтобы узнать имя процесса, из-за которого Apache не запускается.
Tags: Apache, journalctl, systemctl
Оглавление
1. Где смотреть ошибки веб-сервера и как правильно задать вопрос
2. Ошибки Apache в Windows
3. Ошибки PHP в Windows
4. Ошибки MySQL/MariaDB в Windows
5. Ошибки phpMyAdmin в Windows
6. Вопросы и ответы по веб-серверу в Windows
Где смотреть ошибки веб-сервера и как правильно задать вопрос
Некоторые ошибки выводятся при открытии сайтов на локальном хостинге или при тестировании своих скриптов. Такие ошибки обычно сразу показываются в веб-браузере.
Некоторые ошибки не дают нормально установиться и запустится веб-серверу. Такие ошибки могут выводиться в командную строку (правда, не всегда в читаемом виде). Также может возникнуть ситуация, что показываться пустая веб-страница или какой-то компонент веб-сервера просто не запускается без видимых проблем.
В любом случае, самую полную информацию об ошибках Apache и PHP вы найдёте в файле журналов Apache (по ссылке подробности о содержимом и настройке этого файла). Если у вас веб-сервер установлен по этой инструкции, то путь до этого файла такой: C:ServerbinApache24logserror.log. В любом случае, файл журнала находится по умолчанию в папке веб-сервера в подпапке logs, либо может быть в другом месте в соответствии с директивой ErrorLog. Также очень важные сообщения, в том числе и ошибки содержаться в файле C:ServerbinApache24logsaccess.log.
Журнал ошибок MySQL и MariaDB находится в файле в C:ServerdataDBdata*.err (конкретное имя файла зависит от имени компьютера). Опять же, если вы устанавливали по другой инструкции или у вас другие настройки СУБД, то ищите этот файл в соответствии с вашими установками — по умолчанию он расположен в папке data и имеет расширение *.err.
Если ваша ошибка связана с установкой веб-сервера, то крайне желательно привести логи полностью, поскольку причина проблемы может быть в самых первых действиях.
Если ошибка возникла позже и связана с неправильной работой вашего скрипта или нового тестового сайта, то к этому моменту журналы могут быть переполнены информацией, которые не имеют отношение к этому вопросы. В этом случае, идеально было бы сделать так:
Остановите веб-сервер (иначе невозможно отредактировать файлы журналов):
c:ServerbinApache24binhttpd.exe -k stop net stop mysql
Очистите содержимое журналов:
C:ServerbinApache24logserror.log C:ServerdataDBdata*.err
Вновь запустите веб-сервер:
c:ServerbinApache24binhttpd.exe -k start net start mysql
Сразу после этого выполните действие, которое приводит к ошибке. И опять же, сразу после этого скопируйте содержимое журналов ошибок и выложите здесь в комментариях.
При любой ошибке, если вы планируете попросить помощи, ваша задача как можно полнее собрать и предоставить информацию: какие действия приводят к ошибке, какой текст ошибки, что в журналах веб-сервера, устанавливали по инструкции ссылка на которую дана выше или нет (если нет, то как именно), желательно сделать скриншот. Помните, что вам помогают на добровольных началах и «выдавливать» из вас по каплям информацию никому не интересно. Если вы непонятно/неполно изложили свою ситуацию, то, извините, никто из кожи лезть не будет, чтобы во что бы то ни стало вам помочь — по возможности сразу излагайте проблему полно и ясно.
Ошибки Apache в Windows
Ошибка:
Когда я кликаю на httpd.exe, мелькает чёрное окно, а затем исчезает
Решение:
Решение смотрите здесь: Окно Apache появляется и сразу пропадает (РЕШЕНО)
Ошибка:
Никак не могу установить apache, выдаёт ошибку:
AH00558: httpd.exe: Could not reliably determine the server's fully qualified domain name, using fe80::7978:6c40:7af5:6ea5. Set the 'ServerName' directive globally to suppress this message
Решение:
Это предупреждение, а не ошибка. По идее, Apache должен всё равно работать. У вас http://localhost/ открывается?
Чтобы это предупреждение не выводилось (цитата из инструкции):
меняем
#ServerName www.example.com:80
на
ServerName localhost
Ошибка:
При запуске httpd я получаю следующее сообщение:
(OS 10048)Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт). : AH00072: make_sock: could not bind to address 0.0.0.0:80
AH00451: no listening sockets available, shutting down
AH00015: Unable to open logs
В качестве ОС использую Windows 8.1
Решение:
Данная ошибка вызвана тем, что какая-то программа прослушивает порт 80, при этом Apache пытается использовать этот же порт. Но две программы не могут это делать одновременно – отсюда и ошибка.
Для того, чтобы узнать, какая программа занимает этот порт:
1) нажмите сочетание клавиш WIN + x
2) из открывшегося списка выберете «Командная строка (администратор)»
3) скопируйте туда:
netstat -ano
4) Найдите строку, содержащую «0.0.0.0:80», в этой строчке нас интересует PID, например, в моём случае это 2168
Теперь нам нужно сопоставить идентификатор процесса с конкретной программой. Чтобы сопоставить идентификатор процесса программы, выполните следующие действия:
5) Нажмите сочетание клавиш WIN + x (или CTRL + ALT + DELETE) и нажмите кнопку «Диспетчер задач».
6) Перейдите на вкладку «Процессы».
7) Если не имеется столбец PID, щелкните «Просмотр», «Выбрать столбцы» и установите флажок «PID» (в русской версии – «ИД процесса»).
Щелкните заголовок столбца, под названием «PID» сортировка процесс по PID. Вы сможете легко найти идентификатор процесса, и он соответствует программе, которая отображается в диспетчере задач.
После того, как найдёте программу, которая занимает этот порт, в зависимости от нужности этой программы и от возможности её настройки, можно:
а) удалить эту программу;
или
б) настроить её на использование другого порта;
или
в) настроить Apache на использование другого порта
п.с. на самом деле, могут быть другие причины данной ошибки (кроме занятости порта) – например, неправильная конфигурация сервера Apache, либо запрет в политиках безопасности ОС на использование этого порта. Но если Вы не вносили изменений «от себя» в конфигурацию сервера и в конфигурацию Windows, то дело, почти наверняка, в занятости порта другой программой.
Ответ пользователя с ошибкой: Проблема решена — порт занимал Скайп (есть у него такая бяка в настройках соединения — использовать порты 80 и 443 в качестве альтернативных, после того, как я отключил эту опцию, всё заработало).
Ошибка:
Сервер замедляется, перестаёт отвечать на запросы, хотя причин для этого нет — он не перегружен.
В логах появляется ошибка AH00341: winnt_accept: Asynchronous AcceptEx failed:
[Thu Jun 05 07:24:55.747090 2014] [mpm_winnt:notice] [pid 1784:tid 444] AH00455: Apache/2.4.9 (Win64) PHP/5.5.13 configured — resuming normal operations [Thu Jun 05 07:24:55.747090 2014] [mpm_winnt:notice] [pid 1784:tid 444] AH00456: Apache Lounge VC11 Server built: Mar 16 2014 12:42:59 [Thu Jun 05 07:24:55.747090 2014] [core:notice] [pid 1784:tid 444] AH00094: Command line: 'c:\Server\bin\Apache24\bin\httpd.exe -d C:/Server/bin/Apache24' [Thu Jun 05 07:24:55.748090 2014] [mpm_winnt:notice] [pid 1784:tid 444] AH00418: Parent: Created child process 4952 [Thu Jun 05 07:24:55.957978 2014] [mpm_winnt:notice] [pid 4952:tid 388] AH00354: Child: Starting 64 worker threads. [Thu Jun 05 07:26:16.695036 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно. : AH00341: winnt_accept: Asynchronous AcceptEx failed. [Thu Jun 05 07:26:16.695036 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно. : AH00341: winnt_accept: Asynchronous AcceptEx failed. [Thu Jun 05 07:26:48.250710 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно. : AH00341: winnt_accept: Asynchronous AcceptEx failed. [Thu Jun 05 07:26:48.250710 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно. : AH00341: winnt_accept: Asynchronous AcceptEx failed. [Thu Jun 05 07:29:27.137784 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно. : AH00341: winnt_accept: Asynchronous AcceptEx failed. [Thu Jun 05 07:29:27.137784 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно. : AH00341: winnt_accept: Asynchronous AcceptEx failed.
Решение:
В файл httpd.conf нужно добавить следующие строки:
Для 2.2:
Win32DisableAcceptEx EnableSendfile off EnableMMAP off
Для 2.4:
AcceptFilter http none AcceptFilter https none EnableSendfile off EnableMMAP off
Ошибка:
работать с сервером не могу пока не запущу Apache Monitor.exe, сам Apache в службах значится -как запущенная служба, но через браузер (localhost и т.д.) никакой реакции, пока не произведу вышеуказанное действие, получается запускать апач монитор надо каждый раз для работы c сервером?
сделал чтоб консоль не закрывалась вот что пишет
C:ServerbinApache24bin>httpd.exe
AH00526: Syntax error on line 241 of C:/Server/bin/Apache24/conf/httpd.conf:
DocumentRoot must be a directory
Решение:
наиболее вероятная причина в том, что Вы ставите не на диск C, либо поменяли пути, названия папок, либо не создали папки, о которых говорится в статье. Суть в том, что Apache не видит каталога c:/Server/data/htdocs/
Оказалось, что: нашёл решение проблемы по запарке каталог data создал в bin действительно на свежую голову думается лучше а то после работы ничего не мог понять))
Ошибка:
Появилась проблема: до момента добавления строк
PHPIniDir "C:/Server/bin/PHP" AddHandler application/x-httpd-php .php LoadModule php5_module "C:/Server/bin/PHP/php5apache2_4.dll"
все работает, как надо. Но как только вставляю их в конец файла httpd.conf. выдает ошибку «the requested operation has failed». В логах
Restarting the server. httpd.exe: Syntax error on line 532 of C:/Server/bin/Apache24/conf/httpd.conf: Cannot load C:/Server/bin/PHP/php5apache2_4.dll into server: xcdxe5 xedxe0xe9xe4xe5xed xf3xeaxe0xe7xe0xedxedxfbxe9 xecxeexe4xf3xebxfc. [Mon Jul 06 02:38:24.688572 2015] [mpm_winnt:notice] [pid 2916:tid 392] AH00364: Child: All worker threads have exited.
Решение:
Необходимо установить Visual C++ Redistributable for Visual Studio 2017 (или любой другой более поздний).
Ошибки PHP в Windows
Ошибка:
При запуске команды «c:ServerbinApache24binhttpd.exe -k restart» машина выдала следующее:
httpd.exe: Syntax error on line 537 of C:/Server/Bin/Apache24/conf/httpd.conf: Cannot load C:/Server/bin/PHP/php7apache2_4.dll into server: xedxe5 xedxe0xe9xe4xe5xedxf3xea xe0xe7xe0xedxedxfbxe9xecxeexe4xf3xebxfc.
В папке PHP отсутствует файл php7apache2_4.dll, но имеются файлы php7.dll и php7phpdbg.dll.
Решение:
Вы скачали архив с версией для отладки. Посмотрите здесь, как правильно выбрать нужный файл.
Ошибка:
Вчера настроил всё, всё работает, но вот перенёс сайт и выдало ошибку:
Parse error: syntax error, unexpected 'new' (T_NEW) in C:Serverdatahtdocsincludesjoomla.php on line 840.
Решение:
Дело в версии PHP. Обновите движок вашего сайта. Если обновлений нет, то нужно править исходный код, подробности смотрите в статье «Решение проблемы на PHP 7: Parse error: syntax error, unexpected T_NEW».
Ошибка:
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in C:Serverdatahtdocstest.php:2 Stack trace: #0 {main} thrown in C:Serverdatahtdocstest.php on line 2
вот что написано на test.php
<?php $resource = mysql_connect('localhost','root', 'NFSmostwanted22'); if (!$resource) { die('Ошибка при подключении: ' . mysql_error()); } echo 'Подключено успешно!'; mysql_close($resource); ?>
Ещё один вариант ошибки:
Создал в папке C:Serverdatahtdocs файл_test0000.html следующего содержания:
<html><head> <link href="../css/phpMM.css" rel="stylesheet" type="text/css" /> </head><body> <?php $link1 = mysql_connect('localhost', 'root'); ?> </body></html>
и получаю сообщение:
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in C:Serverdatahtdocs_test0000.html:7 Stack trace: #0 {main} thrown in C:Serverdatahtdocs_test0000.html on line 5
Решение:
Данное расширение — mysql_connect() — устарело, начиная с версии PHP 5.5.0, и удалено начиная с PHP 7.0.0. Используйте вместо него MySQLi или PDO_MySQL. Альтернативы для данной функции:
- mysqli_connect()
- PDO::__construct()
Ошибка:
Fatal error: Call to undefined function mb_detect_encoding() in C:serverdatahtdocsphpmyadminlibrariesphp-gettextgettext.inc on line 177
Решение:
Данная ошибка вызвана тем, что не подключено расширение mbstring. За это расширение в php.ini отвечает строчка
extension=php_mbstring.dll
Понятно, что для исправления ошибки нужно подключить расширение и перезапустить сервер (если не хотите ставить все расширения, как это описано в инструкции, то прежде чем выбрать, что Вам действительно нужно, лучше изучить описание каждого из них).
Тем не менее, теоретически, ошибка может быть вызвана тем, что из-за неправильной конфигурации Apache, файл php.ini вообще не «подхватывается» и PHP работает на дефолтных настройках, т.е. вообще без всех расширений. Но если это было бы так, то phpMyAdmin, в первую очередь пожаловался на то, что не определена другая функция (из-за отсутствия расширения отвечающего за связь с MySQL).
Ошибка:
phpMyAdmin выдаёт ошибку http 500.
Ставлю сервер на Windows 7. Apache и MySQL встали нормально по Вашей инструкции. Дошёл до PHP. Скачал архив php-7.2.3-Win32-VC15-x64.zip. Добавил в конец файла httpd.conf строки по инструкции. Перезапускаю Apache.
C:UsersАдминистратор>c:ServerbinApache24binhttpd.exe -k restart
Получаю в командной строке сообщение:
httpd.exe: Syntax error on line 537 of C:/Server/Bin/Apache24/conf/httpd.conf: Cannot load C:/Server/bin/PHP/php7apache2_4.dll into server: %1 xedxe5 xffxe2 xebxffxe5xf2xf1xff xefxf0xe8xebxeexe6xe5xedxe8xe5xec Win32.
В файле error.log появились строчки:
[Sun Mar 25 10:22:52.208678 2018] [mpm_winnt:notice] [pid 2608:tid 292] AH00455: Apache/2.4.33 (Win64) configured -- resuming normal operations [Sun Mar 25 10:22:52.224278 2018] [mpm_winnt:notice] [pid 2608:tid 292] AH00456: Apache Lounge VC15 Server built: Mar 18 2018 12:58:47 [Sun Mar 25 10:22:52.224278 2018] [core:notice] [pid 2608:tid 292] AH00094: Command line: 'c:\Server\bin\Apache24\bin\httpd.exe -d C:/Server/Bin/Apache24' [Sun Mar 25 10:22:52.224278 2018] [mpm_winnt:notice] [pid 2608:tid 292] AH00418: Parent: Created child process 2696 [Sun Mar 25 10:22:52.583079 2018] [mpm_winnt:notice] [pid 2696:tid 180] AH00354: Child: Starting 64 worker threads. "Syntax error in 524 line Cannont load "C:/Server/bin/PHP/php7apache2_4.dll" to server"
Решение
То был другой архив: php-7.2.3-Win32-VC15-x86.zip.
Скачал х64 и все заработало!
Ошибка:
возникла странная ошибка, причин которой понять не могу.
Стоит только добавить в каталог к PHP файл php.ini с любыми настройками, перестают выполняться php-скрипты. Убираю файл, перезапускаю Apache — работает (естественно до момента работы с базами данных например, тогда начинает просить расширения)
Решение:
Ответил сам пользователь: Оказалось, что в конфиге php по умолчанию выключена поддержка коротких тегов . Стоило ее включить и сразу все заработало 🙂
Ошибка:
В логах веб-сервера при каждом запуске Apache появляются ошибки:
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\Server\bin\PHP\ext\php_curl.dll' - xefxbfxbdxefxbfxbd xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbd xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbd xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbd.rn in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'C:\Server\bin\PHP\ext\php_intl.dll' - xefxbfxbdxefxbfxbd xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbd xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbd xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbd.rn in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'C:\Server\bin\PHP\ext\php_ldap.dll' - xefxbfxbdxefxbfxbd xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbd xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbd xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbd.rn in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'C:\Server\bin\PHP\ext\php_pdo_pgsql.dll' - xefxbfxbdxefxbfxbd xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbd xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbd xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbd.rn in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library 'C:\Server\bin\PHP\ext\php_pgsql.dll' - xefxbfxbdxefxbfxbd xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbd xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbd xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbd.rn in Unknown on line 0
Как их исправить?
Решение:
Вам нужно добавить путь до PHP в переменную окружения PATH в Windows.
Ошибка:
При использовании некоторых скриптов и CMS возникает ошибки:
Fatal error: Call to undefined function curl_multi_init() in …
Или:
Ошибка curl: SSL certificate problem: unable to get local issuer certificate
Решение:
Причина ошибки в том, что cURL настроена неправильно.
Чтобы cURL работала в Apache на Windows вам нужно:
1) Обязательно добавить PHP директорию в PATH (системные переменные среды). Как это сделать сказано чуть выше или здесь https://hackware.ru/?p=21#11
2) В файле C:ServerbinPHPphp.ini должна быть раскомментирована строка extension=curl
3) Необходимо скачать файл https://curl.haxx.se/ca/cacert.pem, затем в папке C:Server создать новую папку с именем certs и в эту новую папку (C:Servercerts) переместите скаченный файл.
4) В файле C:ServerbinPHPphp.ini найдите строку
;curl.cainfo =
И замените её на
curl.cainfo = C:Servercertscacert.pem
5) Перезапустите сервер.
Ошибка:
Выполнила 1-6 и также увидела
Fatal error: Uncaught Error: Call to undefined function mb_detect_encoding() in C:Serverdatahtdocsphpmyadminlibrariesphp-gettextgettext.inc:177 Stack trace: #0 C:Serverdatahtdocsphpmyadminlibrariesphp-gettextgettext.inc(282): _encode('The %s extensio…') #1 C:Serverdatahtdocsphpmyadminlibrariesphp-gettextgettext.inc(289): _gettext('The %s extensio…') #2 C:Serverdatahtdocsphpmyadminlibrariescore.lib.php(306): __('The %s extensio…') #3 C:Serverdatahtdocsphpmyadminlibrariescore.lib.php(961): PMA_warnMissingExtension('mbstring', true) #4 C:Serverdatahtdocsphpmyadminlibrariescommon.inc.php(102): PMA_checkExtensions() #5 C:Serverdatahtdocsphpmyadminindex.php(13): require_once('C:\Server\data\…') #6 {main} thrown inC:Serverdatahtdocsphpmyadminlibrariesphp-gettextgettext.inc on line 177
При этом extension_dir = «C:ServerbinPHPext» прописано именно так.
На других форумах пишут, что должно быть активно mbstring. Но мы его раскомментировали. Либо надо ещё что-то сделать ?
Решение:
После внесения изменений в файлы настроек нужно перезапустить сервер.
Если сервер перезапустили, а ошибка осталась, то одним из случаев может быть когда файл php.ini не подхватывается сервером. У меня получается так сделать, если при настройке Apache я добавляю строки
AddHandler application/x-httpd-php .php LoadModule php7_module "C:/Server/bin/PHP/php7apache2_4.dll"
А строку
PHPIniDir "C:/Server/bin/PHP"
не добавляю или пишу её с ошибкой.
Чтобы убедиться, что дело именно в том, что не подхватывается файл php.ini, выполните phpinfo (); (в статье описано, как это сделать) и найдите там Loaded Configuration File. Если запись такая:
То дело именно в этом.
Правильно должно быть так:
Loaded Configuration File C:ServerbinPHPphp.ini
Ответ пользователя: Оказалось, что php.ini-development надо было переименовать в просто php.
Ошибка:
Что-то у меня проблема с кодировкой. Если utf-8, то нормально. А 1251 странно глючит.
Все вроде нормально. Упростил код до безобразия
<html> <head> <META http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Проверка кодировки</title> </head> <body> <h1>Тестовый файл для проверки кодировки</h1> </body> </html>
Если файлу дать расширение html то в норме, а рсширение php — не работает, кракозябры идут, сам автоматом в utf перебрасывает.
AddDefaultCharset off AddDefaultCharset WINDOWS-1251
не помогает
Решение:
Не нужно забывать о таком варианте, когда ваши действия по установке кодировки работают, но крякозяблы появляются от того, что сам файл в неправильной кодировке.
Установка кодировки в коде файла или в файле .htaccess влияет только на то, как браузер будет трактовать этот файл, но не конвертирует его в другую кодировку.
То есть, допустим, ваш файл реально сохранён в кодировке utf-8. Вы указываете в качестве кодировки windows-1251. И это работает: браузер трактует ваш файл как windows-1251, но показывает крякозяблы, поскольку на самом-то деле это utf-8.
Поэтому начните с того, что проверьте кодировку файла и при необходимости пересохраните в нужной кодировке.
Если кодировка правильная, то для PHP файла безотказно работает
header('Content-Type: text/html; charset=utf-8');
Эта функция отправляет нужную кодировку в заголовке. Она должна идти до любого вывода текста на экран. Кодировку поменяйте на свою.
У меня есть целая статья про кодировку «Решение проблем неправильной кодировкой веб-страницы». Там в конце показано, как проверить HTTP заголовки с помощью cURL, которые отправляются сервером.
Программа curl есть и в Windows, поэтому если у вас прям ничего не получится, то напишите, что выводит curl.
Ошибки MySQL/MariaDB в Windows
Ошибка:
Found option without preceding group in config file
mysqld: [ERROR] Found option without preceding group in config file C:Serverbinmysql-8.0my.ini mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
Решение:
Ошибка в конфигурационном файле my.ini — пропущена секция [mysqld] или что-то подобное.
Ошибка:
MySQL сервер не запускается
Если MySQL не запускается, а в журнале ошибок вы видите строки Column count of mysql.user is wrong. Expected 51, found 49. The table is probably corrupted (количество колонок не соответствует ожидаемому, возможно таблица повреждена), а также Cannot load from mysql.tables_priv. The table is probably corrupted! (не получается прочитать из таблицы, возможно таблица повреждена), например:
2019-09-04T16:26:31.008436Z 0 [Warning] [MY-013143] [Server] Column count of mysql.user is wrong. Expected 51, found 49. The table is probably corrupted 2019-09-04T16:26:31.008449Z 0 [Warning] [MY-013139] [Server] Cannot load from mysql.db. The table is probably corrupted! 2019-09-04T16:26:31.008465Z 0 [Warning] [MY-013139] [Server] Cannot load from mysql.tables_priv. The table is probably corrupted! 2019-09-04T16:26:31.008482Z 0 [Warning] [MY-013139] [Server] Cannot load from mysql.tables_priv. The table is probably corrupted! 2019-09-04T16:26:31.008501Z 0 [Warning] [MY-013139] [Server] Cannot load from mysql.columns_priv. The table is probably corrupted! 2019-09-04T16:26:31.008509Z 0 [Warning] [MY-013139] [Server] Cannot load from mysql.procs_priv. The table is probably corrupted! 2019-09-04T16:26:31.008517Z 0 [Warning] [MY-013139] [Server] Cannot load from mysql.procs_priv. The table is probably corrupted! 2019-09-04T16:26:31.008525Z 0 [Warning] [MY-013139] [Server] Cannot load from mysql.proxies_priv. The table is probably corrupted! 2019-09-04T16:26:31.008532Z 0 [Warning] [MY-013139] [Server] Cannot load from mysql.proxies_priv. The table is probably corrupted! 2019-09-04T16:26:31.008539Z 0 [Warning] [MY-013139] [Server] Cannot load from mysql.proxies_priv. The table is probably corrupted! 2019-09-04T16:26:31.008547Z 0 [Warning] [MY-013139] [Server] Cannot load from mysql.role_edges. The table is probably corrupted! 2019-09-04T16:26:31.008554Z 0 [Warning] [MY-013139] [Server] Cannot load from mysql.role_edges. The table is probably corrupted! 2019-09-04T16:26:31.008562Z 0 [Warning] [MY-013139] [Server] Cannot load from mysql.default_roles. The table is probably corrupted! 2019-09-04T16:26:31.008569Z 0 [Warning] [MY-013139] [Server] Cannot load from mysql.default_roles. The table is probably corrupted! 2019-09-04T16:26:31.008577Z 0 [Warning] [MY-013139] [Server] Cannot load from mysql.global_grants. The table is probably corrupted! 2019-09-04T16:26:31.008584Z 0 [Warning] [MY-013139] [Server] Cannot load from mysql.password_history. The table is probably corrupted! 2019-09-04T16:26:31.008845Z 0 [ERROR] [MY-013139] [Server] Cannot load from mysql.global_grants. The table is probably corrupted! 2019-09-04T16:26:31.008938Z 0 [ERROR] [MY-010952] [Server] The privilege system failed to initialize correctly. For complete instructions on how to upgrade MySQL to a new version please see the 'Upgrading MySQL' section from the MySQL manual. 2019-09-04T16:26:31.017728Z 0 [ERROR] [MY-010119] [Server] Aborting 2019-09-04T16:26:32.072392Z 0 [System] [MY-010910] [Server] C:Serverbinmysql-8.0binmysqld: Shutdown complete (mysqld 8.0.17) MySQL Community Server - GPL.
Решение:
Если у вас что-то подобное, то попробуйте выполнить обновление.
Для этого переходим в папку с установленной СУБД (у вас путь может быть другим):
cd C:Serverbinmysql-8.0bin
Я запустил программу для обновления баз данных при переходе на новую версию MySQL:
./mysql_upgrade.exe -uroot
Но она мне сообщила:
>> The mysql_upgrade client is now deprecated. The actions executed by the upgrade client are now done by the server. To upgrade, please start the new MySQL binary with the older data directory. Repairing user tables is done automatically. Restart is not required after upgrade. The upgrade process automatically starts on running a new MySQL binary with an older data directory. To avoid accidental upgrades, please use the --upgrade=NONE option with the MySQL binary. The option --upgrade=FORCE is also provided to run the server upgrade sequence on demand. It may be possible that the server upgrade fails due to a number of reasons. In that case, the upgrade sequence will run again during the next MySQL server start. If the server upgrade fails repeatedly, the server can be started with the --upgrade=MINIMAL option to start the server without executing the upgrade sequence, thus allowing users to manually rectify the problem.
В этом сообщении сказано, что клиент mysql_upgrade теперь устарел. Его функции по обновлению выполняет сам сервер автоматически. Чтобы запретить обновление, нужно запустить с опцией —upgrade=NONE. Для запроса обновления, нужно запустить с опцией —upgrade=FORCE.
Я запустил следующим образом:
.mysqld.exe --upgrade=FORCE
и проблема с чтением таблиц была решена.
Ошибка:
Системная ошибка 1067.
При попытке запуске MySQL или MariaDB может возникнуть ошибка:
Служба "MySQL" запускается.. Не удалось запустить службу "MySQL". Системная ошибка. Системная ошибка 1067. Процесс был неожиданно завершен.
Решение:
Ошибка связана с тем, что не была выполнена инициализация базы данных — это необходимо сделать один раз после установке. В процессе инициализации создаётся необходимая для работы СУБД база данных, в которой храниться техническая информация (например, созданные пользователи, информация о таблицах и так далее).
Если у вас указанная выше ошибка возникла в MySQL, то выполните команды:
C:Serverbinmysql-8.0binmysqld --initialize-insecure --user=root C:Serverbinmysql-8.0binmysqld --install net start mysql
В этих командах исполнимые файлы MySQL расположены в папке C:Serverbinmysql-8.0, расположение базы данных взято из файла my.cnf (переменная datadir).
а база данных должна быть создана в C:ServerdataDBdata. Если у вас другое расположение файлов, то отредактируйте предыдущие команды под ваши условия.
Если у вас указанная выше ошибка возникла в MariaDB, то выполните команды:
C:Serverbinmariadbbinmysql_install_db.exe --datadir=C:ServerdataDBdata C:Serverbinmariadbbinmysqld --install net start mysql
В этих командах исполнимые файлы MariaDB расположены в папке C:Serverbinmariadb, а база данных должна быть создана в C:ServerdataDBdata. Если у вас другое расположение файлов, то отредактируйте предыдущие команды под ваши условия.
Подробности смотрите в статье «Как установить MariaDB 7.4 в Windows».
Ошибка:
Ошибки «Can’t create test file c:ServerdataDBdataMiAl-PC.lower-test» и «Can’t change dir to ‘c:ServerdataDBdata’ (Errcode: 2 «No such file or directory»)»
Если во время инициализации или при запуске службы СУБД у вас возникли примерно следующие ошибки:
2019-07-07 5:40:58 0 [Note] C:Serverbinmariadbbinmysqld.exe (mysqld 10.4.6-MariaDB) starting as process 12084 ... 2019-07-07 5:40:58 0 [Warning] Can't create test file c:ServerdataDBdataMiAl-PC.lower-test C:Serverbinmariadbbinmysqld.exe: Can't change dir to 'c:ServerdataDBdata' (Errcode: 2 "No such file or directory") 2019-07-07 5:40:58 0 [ERROR] Aborting
Решение:
Они означают, что отсутствует папка, в которой должны храниться базы данных. Для исправления достаточно создать необходимую папку.
Ошибка:
Ошибки InnoDB: Operating system error number 87 in a file operation и File .ib_logfile101: ‘aio write’ return OS error 187.
Решение:
Если инициализация завершилась неудачей и в папке C:ServerdataDBdata недостаёт файлов, а в логе ошибок C:ServerdataDBdata*.err вы видите примерно следующие записи:
[ERROR] InnoDB: Operating system error number 87 in a file operation [ERROR] InnoDB: File .ib_logfile101: 'aio write' return OS error 187. [ERROR] InnoDB: Cannot continue operation
То для решения этой проблемы удалите всё содержимое папки C:ServerdataDBdata и в файл my.ini добавьте ещё одну строчку:
innodb_flush_method=normal
Теперь инициализируйте MySQL ещё раз:
C:Serverbinmysql-8.0binmysqld --initialize-insecure --user=root C:Serverbinmysql-8.0binmysqld --install net start mysql
Ошибка:
Исправление MySQL после неудачной инициализации
Если вы что-то сделали не так при инициализации (например, указали не все рекомендуемые опции), то при последующей инициализации у вас тоже ничего не получится и в журнале ошибок будет примерно следующее:
[ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting. [ERROR] [MY-013236] [Server] Newly created data directory c:ServerdataDBdata is unusable. You can safely remove it. [ERROR] [MY-010119] [Server] Aborting
Решение:
В этом случае нужно остановить MySQL сервер:
net stop mysql c:Serverbinmysql-8.0binmysqld --remove
Очистите содержимое папки C:ServerdataDBdata (удалите всё из неё).
Теперь инициализируйте MySQL ещё раз:
C:Serverbinmysql-8.0binmysqld --initialize-insecure --user=root C:Serverbinmysql-8.0binmysqld --install net start mysql
Ошибка:
Подскажите, пожалуйста, почему при инициализации MySQL 8.0.13 в каталоге C:ServerdataDBdata ничего не появляется. Все файлы появляются в каталоге C:Serverbinmysql-8.0data. В файле ошибок SVO5195.err (находится в C:Serverbinmysql-8.0data) следующая информация:
2019-01-04T10:01:56.830374Z 0 [System] [MY-013169] [Server] C:Serverbinmysql-8.0binmysqld.exe (mysqld 8.0.13) initializing of server in progress as process 8860 2019-01-04T10:02:02.311887Z 5 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option. 2019-01-04T10:02:05.511185Z 0 [System] [MY-013170] [Server] C:Serverbinmysql-8.0binmysqld.exe (mysqld 8.0.13) initializing of server has completed
Решение:
Папка C:ServerdataDBdata прописана в файле my.ini.
Получается причина ошибки только одна: вы или не создали файл my.ini, или создали его неправильно, или создали его не в том месте, или не записали туда директиву с C:ServerdataDBdata — то есть что-то такое.
Ответ пользователя: Разобрался. Причина была в том, что я создавал файл my.ini.txt вместо my.ini. Не обратил внимания на отображение расширений в Проводники. Ошибка — глупая, но, думаю, сократит многим новоначальным время, если её указать.
Ошибка:
Я устанавливал себе MariaDB по вашей статье и возникла ошибка 1067. Что мне делать?
Решение:
Внимание: этот ответ подходит только для MariaDB 7.3 и более ранних версий!
Любые ошибки возникают только если хоть в чём-то отойти от мануала. Вы пропустили это:
Переместите папку C:Serverbinmariadbdata в папку C:ServerdataDB.
Ошибка:
Захожу http://localhost/phpmyadmin/index.php ввожу лог root а мне пишет ошибка — Невозможно подключиться к серверу MySQL.
Решение:
Такая ошибка возникает если не установлен или не запущен сервер MySQL. Внимательнее изучите инструкции https://hackware.ru/?p=21 и https://hackware.ru/?p=7033
Ошибка:
При установке Mysql когда я набираю в консоль mysql -u root, выдается ошибка ERROR 2003, can’t connect to mysql (10061), добавлю что открыл порт 3306 в брандмауре
Решение:
Это точно такая же ситуация как и в предыдущей ошибке: она возникает если не установлен или не запущен сервер MySQL. Внимательнее изучите инструкции https://hackware.ru/?p=21 и https://hackware.ru/?p=7033
Ошибка:
Эта версия mysqld.exe не совместима с Windows, работающей на этом компьютере
При попытке установить MySQL, либо при любой попытке запустить какой-либо исполнимый файл MySQL может возникнуть ошибка:
Эта версия mysqld.exe не совместима с Windows, работающей на этом компьютере. Проверьте сведения о системе, а затем обратитесь к издателю программного обеспечения.
Решение:
Причина ошибки в том, что делается попытка установить MySQL на 32-битный Windows. Архив «Windows (x86, 64-bit), ZIP Archive» содержит в себе только версию для 64-битных систем (хотя название файла название может сбить с толку).
В виде отдельного портативного архива MySQL больше недоступна для 32-битных систем.
Из этой ситуации есть два выхода:
- воспользоваться установщиком MySQL Installer (он на той же странице, где вы скачивали MySQL — большой такой банер). Как сказано в описании, там «все продукты MySQL» — что нужно и что не нужно, в том числе 32-битная версия. Установка проходит в графическом интерфейсе, настройка тоже выполняется из графического интерфейса и, как бы это не было странно, занимает больше времени, чем установка из портативного архива. Но, в принципе, ничего сложного;
- перейти на MariaDB. Это улучшенная версия MySQL, которая является бесплатной, но в ней собраны функции платных вариантов MySQL. Портативный архив с версией для 32-битных систем имеется. Сейчас много кто перешёл с MariaDB на MySQL (в том числе хостинги). У меня на компьютере тоже установлена именно MariaDB вместо MySQL. Инструкция по установке всего веб-сервера здесь: https://hackware.ru/?p=7033 (там точно такая же инструкция как и здесь, но вместо MySQL показана установка MariaDB). Что касается работы сайтов, то для них MySQL и MariaDB абсолютно равнозначны.
Ошибка:
После выполнения команд :
C:Serverbinmysql-8.0binmysqld --initialize-insecure --user=root C:Serverbinmysql-8.0binmysqld --install net start mysql
база данных в C:ServerdataDBdata не создаётся.
Решение:
Выяснилось, что файл my.ini был создан как my.ini.txt. Также причинами может быть то, что файл my.ini не был создан вовсе или в него неправильно скопировали настройки.
Ошибка:
я попыталась выполнить «инициализацию и установку» через командную строку от имени администратора. Введя первую строку (C:Serverbinmysql-8.0binmysqld —initialize-insecure —user=root) я получила ответ, что системе не удается найти путь.
Решение:
Неверно названы папки, либо при сооздании папок для сервера что-то сделано неправильно.
Ошибка:
Также попробовала из самой папки C:Serverbinmysql-8.0bin открыть файл mysqld.exe (подумала,что именно его я открываю в командной строке), тут появилась системная ошибка, что «Не удается продолжить выполнение кода, поскольку система не обнаружила VCRUNTIME140_1.dll. Для устранения этой проблемы попробуйте переустановить программу.»
Решение:
Файл VCRUNTIME140_1.dll не найден потому что не установили Visual C++ Redistributable for Visual Studio 2015-2019.
Ошибка:
При попытке запустить MySQL данная служба не запускаются и появляются ошибки:
Служба "MySQL" запускается…….. Не удалось запустить службу "MySQL". Для вызова дополнительной справки наберите NET HELPMSG 3523. ошибка источник PHP-8.1.1 php[13708]
А также:
Не удалось запустить службу "MySQL". Для вызова дополнительной справки наберите NET HELPMSG 3534.
Подроности причины ошибки:
PHP Warning: PHP Startup: Unable to load dynamic library 'PDO_OCI' PHP Warning: PHP Startup: Unable to load dynamic library 'PDO_OCI' (tried: C:ServerbinPHPextPDO_OCI (Не найден указанный модуль), C:ServerbinPHPextphp_PDO_OCI.dll (Не найден указанный модуль)) (C:ServerbinApache24binhttpd.exe -d C:/Server/bin/Apache24)
Решение:
Причина ошибки в том, что активировано расширение pdo_oci. Отключите его в файле php.ini:
;extension=pdo_oci
Ошибка:
Deprecation Notice in .vendortwigtwigsrcLoaderFilesystemLoader.php#40 realpath(): Passing null to parameter #1 ($path) of type string is deprecated Backtrace .vendortwigtwigsrcLoaderFilesystemLoader.php#40: realpath(NULL) .librariesclassesTemplate.php#57: TwigLoaderFilesystemLoader->__construct(string 'C:\Server\data\htdocs\-phpmyadmin\\templates\') .librariesclassesTheme.php#101: PhpMyAdminTemplate->__construct() .librariesclassesTheme.php#174: PhpMyAdminTheme->__construct() .librariesclassesThemeManager.php#307: PhpMyAdminTheme::load( string './themes/metro', string 'C:\Server\data\htdocs\-phpmyadmin\./themes/metro/', ) .librariesclassesThemeManager.php#79: PhpMyAdminThemeManager->loadThemes() .librariesclassesThemeManager.php#121: PhpMyAdminThemeManager->__construct() .librariesclassesThemeManager.php#385: PhpMyAdminThemeManager::getInstance() .librariescommon.inc.php#240: PhpMyAdminThemeManager::initializeTheme() .index.php#15: require_once(.librariescommon.inc.php) Deprecation Notice in .vendortwigtwigsrcMarkup.php#35 Return type of TwigMarkup::count() should either be compatible with Countable::count(): int, or the #[ReturnTypeWillChange] attribute should be used to temporarily suppress the notice Backtrace .vendorcomposerClassLoader.php#444: include(.vendortwigtwigsrcMarkup.php) .vendorcomposerClassLoader.php#322: ComposerAutoloadincludeFile(string 'C:\Server\data\htdocs\-phpmyadmin\vendor\composer/../twig/twig/src/Markup.php') .tmptwig4646f1bfbf4328d3d22fddffb9178fdeb9868d0740e4cc8b5bbd6f2fcfb8e4523e.php#59: ComposerAutoloadClassLoader->loadClass(string 'Twig\Markup') .vendortwigtwigsrcTemplate.php#405: __TwigTemplate_034511bee5325c368ee003e3d97d6cb47c3e1c94ebb527bcf0b76ba7818d1ac6->doDisplay( array, array, ) .vendortwigtwigsrcTemplate.php#378: TwigTemplate->displayWithErrorHandling( array, array, ) .vendortwigtwigsrcTemplate.php#390: TwigTemplate->display(array) .vendortwigtwigsrcTemplateWrapper.php#45: TwigTemplate->render( array, array, ) .librariesclassesTemplate.php#132: TwigTemplateWrapper->render(array) .librariesclassesHeader.php#714: PhpMyAdminTemplate->render( string 'javascript/variables', array, ) .librariesclassesHeader.php#193: PhpMyAdminHeader->getVariablesForJavaScript() .librariesclassesHeader.php#142: PhpMyAdminHeader->addDefaultScripts() .librariesclassesResponse.php#184: PhpMyAdminHeader->__construct() .librariesclassesResponse.php#215: PhpMyAdminResponse->__construct() .librariesclassesPluginsAuthAuthenticationCookie.php#102: PhpMyAdminResponse::getInstance() .librariesclassesPluginsAuthenticationPlugin.php#275: PhpMyAdminPluginsAuthAuthenticationCookie->showLoginForm() .librariescommon.inc.php#263: PhpMyAdminPluginsAuthenticationPlugin->authenticate() .index.php#15: require_once(.librariescommon.inc.php) Deprecation Notice in .vendortwigtwigsrcMarkup.php#40 Return type of TwigMarkup::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[ReturnTypeWillChange] attribute should be used to temporarily suppress the notice Backtrace .vendorcomposerClassLoader.php#444: include(.vendortwigtwigsrcMarkup.php) .vendorcomposerClassLoader.php#322: ComposerAutoloadincludeFile(string 'C:\Server\data\htdocs\-phpmyadmin\vendor\composer/../twig/twig/src/Markup.php') .tmptwig4646f1bfbf4328d3d22fddffb9178fdeb9868d0740e4cc8b5bbd6f2fcfb8e4523e.php#59: ComposerAutoloadClassLoader->loadClass(string 'Twig\Markup') .vendortwigtwigsrcTemplate.php#405: __TwigTemplate_034511bee5325c368ee003e3d97d6cb47c3e1c94ebb527bcf0b76ba7818d1ac6->doDisplay( array, array, ) .vendortwigtwigsrcTemplate.php#378: TwigTemplate->displayWithErrorHandling( array, array, ) .vendortwigtwigsrcTemplate.php#390: TwigTemplate->display(array) .vendortwigtwigsrcTemplateWrapper.php#45: TwigTemplate->render( array, array, ) .librariesclassesTemplate.php#132: TwigTemplateWrapper->render(array) .librariesclassesHeader.php#714: PhpMyAdminTemplate->render( string 'javascript/variables', array, ) .librariesclassesHeader.php#193: PhpMyAdminHeader->getVariablesForJavaScript() .librariesclassesHeader.php#142: PhpMyAdminHeader->addDefaultScripts() .librariesclassesResponse.php#184: PhpMyAdminHeader->__construct() .librariesclassesResponse.php#215: PhpMyAdminResponse->__construct() .librariesclassesPluginsAuthAuthenticationCookie.php#102: PhpMyAdminResponse::getInstance() .librariesclassesPluginsAuthenticationPlugin.php#275: PhpMyAdminPluginsAuthAuthenticationCookie->showLoginForm() .librariescommon.inc.php#263: PhpMyAdminPluginsAuthenticationPlugin->authenticate() .index.php#15: require_once(.librariescommon.inc.php)
Решение:
О причинах и исправление ошибки смотрите в статье «Ошибка phpMyAdmin «Deprecation Notice in .vendortwigtwigsrcLoaderFilesystemLoader.php#40 realpath(): Passing null to parameter #1 ($path) of type string is deprecated» (РЕШЕНО)».
Ошибки phpMyAdmin в Windows
Ошибка:
1.
попытался установить пшагово по Вашей инструкции все программы для запуска phpMyAdminно выходит ошибка :
"Расширение mysqli не найдено. Пожалуйста, проверьте ваши настройки PHP. Смотрите [a@doc/html/faq.html#faqmysql@documentation]our documentation для дополнительной информации."
2.
При первоначальном запуске phpMyAdmin получила ошибку
The mysqli extension is missing. Please check your PHP configuration. See our documentation for more information.
Решение:
Возможные причины ошибки:
1.
В файле php.ini не раскомментирована строка:
extension=mysqli
2.
В файл httpd.conf не добавлена или записана с ошибкой строка:
PHPIniDir "C:/Server/bin/PHP"
3.
Файл php.ini имеет неверное имя, например, вы забыли его переименовать из php.ini-development.
В последних двух случаях настройки из файла php.ini вообще не используются, поскольку сам файл не может быть найден сервером. Чтобы это проверить, откройте файл i.php с функцией:
phpinfo ();
Найдите поле Loaded Configuration File, там должны быть перечислены загруженные конфигурационные файлы, например:
Loaded Configuration File C:ServerbinPHPphp.ini
Если у вас так, как показано выше, значит файл php.ini используется, но расширение mysqli не активировано (см. 1й пункт выше).
Ошибка:
Добавляю http://localhost/phpmyadmin/setup/
вместо панели управления вижу код:
<?php /* vim: set expandtab sw=4 ts=4 sts=4: */ /** * Front controller for setup script * * @package PhpMyAdmin-Setup * @license http://www.gnu.org/licenses/gpl.html GNU GPL 2.0 */ /** * Core libraries. */ require './lib/common.inc.php'; $page = filter_input(INPUT_GET, 'page'); $page = preg_replace('/[^a-z]/', '', $page); if ($page === '') { $page = 'index'; } if (!file_exists("./setup/frames/$page.inc.php")) { // it will happen only when entering URL by hand, we don't care for these cases PMA_fatalError(__('Wrong GET file attribute value')); }
и т. д.
Решение:
Сервер Apache работает без PHP
Ответ пользователя: Перезапустил и обновил браузер все получилось
Ошибка:
Столкнулся вот с какой проблемой — после расширения возможностей phpmyadmin и попытке войти под пользователем pma, выскакивает ошибка: #1045 Невозможно подключиться к серверу MySQL. Под root всё в порядке. Если знаете в чем проблема, подскажите пожалуйста как её исправить?! Хочется взглянуть на эти дополнительные возможности phpmyadmin)
Решение:
Вам не нужно заходить в phpMyAdmin от имени пользователя pma. Когда Вы всё настроили и зашли под рутом, то всё уже работает. Просто, на самом деле, в phpMyAdmin мало что меняется. Чтобы убедиться, что доп. возможности работают, кликните по какой-нибудь базе данных и посмотрите, есть ли у Вас в верхнем меню Дизайнер и Слежение. Если есть, значить всё работает.
Ошибка:
Apache, PHP и MySQL установились без проблем, но когда я дошла до 6-го пункта (phpMyAdmin), получила сообщение об ошибке:
Fatal error: Call to undefined function mb_detect_encoding() in C:Serverdatahtdocsphpmyadminlibrariesphp-gettextgettext.inc on line 177.
Я читала комментарий выше об этой же ошибке, но у меня все нужные строки в php.ini раскомментированы, все делала четко по инструкции. Но все равно ошибка.
С чем это может быть связано и как исправить?
Решение:
перезагрузила — все работает)))
Ошибка:
У меня при установке phpMyAdmin возникла проблема:
Добавить новый сервер Warning: Illegal string offset 'Servers/1/auth_type' in C:ServerdatahtdocspmalibrariesconfigWalidator.class.php on line 312 Warning: Illegal string offset 'Servers/1/auth_type' in C:ServerdatahtdocspmalibrariesconfigWalidator.class.php on line 319 Warning: Illegal string offset 'Servers/1/auth_type' in C:ServerdatahtdocspmalibrariesconfigWalidator.class.php on line 328 Warning: Illegal string offset 'Servers/1/auth_type' in C:ServerdatahtdocspmalibrariesconfigWalidator.class.php on line 336 Warning: Illegal string offset 'Servers/1/pmadb' in C:ServerdatahtdocspmalibrariesconfigWalidator.class.php on line 371 Warning: Illegal string offset 'Servers/1/controluser' in C:ServerdatahtdocspmalibrariesconfigWalidator.class.php on line 376 Warning: Illegal string offset 'Servers/1/controlpass' in C:ServerdatahtdocspmalibrariesconfigWalidator.class.php on line 381 Warning: Illegal string offset 'Servers/1/connect_type' in C:ServerdatahtdocspmalibrariesconfigWalidator.class.php on line 388 Warning: Illegal string offset 'Servers/1/hosf in C:ServerdatahtdocspmalibrariesconfigWalidator.class.php on line 389 Warning: Illegal string offset 'Servers/1/port' in C:ServerdatahtdocspmalibrariesconfigWalidator.class.php on line 389 Warning: Illegal string offset 'Servers/1/socket' in C:ServerdatahtdocspmalibrariesconfigWalidator.class.php on line 390 Warning: Illegal string offset 'Servers/1/controluser' in C:ServerdatahtdocspmalibrariesconfigWalidator.class.php on line 390 Warning: Illegal string offset 'Servers/1/controlpass' in C:ServerdatahtdocspmalibrariesconfigWalidator.class.php on line 391 (&) Предупреждение_______________________________________________________________________________________________________ Данные формы содержат ошибки Проверка данных на соответствие и возвращение в изначальное значение при наличии ошибки Хранение конфигурации ► Не удалось соединиться с сервером базы данных! - mysqli_connect() expects parameter 5 to be long, string given Игнорировать ошибки Показать форму
Решение:
Если так, то это ошика исключительно версии phpMyAdmin 4.3.2. Тикет ошибки: http://sourceforge.net/p/phpmyadmin/bugs/4653/
Очевидные решения:
1) пользоваться phpMyAdmin из ветки 4.2,
2) подождать пока починят.
Ошибка:
Добрый день. Сделала все по инструкции, но при вводе http://localhost/phpmyadmin/ выдает такой текст «Composer detected issues in your platform: Your Composer dependencies require the following PHP extensions to be installed: mysqli, openssl«.
Решение:
Возможные причины ошибки и способ решения смотрите в статье: Ошибка «Composer detected issues in your platform: Your Composer dependencies require the following PHP extensions to be installed: mysqli, openssl» (РЕШЕНО)
Вопросы и ответы по веб-серверу в Windows
Вопрос:
Я хочу потренироваться в администрировании сайта на WordPress или Я изучаю программирование PHP для WordPress, как мне установить эту CMS на свой локальный сервер в Windows?
Ответ:
Смотрите статью «Как установить WordPress в Windows».
Вопрос:
Могут ли мой веб-сервер взломать?
Ответ:
Да, по умолчанию безопасности веб-сервера не уделено никакого внимания — задача минимум, заставить его работать на Windows. Сразу после успешной установки и проверки, настоятельно рекомендуется перейти ко второй стадии: «Как защитить веб-сервер Apache от взлома в Windows».
Вопрос:
У меня есть уже готовый сайт всё настроил.как сделать чтоб его стало видно из интернета?
Ответ:
Здесь подробная инструкция: «Как веб-сервер на своём компьютере сделать доступным для других».
Вопрос:
Как настроить поддомены и виртуальные хосты?
Ответ:
Подробная инструкция «Настройка Apache в Windows» в разделе Подключение виртуальных хостов Apache в Windows.
Вопрос:
Скажите пожалуйста где вы взяли файл C:/Server/bin/PHP/php5apache2_4.dll
А то у меня ругается апач на его отсутствие
Ответ:
Этот файл с самого начала есть в архиве php-5.5.9-Win32-VC11-x64.zip , который скачиваю с официального сайта.
Если в Вашем архиве нет этого файла, скорее всего, Вы скачали или старую версию (5.4.*, 5.3.*) или Non-Thread Safe (NTS) версию.
Если файл C:/Server/bin/PHP/php5apache2_4.dll присутствует, но Apache выдаёт ошибку, значит проблема в настройке Apache.
Ссылки на «правильный» PHP:
64-бит: http://windows.php.net/downloads/releases/php-5.5.9-Win32-VC11-x64.zip
32-бит: http://windows.php.net/downloads/releases/php-5.5.9-Win32-VC11-x86.zip
(ссылки устарели)
Вопрос:
А что, если после установки MySQL 5.4.16 не появилось окошко настроек «MySQL Server Instance Configuration Wizard»?
Что делать? Как настраивать?
Ответ:
Значит вы скачали не установщик, а zip-архив. Лично мне ручная установка MySQL кажется более простой и гибкой. Как это сделать описано здесь.
Вопрос:
Как поменять пароль для MySQL?
Ответ:
Для задания нового пароля MySQL в командной строке:
c:Serverbinmysql-5.6binmysql -u root mysql mysql> update user set Password=PASSWORD('новый пароль') WHERE User='root'; mysql> exit net stop mysql net start mysql
Вопрос:
Как прописать переменные среды для MySQL в Windows?
Ответ:
Откройте «Мой компьютер» (у меня называется «Этот компьютер» — не суть). Там выберите «Свойства системы». Дальше выберите «Дополнительные параметры системы». В открывшемся окне на вкладке «Дополнительно» нажмите «Переменные среды». Там два окошечка, смотрите на то, которое называется «Системные переменные». Находите переменную «Path». Кликаете два раза на ней. В «Значение переменной» уже много-много чего понаписано. Добавляете туда (например, вставьте в самое начало) строку (если у вас MySQL):
C:Serverbinmysql-8.0
Или (если у вас MariaDB):
C:Serverbinmariadb
Нажмите везде ОК, чтобы закрылись все окна. Сразу, даже без перезагрузки можно работать в командной строке и вызывать MySQL как mysql — полный путь прописывать до бинарника не нужно.
Вопрос:
Посоветуйте хостинг
Ответ:
Хостинг, которым пользуется автор этих инструкций на протяжении 10 лет и где размещены этот и другие сайты с инструкциями: здесь. Для получения бесплатного месяца и других бонусов, указывайте промокод b33e0e2f
Совет:
Хотите навсегда забыть о всех проблемах с сервером? Хотите просто радоваться развитию вашего сайта и не думать ни о каких технических проблемах? Хотите получить надёжных друзей в виде высококвалифицированной и быстрой технической поддержки? Лучший хостинг от лидеров рынка по доступным ценам. Тарифы. Чтобы получить бесплатный месяц веб-хостинга, другие бонусы и подарки, указывайте промокод b33e0e2f
Связанные статьи:
- Как установить веб-сервер Apache с PHP, MySQL и phpMyAdmin на Windows (94.2%)
- Ошибка «Composer detected issues in your platform: Your Composer dependencies require the following PHP extensions to be installed: mysqli, openssl» (РЕШЕНО) (61.6%)
- Установка Apache, PHP, MySQL и phpMyAdmin на Windows XP (59.5%)
- Готовая сборка Apache для Windows XP (59.5%)
- Как исправить «Configuration File (php.ini) Path» no value (57.7%)
- mysqldump в PowerShell портит нелатинские символы при экспорте базы данных (РЕШЕНО) (RANDOM — 52.9%)
I get a apache error when I try access to anything folder or file, it returns Http Not found
or Forbidden
I am trying restart and start apache
sudo apachectl restart
output:
(48)Address already in use: AH00072: make_sock: could not bind to address [::]:80
(48)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
I am trying stop it
sudo apachectl stop
output
httpd (no pid file) not running
I run sudo lsof -i:80
output:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 8904 root 5u IPv6 0x21884d81f1597d8f 0t0 TCP *:http (LISTEN)
httpd 9012 _www 5u IPv6 0x21884d81f1597d8f 0t0 TCP *:http (LISTEN)
httpd 12726 _www 5u IPv6 0x21884d81f1597d8f 0t0 TCP *:http (LISTEN)
httpd 12731 _www 5u IPv6 0x21884d81f1597d8f 0t0 TCP *:http (LISTEN)
httpd 12732 _www 5u IPv6 0x21884d81f1597d8f 0t0 TCP *:http (LISTEN)
Any idea to solve that ?
Useful information:
OS X El Capitan
asked Jun 26, 2018 at 16:36
jjoselonjjoselon
2,6114 gold badges21 silver badges36 bronze badges
3
In my Mac with Mojave (10.14.1) suddenly Apache couldn’t give to serve ipv4 anymore, then gave me ERROR 403. I tried to kill all apache (sudo killall httpd)… checking de PID’s on (sudo lsof | grep AMP | grep apache)… even didn’t work… just ipv6 was available… still ERROR 403.
What works for me: Disable OSX’s built-in Apache server.
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
After that:
sudo apachectl -k restart
Be happy
quant
2,1862 gold badges19 silver badges29 bronze badges
answered Nov 11, 2018 at 14:22
3
This one helped me:
Please edit httpd.conf file.
/usr/local/etc/httpd/httpd.conf
And replace
Listen 80
with
Listen 127.0.0.1:80
Restart apache
sudo apachectl -k restart
answered Jan 4, 2021 at 13:38
NuzilNuzil
1611 silver badge3 bronze badges
2
Try
sudo netstat -ltnp | grep ':80'
Output: tcp6 0 0 :::80 :::* LISTEN 1500/apache2
sudo kill 1500
sudo service apache2 restart
answered Dec 19, 2019 at 8:54
1
One of a couple of things could be happening:
- You have a different version of apache running. You can make sure that you’re using the correct one by running
which apachectl
. As an example, I also have two versions of apache/usr/sbin/apachectl
and/usr/local/bin/apachectl
- You’re not running
apachectl start
as root, although it appears that you are. - You can run
sudo lsof -i:80
to see what’s binding that port currently
answered Jun 26, 2018 at 16:41
3
this error ocurs because apache server listen by deafult in port 80 so another service or program is using that port and apache canot start.
The solution is identify what program or service is using that port an then close, disable or unistall it.
to identify you can run netstat
sudo netstat -ltnp | grep ':80'
or
sudo lsof -i:80
in my case i have installed nginx and apache at the same time and both uses the port 80.
Temporary Solution: Stop or kill the service, program, etc.
Permanent Solution:
- Change the port of apache server in config file
/etc/apache2/apache2.conf - Uninstall the service or program that uses port 80.
in my case I needed both so I decided to temporarily fix it by disabling the service with:
systemctl stop MyServiceName.service
If it is a service otherwise use kill command.
answered Jun 24, 2020 at 23:46
I had my configuration set up this way before as well, and ran into the same problem after I upgraded OSX this last time. I tried to find ANYTHING that was listening on either port 80 or 443 and couldn’t find a thing anywhere. It took me a while but finally found another article that described a fix that actually worked. Keep in mind I’m using a homebrew install and have unloaded the default apache2 install that comes with Mac OSX.
Here’s what I had before in my httpd.conf:
Listen 80
and I had something similar in ssl.conf
Listen 443 https
I had to alter my httpd.conf file to use a ServerName of localhost and Listen on 0.0.0.0:80, and same for ssl.conf but 0.0.0.0:443 https
httpd.conf:
ServerName localhost
Listen 0.0.0.0:80
and ssl.conf
Listen 0.0.0.0:443 https
Once I tried starting it again, everything was happy. Hope that helps! I would link to the article but I’m having trouble finding it again!
answered Mar 12, 2021 at 21:29
EvanEvan
614 bronze badges
Well, it looks as if httpd is already running. To check run
lsof -i TCP:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 281 root 3u IPv6 19479 0t0 TCP *:80 (LISTEN)
….
So kill httpd and do what you want
answered Jul 15, 2022 at 6:55
1
If you’ve recently done a software update and you renamed or removed any of the default files in /etc/httpd/conf.d/ go have a look there. You might have duplicate directives because the package manager re-installed them.
In my case, I prefixed the files with numbers so I could control the load order… but an OS update re-installed the original files so
I had two files with «Listen 443» in them which conflicted and wasn’t caught by the syntax check. Removing the os files fixed the issue.
(This time I left them but made them empty so the conflict will be displayed on re-install or update)
answered Feb 12 at 8:03
txyojitxyoji
6,6601 gold badge43 silver badges46 bronze badges
Часть серии: распространенные ошибки Apache
В этой серии руководств объясняется, как устранять неполадки и исправлять некоторые из наиболее распространенных ошибок, с которыми вы можете столкнуться при использовании веб-сервера Apache.
Каждый учебник в этой серии включает описание распространенных ошибок конфигурации Apache, сети, файловой системы или разрешений. Серия начинается с обзора команд и файлов журнала, которые вы можете использовать для устранения неполадок Apache. В последующих руководствах подробно рассматриваются конкретные ошибки.
Вступление
Сообщение об ошибке Apache AH00072: make_sock: could not bind to address
генерируется, когда другой процесс прослушивает тот же порт, который настроен для использования Apache. Обычно это стандартный порт 80
для HTTP-соединений или порт 443
для HTTPS-соединений. Однако любой конфликт порта с другим процессом может вызвать ошибку AH00072.
Ошибка возникает из сетевого стека базовой операционной системы. Проблема в том, что только один процесс может быть привязан к порту в любой момент времени. Если другой веб-сервер, такой как Nginx, настроен на прослушивание порта 80
и работает, то Apache не сможет запросить порт для себя.
Чтобы обнаружить конфликт порта с Apache, вам необходимо изучить вывод systemctl
и journalctl
, чтобы определить IP-адрес и порт, вызывающие ошибку. Затем вы можете решить, как решить проблему, будь то переключение веб-серверов, изменение IP-адреса, используемого Apache, порта или любой комбинации этих параметров.
Устранение неполадок с systemctl
Следуя инструкциям по устранению неполадок из руководства «Как устранить распространенные ошибки Apache» в начале этой серии, первым шагом при устранении неполадок AH00072: make_sock: could not bind to address
является проверка состояния Apache с помощью systemctl
.
Если systemctl
не включает вывод, описывающий проблему, то последний раздел этого руководства, Устранение неполадок с использованием журналов journalctl, объясняет, как исследовать журналы systemd
, чтобы найти конфликтующий порт.
Выходные данные systemctl status
во многих случаях будут содержать всю диагностическую информацию, необходимую для устранения ошибки. Он будет включать IP-адрес, который использует Apache, а также порт, к которому он пытается привязаться. В выходных данных также будет указано, как долго Apache не запускался, чтобы вы могли определить, как долго проблема затрагивала Apache.
В дистрибутивах Linux, производных от Ubuntu и Debian, запустите следующую команду, чтобы проверить статус Apache:
sudo systemctl status apache2.service -l --no-pager
В системах CentOS и Fedora используйте эту команду для проверки статуса Apache:
sudo systemctl status httpd.service -l --no-pager
Флаг -l
гарантирует, что systemctl
выводит все содержимое строки вместо замены длинных строк многоточием (…
). Флаг --no-pager
выводит весь журнал на ваш экран без вызова такого инструмента, как less
, который показывает только экран содержимого за раз.
Поскольку вы устраняете неполадки с сообщением об ошибке AH00072: make_sock
, вы должны получить вывод, подобный следующему:
httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since Tue 2020-07-28 13:58:40 UTC; 8s ago Docs: man:httpd.service(8) Process: 69 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE) Main PID: 69 (code=exited, status=1/FAILURE) Status: "Reading configuration..." Tasks: 213 (limit: 205060) Memory: 25.9M CGroup: /system.slice/containerd.service/system.slice/httpd.service Jul 28 13:58:40 e3633cbfc65e systemd[1]: Starting The Apache HTTP Server… Jul 28 13:58:40 e3633cbfc65e httpd[69]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80 Jul 28 13:58:40 e3633cbfc65e httpd[69]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80 Jul 28 13:58:40 e3633cbfc65e httpd[69]: no listening sockets available, shutting down Jul 28 13:58:40 e3633cbfc65e httpd[69]: AH00015: Unable to open logs Jul 28 13:58:40 e3633cbfc65e systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE Jul 28 13:58:40 e3633cbfc65e systemd[1]: httpd.service: Failed with result 'exit-code'. Jul 28 13:58:40 e3633cbfc65e systemd[1]: Failed to start The Apache HTTP Server.
Обратите внимание, что ваш вывод может немного отличаться, если вы используете дистрибутив, производный от Ubuntu или Debian, где имя процесса Apache не httpd
, а apache2
.
Этот пример выходных данных systemctl
включает несколько выделенных строк из журнала systemd
, которые описывают ошибку AH00072. Эти строки, каждая из которых начинается с (98)Address already in use: AH00072: make_sock: could not bind to address
, (98) Адрес уже используется: AH00072: make_sock: не удалось привязать к адресу, предоставляют вам всю информацию об ошибке AH00072, которая необходима для дальнейшего устранения неполадок, поэтому вы можете пропустить следующий journalctl
шаги и вместо этого перейдите к разделу Устранение неполадок с помощью утилит ss и ps в конце этого руководства.
Если ваш вывод systemctl
не дает конкретной информации об IP-адресе и порте или портах, которые вызывают ошибку AH00072, вам необходимо проверить вывод journalctl
из журналов systemd
. В следующем разделе объясняется, как использовать journalctl для устранения ошибки AH00072.
Устранение неполадок с использованием журналов journalctl
Если ваши выходные данные systemctl
не содержат подробностей об ошибке AH00072, вам следует продолжить использование команды journalctl
для проверки журналов systemd
для Apache.
В системах, производных от Ubuntu и Debian, выполните следующую команду:
sudo journalctl -u apache2.service --since today --no-pager
В системах, основанных на CentOS, Fedora и RedHat, используйте эту команду для проверки журналов:
sudo journalctl -u httpd.service --since today --no-pager
Флаг --since today
ограничивает вывод команды записями журнала, начинающимися только с 00:00:00 текущего дня. Использование этой опции поможет ограничить объем записей журнала, которые вам необходимо изучить при проверке ошибок.
Если Apache не может подключиться к используемому порту, найдите в выходных данных строки, похожие на следующие записи журнала, в частности строки, содержащие код ошибки AH00072, как показано в этом примере:
-- Logs begin at Tue 2020-07-14 20:10:37 UTC, end at Tue 2020-07-28 14:01:40 UTC. -- . . . Jul 28 14:03:01 b06f9c91975d apachectl[71]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80 Jul 28 14:03:01 b06f9c91975d apachectl[71]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80 Jul 28 14:03:01 b06f9c91975d apachectl[71]: no listening sockets available, shutting down
Эти выходные данные указывают на две ошибки AH00072. Первый из них объясняет, что Apache не может связываться с адресом [::]:80
, который является портом 80
на всех доступных интерфейсах IPv6. Следующая строка с адресом 0.0.0.0:80
указывает, что Apache не может подключиться к порту 80
на всех доступных интерфейсах IPv4. В зависимости от конфигурации вашей системы IP-адреса могут быть разными и отображать только отдельные IP-адреса и могут включать только ошибки IPv4 или IPv6.
Даже если ваша собственная система может иметь разные конфликтующие интерфейсы и порты, ошибки будут похожи на вывод, показанный здесь. С выходными данными journalctl
вы сможете диагностировать проблему с помощью ss
в следующем разделе этого руководства.
Устранение неполадок с утилитами ss
и ps
Чтобы устранить ошибку AH00072, вам необходимо определить, какой другой процесс прослушивает IP-адрес и порт, которые Apache пытается использовать. Большинство современных дистрибутивов Linux включают утилиту ss
, которая может использоваться для сбора информации о состоянии сетевых сокетов системы.
В предыдущем разделе journalctl
что-то уже было привязано к адресам IPv4 и IPv6 на порту 80
. Следующая команда определит имя процесса, который уже привязан к интерфейсу IPv4 на порту 80
. Убедитесь, что вы заменили порт из сообщение об ошибке, если оно отличается от 80
в следующей команде:
sudo ss -4 -tlnp | grep 80
Флаги команды ss
изменяют ее вывод по умолчанию следующим образом:
-4
ограничиваетss
отображением только информации о сокетах, связанных с IPv4.-t
ограничивает вывод только сокетамиtcp
.-l
отображает все прослушивающие сокеты с учетом ограничений-4
и-t
.-n
обеспечивает отображение номеров портов, в отличие от имен протоколов, таких как ‘httpили
https`. Это важно, поскольку Apache может пытаться подключиться к нестандартному порту, и имя службы может сбивать с толку, в отличие от фактического номера порта.-p
выводит информацию о процессе, который привязан к порту.
Со всеми этими флагами вы получите следующий вывод:
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=40,fd=6))
Первые три поля не важны при устранении ошибок AH00072, поэтому их можно игнорировать. Важными полями являются четвертое (0.0.0.0:80
), которое соответствует обнаруженной вами ранее ошибке journalctl
вместе с последними пользователями: users:(("nginx",pid=40,fd=6))
, в частности, pid=40
порций.
Если у вас есть ошибка AH00072, связанная с интерфейсом IPv6, повторите вызов ss
, на этот раз используя флаг -6
, чтобы ограничить интерфейсы сетевым стеком IPv6 следующим образом:
sudo ss -6 -tlnp |grep 80
LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=40,fd=7))
Опять же, замените соответствующий номер порта из выходных данных journalctl
, если он отличается от выделенного 80
, указанного здесь.
В обоих случаях ошибок IPv4 и IPv6 выходные данные ss
указывают, что существует программа с идентификатором процесса 40 (pid=40
в выходных данных), которая привязана к интерфейсам 0.0.0.0:80
и [::]:80
. соответственно. Этот процесс препятствует запуску Apache, поскольку он уже владеет портом. Чтобы определить имя программы, используйте утилиту ps
, подобную этой, подставляя идентификатор процесса из вашего вывода вместо выделенного значения 40
в этом примере:
sudo ps -p 40
Вы получите вывод, похожий на следующий:
PID TTY TIME CMD 40 ? 00:00:00 nginx
Выделенный nginx
в выводе — это имя процесса, который прослушивает интерфейсы. Теперь, когда у вас есть имя программы, которая препятствует запуску Apache, вы можете решить, как устранить ошибку. Вы можете остановить процесс nginx
, перенастроить nginx для прослушивания другого интерфейса и порта или перенастроить Apache, чтобы избежать конфликта портов.
Важно отметить, что процесс может отличаться от nginx
, а порт и IP-адреса не всегда могут быть 0.0.0.0
или [::]
, если вы диагностируете ошибку AH00072. Часто на одном сервере используются разные веб-серверы и прокси. Каждый может пытаться подключиться к разным портам IPv4 и интерфейсам IPv6 для обработки разного веб-трафика. Например, сервер, на котором настроен HAProxy, прослушивающий петлевой адрес IPv4 (также называемый localhost
) на порту 8080
, будет отображать вывод ss
следующим образом:
LISTEN 0 2000 127.0.0.1:8080 0.0.0.0:* users:(("haproxy",pid=545,fd=7))
Важно объединить вывод systemctl
или journalctl
, который указывает определенные IP-адреса и порты, с диагностическими данными из ss
, а затем ps
, чтобы сузить процесс, который вызывает сбой запуска Apache.
Вывод
В этом руководстве вы узнали, как устранить неполадки Apache AH00072 make_sock: could not bind to address
не удалось привязать к сообщению об ошибке адреса на интерфейсах IPv4 и IPv6. Вы узнали, как использовать systemctl
для проверки состояния сервера Apache и поиска сообщений об ошибках. Вы также узнали, как использовать journalctl
для проверки журналов systemd
на предмет конкретной информации об ошибке AH00072.
С соответствующими сообщениями об ошибках из журналов вы узнали об утилите ss
и о том, как ее использовать для проверки состояния сетевых сокетов системы. После этого вы узнали, как объединить информацию об идентификаторе процесса из ss
с утилитой ps
, чтобы найти имя процесса, из-за которого Apache не запускается.
Windows
Overview
This tutorial will teach you how to resolve the following Apache error during startup. An attempt was made to access a socket in a way forbidden by its access permissions. : AH00072: make_sock: could not bind to address [::]:80
80 is the standard default port that is used for HTTP communication by the Apache Server. In this scenario you want the Apache server to run on this port.
Error Trace
(OS 10013)An attempt was made to access a socket in a way forbidden by its access permissions. : AH00072: make_sock: could not bind to address [::]:80
Fix
The error is because of port conflict. The Apache is trying to start on port 80, however the port 80 is being used or blocked by another application or server. When two or more applications are trying to use the same port its called as port conflict.
Check the process that is using the port 80.
/> netstat -qo
In this case the IIS server is running on port 80. This could be the most possible case but not always true. The first intelligent guess is the standard servers that run on port 80!
Try to find the process with the process ID.
/> tasklist
tasklist is the command line tool to display the processes and the associated IDs. This command is equivalent to ps utility in Linux.
Alternatively, try accessing the webpage to know the application. We can omit the port number 80 as it is the default port
http://localhost:80
Decide which process should be running on port 80. Change the default port for the IIS server or stop the server.
Start and run the Apache server to resolve the port conflict error.
That’s it!
Related Links
More information on Apache HTTP web server:
https://apache.org/