Как скомпилировать php v.5.5.10 из исходников
Эта заметка расскажет как можно установить PHP последней версии на свой сервер из исходного кода, на примере PHP 5.5.10 + CentOS 6.5.
Для начала скачиваем исходный код с официального зеркала. Я живу в Украине и для меня php.net предложил вот такой вот список зеркал.
Можно перейти по этой ссылке, и на основе Вашего местонахождения будут предложены зеркала, которые находятся в Вашей стране.
Буду рассматривать пример установки php v.5.5.10 на чистый сервер CentOS 6.5.
Итак скачиваем и распаковываем:
wget -O php-5.5.10.tar.gz http://ua1.php.net/get/php-5.5.10.tar.gz/from/this/mirror
tar xf php-5.5.10.tar.gz && cd php-5.5.10
Что бы все получилось нам нужен C++ компилятор.
На чистом сервере его нету, поэтому его нужно установить:
yum install gcc make
В принципе на этом этапе конфигуратор запустится и отвалится с вот такой ошибкой:
checking libxml2 install dir no
checking for xml2-config path
configure: error: xml2-config not found. Please check your libxml2 installation.
Нужно доставить libxml:
yum install libxml2-devel
На этом этапе configure скрипт выполняется без ошибок. Он находит что есть в системе и с чем он может собрать php. Не буду расписывать в подробностях опции, которые включены по умолчанию, скажу лишь то, что с таким набором далеко не зайдешь. В этом списке нету ничего что помогло бы нам запустить какой-то простенький сайтик.
Я буду собирать php c поддержкой следующих модулей:
- curl
- mysql
- mysqli
- mhash
- pdo-mysql
- gd
- mcrypt
- mbstring
- openssl
- pcre
- soap
- Apache module
- zlib
Сначала включим Epel репозиторий:
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6*.rpm
Дальше нужно доставить нужные пакеты:
yum install mysql-devel httpd-devel gd-devel libmcrypt-devel mcrypt bison-devel mhash-devel libcurl-devel
Теперь можно и пособирать:
./configure -bindir=/usr/bin -with-config-file-path=/etc -with-curl -with-mhash -with-mysql -with-mysqli -with-gd -with-pdo-mysql -with-mcrypt -enable-mbstring -with-openssl -with-pcre-regex -enable-soap -with-apxs2 -with-zlib
немного пояснений:
--bindir
- путь, куда сохранить бинарники
--with-config-file-path
- путь хранения php.ini
По умолчанию php складывается в папку /usr/local.
Дальше устанавливаем:
make && make install
В ходе установки make должен внести вот такую строчку в httpd.conf. Если этого не произошло - сделайте это сами:
LoadModule php5_module /usr/lib/httpd/modules/libphp5.so
В папке с исходным кодом предоставляется 2 типа php.ini. В зависимости от целей, для которых используется сервер, выполняем одну из следующих команд:
cp php.ini-development /etc/php.ini
или
cp php.ini-production /etc/php.ini
Учим Apache работать с php файлами:
nano /etc/httpd/conf.d/php.conf
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
При рестарте Apache я получил вот такую ошибку:
Starting httpd: httpd: Syntax error on line 216 of /etc/httpd/conf/httpd.conf: Cannot load /usr/lib/httpd/modules/libphp5.so into server: /usr/lib/httpd/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied
Это связано с тем, что Selinux блокирует добавление модулей в Apache. Временно отключить SeLinux можно командой:
/usr/sbin/setenforce 0
Для того что бы на всегда отключить SeLinux, нужно в файле /etc/selinux/config
Заменить:
SELINUX=enforcing
на
SELINUX=disabled
Теперь можно создать в папке /var/www/html файл php.php со следующим содержанием:
<?php phpinfo() ?>
И открыть его в браузере. Если все работает - увидите вот такую картинку: