Профессиональная разработка Web-приложений.  
Боишься нашего дизайна?
Новости
PDF журнал
Участники проектa
Сотрудничество
Ссылки
Карта сайта
Комментарии
Комментарии к статье
Добавить комментарий
Обсудить на форуме
Информация об авторе
Оценка статьи

Установка PHP + Apache: CGI vs. module

Почему лучше ставить PHP как модуль сервера Apache и как это сделать.

от многих забот и проблем избавитесь, установив пхп в виде модуля апачи (вау! прямо как в рекламном ролике получилось, надо же) - тогда и хэдеры будут высылаться, и переменная $PHP_SELF будет указывать именно на скрипт... (из постинга в форум на phpclub)

Данное руководство (?) ни в коей мере не претендует на полноту отражения затронутых вопросов. Оно не описывает нюансов настройки веб-сервера Апач. Только самое необходимое. И только связанное с работой PHP совместно с веб-сервером Апач. И, естественно, возможны различные неточности и ошибки. Просьба указать на них (контактная информация — в конце статьи).

Сразу предупреждаю — те, кто дорожат своим временем (либо те, кому побыстрее хочется заполучить работающий веб-сервер) могут пропустить мои излияния (включая вступление, теоретическую и добрую половину практической части) и сразу перейти к Уроку 2. Там описывается установка PHP как модуля Apache под Win32. А остальное… Ну, кто-то, наверное, прочитает. ;)) Надеюсь, таких будет немало.

Вступление

Итак, почему я написал эту статью? И зачем нам вообще такая экзотика как Апач и PHP под Win32?

Для отладки скриптов PHP на локальной машине мне понадобилось установить веб-сервер + PHP под Win32 (принципиально пользуюсь MS Windows — ибо, на мой взгляд, продуктивная работа, связанная с веб-дизайном, под Unix и его клонами попросту невозможна — при этих словах я увернулся от летящего в меня Тухлого Помидора — эти системы хороши как серверная основа, но не более того). Спорить со мной не надо, да я и не буду. Кроме того, вы же читаете эту статью, а, значит, планируете установить Апач + PHP именно под всеми ненавистной Виндой. ;))

Не помню уж, что это был за первый испытанный мной веб-сервер, но запуск парсера PHP мои скрипты осуществляли строчкой #!c:/php/php.exe что не есть очень удобно. Хотя… Авторы PHP (в официальной документации!) указывают на то, что с точки зрения безопасности такой способ — наилучший. При этом сам парсер "живет" далеко от самих файлов со скриптами. И скрипт передается ему на выполнение не веб-сервером, а интерпретатором командной строки. Но я не думаю, что этому способу установки вообще есть смысл обращать пристальное внимание. Мы же с Вами не параноики и не мазохисты.

Памятуя о том, что большинство провайдеров использует в качестве веб-сервера Апач, решил установить его виндовую версию на локальной машине. Да и не только в провайдерах дело. Пожалуй, это, если и не самый, то один из самых конфигурируемых серверов. Сказано — сделано. Осталось прикрутить PHP. В Сети нашлось много руководств, подписанных разными авторами, но их содержание было подозрительно схожим... Чуть ли не с точностью до знаков препинания. Видимо, бОльшая часть этих статей представляет собой оригиналы разной свежести и клоны статей Дмитрия Котерова http://www.dklab.ru/doc/apache и Александра Бугакова http://userguide.webservis.ru/homeserver-apache-forprint.shtml. Если кого-то пропустил, I beg your pardon.

Итак, в них описывается способ установки PHP как CGI-программы. Этот способ заполонил всю сеть и многие даже не подозревают, что можно сделать иначе. Но мы его назовем "альтернативным". Да-да, именно так! Более того — я скажу, что это вредный способ. Он ссорит между собой тех, кто работает под виндой, и линуксоидов. Ибо когда первые жалуются: "у меня PHP как-то не так работает", вторые с кривой ухмылкой заявляют "Виндовз — маст дай! Линукс — рулез форева! Ставьте линукс — и таких проблем не будет. Потому что под виндовз НЕВОЗМОЖНО установить PHP как модуль Апача. Хоть в лепешку расшибись." Нет, я не хочу дискутировать о достоинствах или недостатках той или иной операционной системы. Тем более, не в данной статье. Но я сам чуть было не обратился в эту веру.

