среда, 17 ноября 2010 г.

Боремся с ошибками при настройке веб-сервера Apache [перевод]


Всем привет! Предлагаю к прочтению мой перевод заметки в буржуйском блоге, которая очень помогла с настройкой WAMP (сокр. Windows/Apache/MySQL/PHP) после переустановки винды. В конце поста добавил свои 5 копеек. Поехали! 
 

Ошибка "Faulting application httpd.exe, faulting module php5ts.dll"
 

Не так давно я настраивал типичную среду веб-разработки на машине с установленной Windows Vista, делая все как обычно . Единственным отличием на сей раз были более свежие версии компонентов: Apache HTTP 2.2.10, PHP 5.2.8 и MySQL 5.1. 

При попытке достучаться к базе, phpMyAdmin все время падал и в виндовых логах было следующее:
 

Faulting application httpd.exe, version 2.2.10.0, time stamp 0x48ef9351, faulting module php5ts.dll, version 5.2.8.8, time stamp 0x493d75fc, exception code 0xc0000005, fault offset 0x00009fe6, process id 0x18c, application start time 0x01c95d543b01222a.

Сначала я решил, что все дело в новых версиях софта, которые, вероятно конфликтуют между собой,  не хотят работать вместе. Но, полуглив по поводу библиотеки php5ts.dll, обнаружил, что подобные проблемы случались и у людей с более старыми версиями php и апача.


Читая пост на форуме, где высказывалось несколько предположений о данной проблеме, вспомнил, что ранее настраивал веб-сервер под Windows XP и не получалось соединиться с mySQL до тех пор, пока в переменной окружения Path не будет прописан путь к библиотеке PHP\libmysql.dll. Я частенько вижу в интернете советы скопировать эту библиотеку в %WINDIR%\system32,  Apache\bin, либо еще куда-то. Однако, поступать подобным образом  не следует. Если вы обновите PHP в дальнейшем и дистрибутив будет содержать в себе свежую версию libmysql.dll, то вам придется не забыть скопировать ее снова в системную папку, чтобы не столкнуться с какими-либо ошибками в работе веб-сервера. 
К своему стыду, признаюсь, что раньше и я тупо копировал библиотеку в system32, лишь бы побыстрее развязаться с настройкой сервера и приступить непосредственно к работе. Лучше всего будет добавить в переменную окружения Path путь к php  (у меня это C:\Program Files\PHP). Когда вы в следующий раз обновите php,  свежая dll-ка подхватится автоматически.

Чтобы убедиться, что наша проблема именно в настройках пути к библиотеке, я запустил утилиту ProcMon и поставил в ней фильтрацию по процессу httpd.exe и пути libmysql.dll. Как видно в статистике ProcMon, апач  ищет библиотеку в папке MySQL\bin, где может лежать новая ее версия, несовместимая с текущим расширением php_mysql.dll. Итого, в переменной Path я поместил путь к php перед MySQL\bin и перезапустил апач. Веб-сервер заработал на ура, проблема решилась!





Мои 5 копеек

Превосходная заметка! Действительно, и я раньше просто копировал бездумно libmysql.dll в System32, только бы быстрее настроить WAMP, не задумываясь о последствиях.

К сожалению, в моем случае проблема крылась совсем в другом... Вкратце, напортачил в конфигурационном файле php.ini при прошлой установке. На старой винде все работало лишь благодаря удачному стечению обстоятельств. Статья очень помогла, с помощью procmon смог быстро разобраться в неочевидной ситуации и все пофиксить! И вообще, отличная утилита из разряда must have!

Замечу также, что проблемы старта апача могут быть вызваны конфликтом со Skype. Он как и апач слушает 80й порт по дефолту. В таком случае, можно в конфигах апача прописать другой порт, скажем так - Listen 8080.

Комментариев нет:

Отправить комментарий