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 с тестовым содержимым: <code-php> <?php phpinfo(); ?> </code-php>

и вызвать его через броузер по адресу http://localhost/phpinfo.php .
По крайней мере часть этого текста взята с ресурса http://lib.custis.ru/ под лицензией GDFL.Список авторов доступен на этом ресурсе в статье под тем же названием.