PHP в деталях

       

Траблшутинг


Допустим, оно у вас не заработало с первого раза... Что делать? Ну, прежде всего, конечно же, надо отправить во все конференции сообщение типа: "А-а-а-а-а!!! Хелп!!! У меня НИ-ЧЕ-ГО не работает!!!" И, разумеется, письмо автору данной статьи ;)) Самое главное&nbsp;&#151; сообщите как можно меньше информации о своей системе&nbsp;&#151; ну да, в конференциях ведь участвуют исключительно вундеркинды и телепаты, а Ваш покорный слуга&nbsp;&#151; так и вовсе Маг и Волшебник. Таким как он догадаться, на какой системе Вы работаете, и в чем может быть дело&nbsp;&#151; вообще пара пустяков! ;)) Да, кстати, в конференциях быстрее всего отвечают на постинги, набранные ЗАГЛАВНЫМИ БУКВАМИ. Ведь от долгой работы с компьютером портится зрение и Ваш постинг, набранный строчными буквами могут просто не заметить. ;)) <br />

<br />

А если серьезно, не надо паниковать. Давайте разберемся. <br />

<br />

<B>Симптомы:</B> Апача запустилась. Но скрипты не выполняются&nbsp;&#151; либо нагло лезут в окно браузера, либо хотят сохраниться на локальном диске. <br />

<br />

<B>Диагноз:</B> Скрипт не передается на выполнение парсеру PHP <br />

<br />

<B>Лечение:</B>

<br />

<br />

1. Проверьте работоспособность самого PHP. Для этого создайте в директории с <B>php.exe</B> файл, допустим, <B>test.php</B>: <br />

<br />



<font color="#800000">&lt;? echo "TEST" ?&gt;</FONT>

<br />

<br />

Запустите его командой <FONT COLOR="#800000">php.exe test.php</FONT>. Должны увидеть следующее:

Content-type: text/html

TEST

Заметьте: между первой и третьей строками есть пустая строка. Так надо, так должно быть. Именно так и никак иначе.

Если это не срабатывает? PHP страшно ругается и плюется, проверьте, есть ли у вас все необходимые файлы. А именно, файл php4ts.dll в директории с PHP либо в директории, содержащейся в переменной окружения PATH. Киньте ее в системную директорию windows и не мучайтесь. (Ну, я же предупреждал ? сначала проверьте работоспособность компонентов!)


Есть, но все равно проблема остается? Пожалуй, следует заглянуть поглубже... Впрочем, это выходит за рамки данной статьи. Скажу лишь, что файл php.ini, включенный в дистрибутив, требует настройки только в исключительных случаях. Поверьте, Ваш случай ? самый ординарный. ;)) Скорее всего, тогда дело в поврежденных выполняемых файлах дистрибутива.

2. PHP сам по себе все-таки работает... Проверим связку Апач + PHP...

Если у вас PHP сконфигурирован для работы в качестве модуля Апача (настоятельно рекомендую настроить его именно так! это дело всей моей жизни), проверьте загрузку модуля и назначение mime-типа application/x-httpd-php

Если PHP работает как внешняя программа, дополнительно к назначению mime-типа, проверьте назначение action, которое ставится в соответствие данному типу (см. Урок 1)

Симптомы: Апач вообще не запускается. Выскакивает черное окошко сеанса MS-DOS и тут же закрывается.

Предварительный диагноз: Неправильная конфигурация Апача. Что-то неправильно прописано в конфигурационных файлах. Либо отсутствует библиотека, необходимая для запуска модуля PHP ? php4apache.dll, либо само ядро php4ts.dll

Лечение:
Ставим более точный диагноз:

  • Откроем новое окно сеанса MS-DOS (также можно воспользоваться также старым добрым Norton Commander, DOS Navigator и т.п.)
  • Запустим апачу (внимание!) из командной строки: apache.exe
  • Теперь посмотрим, на что он там заругался...


Если самостоятельно не удастся разобраться, в чем же дело, это здорово поможет, если не Вам, то, возможно, специалисту, к которому Вы обратитесь (Эй! Я не сказал, чтобы все обращались ко мне!) Описания типа "я все нормально установил, но Он тут же вываливается" вряд ли кого удовлетворят. Все-таки, Апач, хоть и довольно невразумительно (а разве бывает в мире программ иначе?), но все же сообщает, почему он не может стартовать. Так вот: СМОТРИТЕ НА ЭКРАН ? там часто сообщается о причинах ошибок программ. Не всегда, но часто. И данный случай ? не исключение.

Итак, сначала попытайтесь вспомнить, ругался ли он так ДО установки PHP. Если нет, то:



В случае установки в виде CGI проверьте правильность написания директив настройки Апача и в тех ли секциях Вы сделали изменения. Других вариантов нет. Дело в этом и только в этом. Ибо PHP вызывается Апачем для выполнения скриптов и не играет никакой роли при запуске самого Апача. Поэтому дальше речь пойдет ТОЛЬКО о PHP как модуле Апача. На CGI больше не останавливаемся.

Если Вы устанавливаете PHP как модуль Апача, следует посмотреть, может, ему чего-то не хватает? ;)) Попробуйте, например, положить php4ts.dll в директорию с Апачем. Иногда это помогает. В общем, дайте простор фантазии. Только не рукам! Не надо бить компьютер за то, что вы такой неумеха ;)) А выглядит оно, бывает, устрашающе ? Апач рушится, вызывая ошибку в apachecore.dll. Но это все неправда. Вам для работы требуется пиво, программам ? библиотеки и файлы конфигурации. Не так ли? ;))

По моим наблюдениям, разные версии Апача ведут себя несколько по-разному при подключении PHP модуля. Пожалуйста, поправьте меня, если у Вас есть данные считать по-другому.

Так, Apache 1.3.12 ищет php4ts.dll сначала в своей директории (где лежит Apache.exe), затем в директориях, указанных в переменной окружения PATH. Вполне может быть, что в Вашем случае в системной директории Windows лежит php4ts.dll от другой версии PHP Как правило, от старой версии ;)) И php4apache.dll не может ее загрузить. А ТУ САМУЮ версию просто не находит. Честно сказать, я терпеть не могу, когда программы при инсталляции кидают в системную директорию свои библиотеки. Я скорее примирись с тем, что одна и та же библиотека будет у меня лежать в двух директориях. Речь идет о директории Апача и о директории с php.exe (иногда полезно) и библиотекой php4apache.dll. Вообще говоря, это все можно положить прямо в директорию Апача ? и далеко ходить не надо, и апдейт проще произвести ? нигде не забудете старую библиотеку.

Apache 1.3.14 ищет php4ts.dll сначала в той директории, где у Вас лежит php3apache.dll. В данном случае все файлы PHP можно сложить в одну директорию. Я так и сделал.

Еще бывают случаи, когда Вы пытаетесь прикрутить к PHP-модулю Апача дополнительные модули и библиотеки (например, пресловутую php_gd.dll) от других версий PHP. Не уверен, что это удастся. Во всяком случае, Апач (точнее, PHP в его составе) шибко ругается, что не совпадают внутренние версии API. Для начала лучше их все отключить. Понятно, где ? в php.ini. В любом случае, присматривайтесь к сообщениям, выдаваемым при запуске.

Да, и еще. Подключая дополнительные модули, обязательно пропишите переменную extension_dir в файле php.ini ? по умолчанию PHP ищет их в той же директории, в которой находится (./) а в дистрибутиве они лежат в директории extensions/ ? странно, да?..


Содержание раздела