Теперь впечатления. Запускаем скрипт, который пытается послать заголовки (header) — неа, не работает :(( Заглядываем в мануал: в чем дело? Ах, какая досада... Оказывается, PHP должен работать как модуль Апача. Жалко... Ведь под винду нам модуль не установить... Так, а как насчет авторизации по коду 403? Тоже не работает... Придется и от этого отказаться...

Придется ли? Скорее всего, нет! Конечно, универсального решения я выдать не смогу, но постараюсь объединить в данной статье все (ну, или почти все) что известно мне о работе Апача + PHP под Win32. Возможно, статья будет исправлена и дополнена. Пишите письма.

Теоретическая часть.

Итак, как Вы поняли (из моего повествования, документации на PHP либо из других источников) возможны ДВА способа установки PHP на веб-сервере. Как CGI-программу и как модуль сервера. В принципе, подчеркну, в принципе, особой разницы нет. В любом случае, веб-сервер передает ядру PHP скрипт, путь к которому содержится в запросе клиентского браузера. В случае работы PHP как CGI порождается новый процесс, которому, собственно, и передается скрипт. В случае работы модуля, его код уже "висит" в памяти сервера. Это — основное принципиальное отличие. Что из этого следует — додумайте сами.

Итак, как устанавливать PHP для работы совместно с веб-сервером Апач? Как CGI или как модуль Апача? Практически, особой разницы нет, но... Как упомянуто выше, вы ДОЛЖНЫ установить PHP как модуль для реализации функций работы с заголовками и авторизацией. Впрочем, это явления одного порядка. Кроме того, в случае PHP как CGI-программы, переменная $PHP_SELF (которая должна хранить имя выполняемого скрипта) содержит все что угодно, но только не имя. Это не самое страшное, что бывает, но вдруг придется использовать чей-то чужой скрипт, в котором она широко используется... Бывает, что при повторном вызове скрипта по имени, которое содержит переменная $PHP_SELF, скрипт просто прекращает свою работу. Битая ссылка. Как это ни печально. Можно, наверное, назвать еще несколько отличий, но, как мне кажется, и этой разницы вполне достаточно, чтобы сделать выбор в пользу PHP-модуля.

Да, и еще. Установив PHP как модуль, вы получите возможность управлять некоторыми его параметрами из файлов .htaccess Для экспериментального сервера это, пожалуй, не настолько уж важно — все-таки, Вы являетесь и администратором. Но дистрибутивы некоторых программ PHP поставляются с файлами .htaccess, которые изменяют параметры PHP, и отказываются работать, если им это не удается. Можно поправить php.ini, но всякий раз для каждого скрипта его править... Нет, это выше человеческих сил!

Итак, короткая теоретическая часть и долгое вступление, вернее, лирическое отступление ;)) закончились. Приступим к практике.

Практическая часть.

Прежде всего, настоятельно рекомендую проверить работу веб-сервера Apache ДО каких-либо измывательств над бедным животным ;)) Поверьте, это сохранит Вам и многим другим кучу времени, нервов и физических сил. Не торопитесь устанавливать PHP, не проверив работоспособность Апача. Даже если Вам ОЧЕНЬ хочется. Всему свое время. Вам проще будет локализовать причину, если не будете торопиться.

Урок 1. Установка PHP а-ля CGI

Данный вопрос неплохо освещен в Сети. Но — справедливости ради упомянем его, ограничившись, правда, лишь ключевыми моментами.

Альтернативный способ. Прежде всего, рекомендуется все, что связано с локальной копией веб-сервера, сложить в одну директорию, а директорию, в свою очередь, подключить как виртуальный диск командой subst f: путь-к-директории, чтобы все было "как в юниксе". Действительно, мудрое решение. Особенно удобно не лазать по деревьям директорий (мы же не обезьяны, в конце-то концов) — все, что относится к веб-серверу, под рукой. Но не все, далеко не все имеют возможность выделить для экспериментов целый логический диск. Поэтому данный совет весьма полезен.

На установке самого веб-сервера я задерживаться, пожалуй, не буду. Ничего сложного нет, все конфигурационные файлы неплохо самодокументированы. Да и руководств по установке и настройке его в Сети — МОРЕ.

Итак, Апач уже установлен в директорию типа f:/usr/local/apache (где f — буква, соответствующая виртуальному диску) и полностью работоспособен. Соответственно, PHP хорошо бы установить рядышком — скажем, в f:/usr/local/php

