Как скомпилировать php v.5.5.10 из исходников

Эта заметка расскажет как можно установить PHP последней версии на свой сервер из исходного кода, на примере PHP 5.5.10 + CentOS 6.5.

Для начала скачиваем исходный код с официального зеркала. Я живу в Украине и для меня php.net предложил вот такой вот список зеркал.
Screenshot from 2014-03-18 10:58:40

Можно перейти по этой ссылке, и на основе Вашего местонахождения будут предложены зеркала, которые находятся в Вашей стране.

Буду рассматривать пример установки 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++ компилятор.
Screenshot from 2014-03-18 11:07:07

На чистом сервере его нету, поэтому его нужно установить:

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() ?>

И открыть его в браузере. Если все работает - увидите вот такую картинку:
Screenshot from 2014-03-18 14:58:42