PHP под Cygwin
Популярность LAMP-приложений и необходимость править/пробовать/отлаживать эти приложения на Windows-станциях разработчиков не всегда может быть решена путем инсталляции Windows-версии PHP — т. к. web-приложение может активно использовать Linux-инфраструктуру внешних приложений: например, вызывать TeX, convert для растеризации изображений, иметь завязки на Unix-like пути и т.п. В таком случае, можно либо использовать виртуальную Linux-машину от VMware, либо, использовать Cygwin, который, по-хорошему, обязательно должен быть установлен на Windows-машине у опытного разработчика. Конечно, с точки зрения производительности, Cygwin не очень эффективен, но любим мы его не за это.
Инсталляция LAMP-платформы может состоять из следующих шагов:
Содержание
Инсталляция apache
Ставится как пакет дистрибутива Cygwinа. Никаких особых проблем быть не должно.
Инсталляция MySQL
Серверная часть
Имеет смысл выкачать ставить «чистокровною» Windows-версию, и инсталлировать ее согласно документации.
Клиентская часть
Необходимо сборка под Cygwin.
Инсталляция PHP
К сожалению, входящий в дистрибутив Cygwin веб-сервер apache лишен в данный момент (2006 г.) модуля mod_php. До 2004 года, этот модуль входил в состав Cygwin-apache, и поддерживался здесь, но был заброшен вследствии различных причин.
Далее, мы опишем, как скомпилировать PHP под Cygwin и заставить его работать. Инструкция содержит некоторые нетривиальные шаги.
Выкачиваем исходные коды PHP (php−4.3.11.tar.bz2) c http://www.php.net/ ( Нижеприведенное тестировалось для версии 4.3.11, но скорее всего, будет работать со всей линейкой PHP4) и разворачиваем архив:
tar jxvf php-4.3.11.tar.bz2
Заходим в развернутый каталог:
stas@ws-fomin /cygdrive/f/lib $ cd php-4.3.11/ stas@ws-fomin /cygdrive/f/lib/php-4.3.11
Запускаем configure (обратите внимание, все должно быть в одну строку, на несколько строк разбито только для читаемости):
./configure --with-apxs=/usr/sbin/apxs --enable-mbstring --with-mysql=/usr/local --with-pear --with-zlib --with-bz2 --with-gd
Идет стандартное конфигурирование:
stas@ws-fomin /cygdrive/f/lib/php-4.3.11 $ ./configure --with-apxs=/usr/sbin/apxs --enable-mbstring --with-mysql=/usr/local --with-pear --with-zlib --with-bz2 --with-gd loading cache ./config.cache checking host system type... i686-pc-cygwin checking for gcc... (cached) gcc checking whether the C compiler (gcc ) works... yes ... Thank you for using PHP.
stas@ws-fomin /cygdrive/f/lib/php-4.3.11 $
Слегка правим Makefile:
stas@ws-fomin /cygdrive/f/lib/php-4.3.11 $ sed -i.org 's/libphp4.so/libphp4.dll/g' Makefile
Запускаем сборку (дело небыстрое):
stas@ws-fomin /cygdrive/f/lib/php-4.3.11 $ make /bin/sh /cygdrive/f/lib/php-4.3.11/libtool --silent --preserve-dup-deps --mode=compile gcc -Iext/zlib/ -I/cygdrive/f/lib/php-4.3.11/ext/zlib/ -DPHP_ATOM_INC -I/cygdrive/f/lib/php-4.3.11/include -I/cygdrive/f/lib/php-4.3.11/main -I/cygdrive/f/lib/php-4.3.11 -I/cygdrive/f/lib/php-4.3.11/ext/mbstring/mbregex -I/cygdrive/f/lib/php-4.3.11/ext/mbstring/libmbfl -I/cygdrive/f/lib/php-4.3.11/ext/mbstring/libmbfl/mbfl -I/usr/local/include/mysql -I/cygdrive/f/lib/php-4.3.11/ext/xml/exp at -I/cygdrive/f/lib/php-4.3.11/TSRM -I/cygdrive/f/lib/php-4.3.11/Zend -g -O2 -c /cygdrive/f/lib/php-4.3.11/ext/zlib/zlib.c -o ext/zlib/zlib.lo .... Build complete. (It is safe to ignore warnings about tempnam and tmpnam).
stas@ws-fomin /cygdrive/f/lib/php-4.3.11 $
Собираем библиотеки:
cd libs
Линкуем libphp4.dll (обратите внимание, опять все должно быть в одну строку, на несколько строк разбито только для читаемости):
gcc -shared -o libphp4.dll -Wl,--out-implib=libphp4.dll.a -Wl,--export-all-symbols -Wl,--whole-archive libphp4.a /bin/cyghttpd.dll -Wl,--no-whole-archive -lcrypt -L/usr/local/lib/mysql -lmysqlclient -lpng -lz -lbz2 -lz -lresolv -lm
Creating library file: libphp4.dll.a Info: resolving _ap_user_id by linking to __imp__ap_user_id (auto-import) Info: resolving _ap_group_id by linking to __imp__ap_group_id (auto-import) Info: resolving _ap_user_name by linking to __imp__ap_user_name (auto-import) Info: resolving _ap_max_requests_per_child by linking to __imp__ap_max_requests_per_child (auto-import) Info: resolving _ap_server_root by linking to __imp__ap_server_root (auto-import) Info: resolving _top_module by linking to __imp__top_module (auto-import)
stas@ws-fomin /cygdrive/f/lib/php-4.3.11/libs $
Дальше, по-накатанной, инсталляция:
$ cd .. $ make install
Правка конфигурационного файла apache /etc/apache/httpd.conf
Добавляем в файл строки:
LoadModule php4_module lib/apache/libphp4.dll AddModule mod_php4.c
В раздел, где идет «AddType application/» добавляем
AddType application/x-httpd-php .php AddType application/x-httpd-php-source .php
Проверяем, что расширение .php не встречается в командах вида AddHandler cgi-script
Проверяем синтаксис:
stas@ws-fomin /etc/apache $ /usr/sbin/apachectl configtest Syntax OK
Запускаем apache:
stas@ws-fomin /etc/apache $ /usr/sbin/apachectl start /usr/sbin/apachectl start: httpd started
Для проверки, можно завести файл /var/www/htdocs/phpinfo.php с тестовым содержимым:
<?php phpinfo(); ?>
и вызвать его через броузер по адресу http://localhost/phpinfo.php .
Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion».
Репликация: База Знаний «Заказных Информ Систем» → «PHP под Cygwin»