Распаковываем архив дистрибутива PHP. Нам прямо-таки жизненно необходимо не так уж и много файлов. Это:

  • php.exe — интерпретатор командной строки
  • php4ts.dll — собственно ядро PHP
  • php.ini-dist — конфигурационный файл, версия из дистрибутива

    Представьте себе, это — ВСЁ! Кто-то спросит: а почему же оригинальный дистрибутив занимает аж по 3-5 мегабайт в архиве (в зависимости от версии и комплектации). А потому что в нем содержатся различные библиотеки расширений для генерации картинок "на лету", для работы с базами данных Postgre SQL, SyBase SQL и т.п. Заметьте: поддержка MySQL в PHP версии 4 встроена прямо в ядро и не требует никаких дополнительных файлов. Все эти расширения вы можете поставить в любой момент.

    Установили, скопировали php.ini-dist из дистрибутива в директорию windows и переименовали его в php.ini. Попробовали, работает ли PHP сам по себе? Создайте в директории с PHP текстовый файл с именем, например, test.php: <? echo "TEST" ?>

    И запускаете его из командной строки: php.exe test.php

    Получаете такое вот:
    Content-type: text/html TEST

    Это означает, что PHP сам по себе работает.

    Если у Вас не работает либо Apache, либо PHP, то рано нам заниматься конфигурированием связки Апач + PHP. Пусть оно сначала по отдельности все заработает. Обратитесь к разделу "Траблшутинг".

    Итак, предыдущий шаг показал нам, что все О.К.

    Последующие настройки касаются только файла конфигурации Апача httpd.conf. Добавим mime-тип, соответствующий расширению программ PHP: AddType application/x-httpd-php .php .php3 .phtml

    Причем это следует сделать в секции описания модуля mod_mime — это стандартный модуль апача. Либо добавить в конфигурационный файл mime.types — но, мне кажется, лучше вносить изменения только в один файл, а не в десять сразу.

    Затем поставим действие (action) в соответствие указанному нами типу:

    <Directory "f:/usr/local/php">
      Options ExecCGI
    </Directory>
    ScriptAlias "/__php_dir__/" "f:/usr/local/php/"
    Action application/x-httpd-php "/__php_dir__/php.exe"

    Это рекомендуется сделать непосредственно перед секцией Virtual Hosts.

    Ну и все на этом... Скопировали созданный нами тестовый файл в корневой каталог веб-сервера и набрали его URL в строке веб-браузера. Должно работать. Если нет — обратитесь к секции "Траблшутинг" ниже. Может, поможет. Также посмотрите настройки Апача — особенно секцию Virtual Hosts, если вы пытались обратиться к своему серверу по имени (ну, типа http://vasjapupkin.com/test.php).

    Урок 2. Установка PHP как модуля Апачи

    Необходимые материалы (тот минимум, с которым все работает):

    • php4ts.dll (собственно, ядро PHP)
    • php4apache.dll (модуль для Апача)
    • php.ini (ну, понятно, что это и для чего)
    • php.exe (превосходно работает и без него, но пригодилось бы для проверки работоспособности ядра PHP)

    Ход работы.

    • Копируем php.ini в директорию windows (у кого где она расположена, но у большинства — c:\windows)
    • Создаем директорию, в которую положим php4ts.dll и php4apache.dll В соответствии с вышеприведенными соглашениями — f:/usr/local/php
    • Находим секцию httpd.conf "Dynamic Shared Object (DSO) Support" — ее очень просто найти, в ней куча (обычно закомментированных строк) вида LoadModule ... Добавляем свою строчку:

    LoadModule php4_module "путь-к-директории-php/php4apache.dll"

    Если Вы следовали приведенным выше рекомендациям назначения имен директорий, то она должна выглядеть как:

    LoadModule php4_module "f:/usr/local/php/php4apache.dll"

    • Добавляем mime-тип AddType application/x-httpd-php .phtml .php .php3 .php4
    • Если Вы ранее воспользовались альтернативным способом (подключение PHP как CGI), то, пожалуй, самое время убрать строчки, связанные с сопоставлением action для указанного типа — просто забьем комментариями:
    #<Directory "f:/usr/local/php">
    #  Options ExecCGI
    #</Directory>
    #ScriptAlias "/__php_dir__/" "f:/usr/local/php/"
    #Action application/x-httpd-php "/__php_dir__/php.exe"
    • Ну и все — попробуем запустить апачу. При нормальной работе увидите примерно такую строчку: Apache/1.3.12 (Win32) PHP/4.0.4pl1 running... Сбегайте в ближайший ларек и купите себе пива.

    Траблшутинг

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

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

    Симптомы: Апача запустилась. Но скрипты не выполняются — либо нагло лезут в окно браузера, либо хотят сохраниться на локальном диске.

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

    Лечение:

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

    <? echo "TEST" ?>

    Запустите его командой php.exe test.php. Должны увидеть следующее:
    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/ — странно, да?..

    Об авторе

    Не люблю особо о себе распространяться — когда люди не знают подробностей о человеке, они вынуждены его уважать ;)) Но на работе комплекса Apache+PHP+Win32 собаку съел, поверьте! ;)) Впрочем, повторюсь, я не претендую этой статьей на универсальность. Просто прочитав несколько противоречивых руководств, и заглянув в несколько конференций, где обсуждается одно и то же ("это вам не линукс, под виндой ничего и не заработает!") многие будут неправильно информированы. Даже если они пытаются сделать так, как кто-то описывает и у них ничего не получается, себя они винят в последнюю очередь. Виноват если не Билл Гейтс и не инопланетяне, то, как минимум, ее величество Судьба, ниспославшая именно одному человеку такой запутанный Случай. Да, бывают Случаи, но они лечатся, как правило, переустановкой системы (это — худший вариант и не надо считать это руководством к действию). Все остальные случаи — совершенно обычны.

    Увидев в очередной раз в конференции сообщение типа "PHP + Апач + Win32 = ???" я сел, и написал эту статью. На одном дыхании. Надеюсь, когда еще у кого-то возникнут подобные вопросы, его сразу адресуют к моей статье: "иди, почитай, там все сказано". Впрочем, создание всеобъемлющего руководства по установке и конфигурированию PHP под Win32 невозможно без Ваших откликов: lkx2@mail.ru.

    Перепечатка и использование данной статьи для написания различного рода руководств допускаются только с согласия автора и только с обязательной ссылкой на оригинальную статью. Уважайте чужую интеллектуальную собственность!




  • For comment register here
       Unknown 2001-04-20 08:12
    Спасибо! Обязательно попробую. Тем более сейчас мне необходимо иметь и PHP3 (для *.php3) и PHP4 (для *.php) одновременно. Кое-что связанное с установкой стало яснее.

       Unknown 2001-04-20 10:52
    Заработало! Действительно для установки достаточно всего 3 файлов.

    Единственное что пришлось изменить - это строку LoadModule php4_module "f:/usr/local/php/php4apache.dll" на вариант с другими слешами LoadModule php4_module "f:usrlocalphpphp4apache.dll" в файле httpd.conf . Возможно это только в моей версии Apache: Apache/1.3.6 (Win32)?

    Теперь у меня работает (он и раньше работал) PHP3 (а-ля CGI) и PHP4 (как модуль). PHP3 обрабатывает *.php3, а PHP4 работает с *.php - совсем как на моем настоящем сайте.

       Unknown 2001-04-20 10:54
    Обратные слеши к сожалению не отобразились.

       2001-04-20 14:15
    А я сразу на этот способ наткнулся :) Я даже не знал. что это будет, как модуль апача.
    Так что мне, в этом смысле, повезло.

       2001-04-21 13:14
    Ё-МОЁ!!!!!

    запарился искать модуль php4apache.dll
    все остальное есть... дайте плз ссылку де найти..или киньте на почту

       Unknown 2001-04-21 18:25
    Спасибо, Pavel M.

    отбой!! файло прислали... :)

       Unknown 2001-04-22 22:17
    Раз пошла такая пьянка - вот пример. Тестировалось на Apache 1.3.19 / mod_php 4.0.4pl1 / w2k
    $fn="test.txt";
    $fp=fopen($fn,"w");
    for ($i=0;$i<256;$i++) fwrite($fp,chr($i));
    fclose($fp);
    $fp=fopen($fn,"r");
    $s=fread($fp,256);
    fclose($fp);
    echo filesize($fn)." ".strlen($s);

    Выдает он совсем не то, что ожидалось (256 256). Как показал эксперимент, символ EOF (код #1A) здесь работает именно как EOF. Это касается всех функций, которые работают с файлами - fgets, fread, file, readfile и т.д. А вот в качестве CGI все работает. Только из-за этого пришлось отказаться от вкусностей mod_php (самое вкусное для меня - возможность авторизации средствами PHP).
    Господа, попробуйте у себя его проверить (и на w2k, и на w98 - ну нет у меня 98х ;).

       Unknown 2001-04-23 07:57
    На 98 твой пример дает то же самое что и у тебя.
    Попробовал использовать бинарный режим (при открытии букву b) и все заработало.
    Вместо $fp=fopen($fn,"w"); пиши $fp=fopen($fn,"wb");
    Вместо $fp=fopen($fn,"r"); пиши $fp=fopen($fn,"rb");
    Проверь на своей системе.

       2001-04-23 09:26
    Как модуль встал нормально, только у меня возникла одна проблемма: не отправляется почта через SMTP, не смотря на то что в php.ini SMTP сервер прописал правильно ... Как CGI проблем нет ...
    Остальные фичи я не пробовал на работоспособность поэтому в полне возможно, что и что-нибудь еще не работает ... Что может быть не так ?

       Unknown 2001-04-23 23:45
    Да, слона-то я и не заметил ;) В документации мелким почерком написано...
    Вчера на linux попробовал - все работает правильно ;) Ну не могли они что ли по умолчанию бинарный режим сделать... :-(

       2001-04-26 00:37
    Интересно у меня получилось. Работаю пд НТ. Стоял Апач 1.3.6 и ПХП3. Прочитал статью и решил поставить ПХП4 как модуль. Скачал дистрибутив, распаковал, записал в дерикторию... Удалил из конфигурации апача все старое, касаемое 3-й версии. Запускаю Апач как консоль: все работает, но в еррор.лог пишет {[Thu Apr 26 01:19:47 2001] file .mainhttp_main.c, line 5890, assertion "start_mutex" failed}. Пробую запустить как службу, выдает ошибку, что не может запиститься, в строке описания службы не значится, что запущен, НО! работает и апач и пхп. Но не нравится, что ругается (причем ругается программка Dr. Watson - видите ли Апач выпустил недопустимую ошибку...), пишет о ней в журнале событий, но при этом работает! Решил проверить вывод "ТЕСТ" из под самого пхп (в обход апача, т.е. из командной строки) - ничего не выдает! Ничего не пойму. Поможите, коли знаете...

       2001-04-27 11:46
    После установки Apache 1.3.6 и PHP 4.0.4 под вин2к апач стал запускаться только как console application. При запуске как сервис выдается ошибка, что то типа апач пишет в недопустимую область памяти

       2001-04-28 07:29
    Кто бы еще между делом просвятил по стыковке Apache+PHP (win) к Mysql (Linux)... не хочет соединяться собака - нем могу, говорит инициализировать чарсет. mysql на linux собран с поддержкой 1251. так чего же он хочет?

       Unknown 2001-04-28 08:22
    Я пытался на виндовом MySQL настроить чарсет, потратил на это день, и... плюнул нафиг.

       2001-05-10 12:35
    У меня апач 1.3.6. Ставил PHP 4.0.2 как модуль по инструкции. Заработал только просле того как скопировал php4ts.dll в Выньдос/систем

       2001-05-11 13:12
    Не могу найтить php4apache.dll. Киньте плз мылом или дайте ссылку.

       2001-05-14 17:55
    ЧЕРТ!"!!

    ну нехочет как модуль работать.. все сделал... версия 4.0.5
    под винды.. Апач выдает ошибку
    Can't load module ..лялляля./php4apache.dll A device attached to the system isn't functioning

    что делатЬ? :)
    :(((

       Unknown 2001-05-14 20:49
    Ура!!

    все заработало..
    PHP 4.0.5 - уважение!!: )

       2001-06-02 15:51
    По вопросу виндоус vs. юникс - как под виндой делать include и require ?
    не хотять они работать, да и разработчики в мануале пишут, что работать не должно.
    при написании проекта чуть побольше домашней странички Васи Пупкина под виндой уже становится неудобно работать именно из-за этого.

       Unknown 2001-06-02 16:44
    Почему под виндой нельзя делать include? Делается точно так же как и в Юниксе или Линуксе:
    include("path/file.inc");

       2001-06-05 13:18
    Хмм, это все конечно интересно, но возникает вопрос... , а когда человек качает инсталюшку пхп он что не читает файл инстал.тхт? Там все черным по белому написано

    Installtion instructions
    ------------------------

    Apache:
    1. Stop the Apache Webserver.
    Edit the httpd.conf and put in these lines, modified to your environment:

    # for the apache module
    LoadModule php4_module c:/php/sapi/php4apache.dll
    AddType application/x-httpd-php .php4

    #for the cgi binary (you can use that one compiled with force cgi redirect too)
    ScriptAlias /php4/ "C:/php/"
    Action application/x-httpd-php4 "/php4/php.exe"
    AddType application/x-httpd-php4 .php

    2. Unzip the Package to c:php, now move php4ts.dll to the windows/system(32) directory, overwritte any older file!

    3. Copy the php.ini-dist to your sysroot (directory where you installed windows), rename it to php.ini, and
    edit the php.ini to fit your needs.

    4. Restart the Apache server.
    -------------------------------
    Я ни к кому не придераюсь, но просто иногда удивляет особенность русского человека не читать инструкции.

    зы Вопрос не в тему немного. Может подскажет кто-нибудь, что случилось с проектом Русский Апач? А то как то упустил его исчезновение из виду :(

       Unknown 2001-06-05 14:11
    Про русский апач не знаю, а насчёт установки - это и то, что ты отметил (не смотрят люди в readme, хотя бы потому что не все знают английский), и ещё привычка искать в сети помощи. Ведь выложила студия DK описание, как поставить PHP как CGI, и у всех проблемы :)

       2001-06-08 11:16
    Выражая огромную благодарность автору данной статьи, хочу сказать, что все работает отлично! Именно как написано, так и работает. Причем с первого раза, без всяких проблем! Побольше бы было таких действительно полезных статей! Может быть и диких вопросов в форумах было на порядок меньше...
    А то большинство проходят через это собственным потом и кровью, но поделиться с другими, дабы те избежали лишнего геморроя - ни за что! :(

    Еещ раз огромное спасибо за статью! :)

    С уважением, MelDi

       Unknown 2001-06-08 14:08
    Пора бы обновить апач. Тем более виндовый - не перекомпилировать же сервер. Потому что текущая версия Апача уже 1.3.19 или больше.

       2001-06-09 11:18
    Трабл появился. ПХП упорно не видет экстеншинов!!! Как я уже не пытался путь описать -- никак. Народ, киньте кто-нить пример прописи строки установки пути к модулям расширений в php.ini (В качестве постскриптума: Апач 1.3.19, php 4.0.5, Windows 2000 Professional).

       2001-06-10 10:00
    Ураааа PHP4 работает!!!!

       2001-06-12 14:53
    Ребята, будьте просто внимательнее!
    Win MySQL настраивается на нужный charset следующей строкой в my.ini :
    default-character-set=win1251ukr

    Кто-то там писал, что php4apache.dll не может найти (без комент.) - это в дистрибутиве лежит последних версий ПХП

    include() и require(); - работают как положено. Но если файл в другой дир., указывайте "../dir/xxx.php", например.

    А вот кто подскажет (на eMail, пожалуйста), почему новый 1.3.20 Апач начал в
    error.log выдавать

    File 'c:mysqlsharecharsets?.conf' not found (Errcode: 22)
    Character set '#23' is not a compiled character set and is not specified in the 'c:mysqlsharecharsetsIndex' file

    (дир. charsets - есть, #23 - есть, и вообще, какая Апачу разница, в какой кодировке MySQL и откуда он это вообще берет. В 1.3.20 такого не было)

       2001-06-12 15:08
    Тьфу, перепутал.
    Хотел сказать, что в 1.3.14 (1.3.12) такого не было.

    А у кого там с SMTP проблема? Поставьте ПХП новее. В какой-то 4-й версии отправка почты не работала. Это официальная информация от разработчиков.

       2001-06-14 15:43
    Масса благодарностей! Копался по инету и никак не мог РНР привернуть к апачу, мож кнешно не очень разбираюсь, но по изложенным рекомендация все получилось!!! Ещё раз спасибо!

       2001-06-15 11:07
    Ну вот. Установил все КАК НАПИСАНО. После этого Апач перестал запускаться...
    Причина банальная - разные слэши в виндовых и юниксовых путях.
    В статье НАПИСАНО:
    LoadModule php4_module "f:/usr/local/php/php4apache.dll"

    А оказалось (у меня под Win'98 SE)
    LoadModule php4_module "D:Program Filesphp4php4apache.dll"

    Может кому-нибудь поможет... А-то напугаете: Апач де не той версии, ищет не там...
    P.S.
    Остальные пути в httpd.conf (которые проставил сам Апач) прописаны с юниксовыми слэшами, но все прекрасно работает :)

       2001-06-18 14:25
    Да, несомненно, PHP как модуль Apache несомненно радует :) Но вот некоторые проблемы все таки есть :( В том числе встретился с такой:

    Конфигурация: WinNT+PHP(как модуль)

    Скриптик:
    header ("Content-type: image/jpeg");
    $path="image.jpg";
    $im=fopen("$path", "r");
    fpassthru($im);

    Ожидаемый результат: Должна выводиться картинка image.jpg
    Проблема: Не работает!!!

    Конфигурация: WinNT+PHP(как CGI)

    Скриптик:
    Тот же самый

    Ожидаемый результат: Должна выводиться картинка image.jpg
    Проблема: Нет проблем, работает! картинку выводит!

    Вчем проблема, почему не работает когда PHP подключен как модуль :((

    Заранее благодарен!!!

       2001-06-23 21:33
    2CyberCop: По поводу extensions и Win2k. Проблема в том, что когда PHP переставили, как модуль, то в php.ini нужно прописывать абсолютные пути, то есть если раньше extension_dir был, допустим, "ext", то теперь он должен быть "z:/usr/local/php/ext".

       2001-07-03 17:51
    Уважаемый автор статьи ... Я все зделал как написано, ПХП работает и ошибок вроде не выдает, но такой вот скрипт не работает вообще
    <?php
    function foo ($in) {
    if ($in !="")
    else return $out;}?>
    <?php include (foo($QUERY_STRING)); ?>
    А у моего хостинг провайдера работает ... Вы не подскажите в чем может быть дело?

    С Уважением
    Partizan

       2001-07-05 22:26
    -- 0 -- Сенькс ---
    Апач "а-ля CGI", я установил себе примерно 2 года назад. Про модуль ходили только слухи, как его поставить многие не знали. Вернее?!, не было этого файла php4apache.dll. Вот теперь поставил модуль, а заодно и тебе несколько сообщений написАл.

    -- 1 -- Замеченные опечатки ---
    Найди эту строку: "Apache 1.3.14 ищет php4ts.dll сначала в той директории, где у Вас лежит php3apache.dll".
    Возьми вот это: "php3apache.dll"
    Заменени на это: "php4apache.dll"

    -- 2 -- Замеченные опечатки ---
    Найди эту строку: "Я скорее примирись с тем, что одна и та же библиотека будет у меня лежать ".
    Возьми вот это: "примирись"
    Заменени на это: "примирюсь"

    -- 3 -- Уточнение ---
    Найди эту строку: "Способ Неизвестного Автора. Прежде всего, рекомендуется все".
    Прочти, подумай: "Автор известен. "

    -- 4 -- Уточнение ---
    Найди эту строку: "Запустите его командой php.exe test.php. Должны увидеть следующее:
    Content-type: text/html

    TEST".

    Прочти и добавь: "В Windows 2000 Professional, строка "php.exe php.test", выдала следующие
    X-Powered-By: PHP/4.0.6
    Content-type: text/html

    TEST".
    В чем суть: "Четыре строчки, это не три ;-)".

    -- 5 -- Грабли ---
    Еще замучился с одной фигней, вроде пашет модуль PHP, но файлы .phtml предлагает сохранить на диск.
    Прочел "Траблшутинг", диагноз понятен, Но!!!
    Файлы *.php *.php3 работали нормально, а именно это расширение (*.phtml) - нет.
    Короче, я и так и этак. Понимаю что происходит, но где оно?
    После бутылки пива, нашел-таки что собака порылась в файле httpd.conf:
    AddType application/x-httpd-php4 .phtml
    Эту строчку закомментировал, и усе в норме. (Почему она была активной, - х.з.)

    -- 6 -- Грабли ---
    Теперь, если в win2000 вызвать Апач как локальную службу, win2000 противно ругается, что apache.exe вызвал
    ошибку и будет закрыт. (Это после трансплонтации модуля PHP/4.0.6, а сам APACHE/1.3.6)
    Лечение: Вывел ярлык на рабочий стол для файла apache.exe (и еще один для его завершения).

    -- Вроде все --
    На вечно в Ваших сердцах, Good_Maks

       2001-07-18 05:31
    Истинно, исинно говорю - я выдохнул. Наконец-то "прикрутил" как надо. Надо было - просто смерть.
    Спасибо Дмитрию Короленко.
    Работает 100% (правда у меня WinNT Server 4.0).

    С уважением, сэр Макс Безумный.

       2001-08-05 22:34
    Хм.. настроил как модули, но проблемка одна - IE предлагает скачать скрипт, вместо того, чтобы запустить его...Хотя AddType сделан.... на почту ответ, если можно..

       Unknown 2001-09-14 13:20
    Интересная ситуация. При подключении внешних библиотек (php_gd.dll) php, установленный "как модуль", считает своим корнем дирректорию с apache. Хотя, путь к PHP в httpd.conf указан. Т.е., при определении переменой extension_dir=./extensions/ библиотека php_gd.dll ищется в несуществующей дирректории .../apache/extension/ . Сам не сразу разобрался, может быть, кому-то поможет сэкономить время. Так должно быть или это глюк? Спасибо за внимание.

       2001-10-17 20:00
    У меня при установке PHP4 (которую я делал строго по инструкции) выскакивала ошибка No such file or directory. После некоторых поисков нашёл в одном англоязычном источнике, что один из обязательных шагов поменять session.save в вашем php.ini, чтобы он указывал на реально существующую директорию временных файлов (например, c:/windows/temp или c:/windows/tmp). После этой операции заработал как миленький - в обоих вариантах (CGI-executable и как модуль Апаша).

       2001-11-21 17:12
    Не подскажите что за фигня? При запуске cgi скрипта выдаёт ошибку "Internal Server Error" ?

       2001-12-07 18:16
    Примерно с полгода или больше назад я ставил пхп как модуль и все было без проблем.
    сегодня повоторил все шаги - нифига не вышло(скачал последние версии PHP & Apache 1.3)
    модуль вроде подключаеться но не фига не делает...после 30 минут проклятий и шаманства оказалось что надо добавить в http.conf

    AddModule mod_php4.c
    от такая фигня:(

       2001-12-07 20:18
    Я уже давно установил себе Apache вместе с PHP b MySQL если, кто хочет совета могу дать.
    Мой Апачевский сайт: http://takonet.co.il
    Удачи Всем!

       2001-12-08 14:10
    иногда помогает
    (когда прикручиваеш модуль) дополнительная строчка:
    AddModule mod_php4.c
    у меня без этого не работала(хотя раньше все получалось)

       Unknown 2001-12-18 13:12
    Упоминаемая статья была написана еще ооочень давно, когда ПХП4 и возможности установить ее как модуль не было и в помине. AddModule mod_php4.c - это явно Апач 1.3.22, который по дефолту использует директиву ClearModules.

       Unknown 2002-01-02 18:05
    В первый раз запуска появилось "Apache/1.3.12 (Win32) PHP/4.0.1pl1 running... ". Только до этого небыло найде но несколько dll библиотек, в следствии чего програ вырубилась. А после вообще неработает пишет что-то про фаил httpd.pid. Помагите люди!
    У меня Apache 1.3.20.

       2002-01-09 10:16
    Все заработало!
    Apache 1.3.22 + PHP 4.1.1 as module
    Необходимо прописать в httpd.conf следующее:
    в секцию...
    # Dynamic Shared Object (DSO) Support
    LoadModule php4_module "d:/web/php/sapi/php4apache.dll"
    AddModule mod_php4.c
    в секцию...
    <IfModule mod_mime.c>
    AddType application/x-httpd-php .php .phtml .php4
    </IfModule>

       Unknown 2002-05-01 10:58
    А возможно ли установить ПХП таким образом если Апач второй версии?

       2002-05-15 11:04
    1)у меня токой глюк возник:пхпшные скрипты работают тока в корневом каталоге сайта,как с этим бороться?
    2)Как заставить пхпшные скрипты отсылать почту?

       Unknown 2002-05-15 11:57
    1) очень интересный глюк. :)
    2) нужен sendmail под windows.

       2002-12-23 12:38
    У меня заработало только вот так:
    # for the apache module
    LoadModule php4_module c:/php/sapi/php4apache.dll
    AddModule mod_php4.c ### без этой строки не пашет ###
    AddType application/x-httpd-php .php4

       2003-04-25 11:15
    Скока раз собирал / пересобирал под Винды Apache, include, require и include_once всегда прекрасно работали.
    Тяните http://www.firepages.com.au/ - пакет phpdev4, свежую версию, и не парьтесь с этими инсталляциями... там просто разархивировать архив, садись и пиши себе.

       2004-01-02 03:35
    Если вы перепробовали всё и так и сяк, добавили AddModule mod_php4.c / AddType application/x-httpd-php .php
    а браузер всё одно пытается сохранить код скрипта в файл - замените:

    Addtype application/x-httpd-php .php

    на

    AddHandler application/x-httpd-php .php

       2004-05-25 07:51
    Спасибо за статью, все заработало. Только IE 6.0 обрабатывает расширения .php, .php4... непосредственно в папке Apache Group\Apache\htdocs\. Ежели поместить php файла в любой другой каталог, браузер выводит просто скипты.
    Причем в адресной строке браузера указавается http://localhost/*.php, любое изменение в расположение файлов .php вне Apache Group\Apache\htdocs\*.php вызывает ошибку.

       2004-06-29 16:39
    Установить PHP4(5) с Apache2 можно, НО там нужен файл php4apache2.dll(php5apache2.dll) вместо php4apache.dll(php5apache.dll).
    В конфиге Apache2 должно быть примерно следующее:
    LoadModule php5_module "f:/php5/php5apache2.dll"
    AddType application/x-httpd-php .php
    Если нужны ещё форматы, то можете добавить их в строчку AddType. Например, она у меня выглядит так:
    AddType application/x-httpd-php .php .jpg

    Почему PHP-скрипты не запускаются, а пытаются сохраниться на диске?
    Просто в скрипте в начале должно быть примерно следующее:
    header("Content-Type: text/html");
    или то же самое, но через meta:
    <meta http-equiv="Content-Type" content="text/html">

    P.S.: PHP5RC3 и Apache2 спокойной уживаются под WinXP Pro. PHP4 и PHP5 с Apache и Apache2 спокойной работают. Если есть вопросы, то пишите на мыло.

       2004-09-09 14:58
    Спасибо mani13undefined
    С php4apache.dll ну никак не хотел как модуль работать со вторым апачем
    А вот php4apache2.dll сразу заработал
    Хотя размер у файлов одинаковый))

       2004-11-01 23:06
    Спасибо.Грамотно и понятно Теперь PHP 4.3.9. работает как модуль,(windowsXPrusSP2)
    А то мучился...:)

       2004-12-20 15:50
    всё правильно написал... только опоздал на 3 года :) обозначенная проблема - это три строки в install.txt из стандартной так сказать поставки PHP. Вот токмо отчего-то модуль PHP перестал работать после установки SP2 для ХР... Оно конечно срубает переменную Path... Однако я поправил... Однако всё равно как-то всё не так... Как-то всё некомфортно и скрипит ещё...

       2005-03-01 18:14
    Вышлите или дайте ссылку на php4apache.dll, не могу найти не в одном дистрибутиве, и в инете

       2005-05-27 20:45
    Небольшое дополнение: чтобы установить PHP под apache под win с поддержкой SSL необходим модуль php4apache.dll, откомпилированный с опцией /DEAPI. А его нигде в сети нет.
    Замечу, dll от предыдущих php не годится.

    Есть отличная статья http://netadmin.ws/art/42.html - как
    сделать под win apache+SSL+PHP+..., но в статье ряд
    неточностей, в том числе забыто о -DEAPI в php4apache.dll.
    В итоге все почти так, но работать не будет.

    Есть отличный сервер http://hunter.campbus.com/ со сборкой
    под win apache + Mod_SSL + Openssl.
    Все свежее плюс архивы старого.
    НО PHP с настройкой под все это великолепие там, увы, нет.

    Делаем так:
    Получаем свежие исходники PHP и разворачиваем их в подкаталог PHP.
    Не обязательно win - можно например и php-4.3.11.tar.gz.
    Рядом разворачиваем исходники под win apache в php_build\Apache,
    и исходники bindlib_w32 и win32build.
    Получается нечто вроде:
    \work
    \php
    \php_build
    \apache
    \include
    \lib
    \libexec
    \modules
    \src
    \include
    \bindlib_w32
    \win32build
    Затем берем файл проекта, например
    php\sapi\apache\php4apache.dsp или
    php\sapi\apache\php4apache.vcproj
    и стартуем под visual studio.
    Проверяем настройки include у компилятора,
    lib у линкера и правильно их настраиваем ( если надо ).
    В исходном будут не все lib и include правильно настроены.
    Во время компиляции и линка видно, что не достроено - надо
    добавить и настроить.
    Релайз должен быть Release_TS естественно, т.к. Debug_TS не соберется
    из за отсутствия соответствующих lib файлов с опцией debug.
    Да, в каталог php\lib подкладываем свежие lib из инсталяции PHP.
    Замечу, что исходники Apache ( например 1.3.33 ) иногда левые, т.е.
    не содержат всего, что с EAPI, а это:
    httpd.h
    ap_alloc.h
    buff.h
    http_conf_globals.h
    http_config.h
    ap_mmn.h
    ap_ctx.h
    ap_hook.h
    ap_mm.h
    xmlparse.h.
    Тогда их надо взять из "правильной" предыдущей версии Apache - для
    сборки это несущественно, т.к. собираем PHP а не apache.
    И кто-то очень умный win исходники поставляет с msi инсталяцией - хочешь не хочешь
    а инсталируй apache ( а предыдущий если был - сноси ).
    В дополнительные опции компилятора вставляем /DEAPI (или /D "EAPI").
    Далее Build и в каталоге php/release_ts забираем требуемый php4apache.dll.
    Результат можно взять здесь http://www.banknew.dp.ua/download/php4apache-eapi-4-3-11.rar

       2006-04-26 15:03
    http://programmistu.deps.ru/html/php/2001-04-20.html
    это взято с разрешения или бессовестно уворовано?

       2006-05-10 14:20
    Спасибо автору за статью. Все прекрасно работает! (Apache+PHP5)

       2006-05-28 21:02
    Apache 2.50 and PHP5 соединил как модуль по вышеуказанному руководству и заработало. ПРОСТО СУПЕР

    Почему лучше ставить PHP как модуль сервера Apache и как это сделать.

     
     
     
        © 1997-2008 PHPClubTeam
    []