Установка нескольких версий php на ISPmanager

Время не стоит на месте и в последних версиях дистрибутивов CentOS 6 по умолчанию идет php 5.3. Но к сожалению некоторые старые проекты требуют php версии 5.2. В интернете много инструкций, как удалить новую и поставить старую версию php, но проблема в том, что эти инструкции тоже устарели :-) Все они предлагают ставить php 5.2.17 из репозитория Atomic, но на данный момент такой версии там уже нет. Так что придется выкручиваться иначе :-)

Добавим к нашей задачке еще одно условие — мы купили VPS с панелью ISPmanager и хотим заиметь сразу две версии php. И это вполне осуществимо.

Для реализации задуманного мы установим php 5.2.17 как CGI.

Качаем php во временную директорию и распаковываем

  1. cd /tmp
  2. wget http://museum.php.net/php5/php-5.2.17.tar.gz
  3. tar xzvf php-5.2.17.tar.gz
  4. cd php-5.2.17

Готовим php к сборке

  1. ./configure --prefix=/opt/php52 \
  2. --with-config-file-path=/opt/php52/etc \
  3. --with-config-file-scan-dir=/opt/php52/etc/php.d \
  4. --with-libdir=lib64 \
  5. --with-mysql \
  6. --with-pdo-mysql \
  7. --with-mysqli \
  8. --with-curl \
  9. --with-gd \
  10. --with-pic \
  11. --with-bz2 \
  12. --with-iconv \
  13. --with-zlib \
  14. --with-jpeg-dir \
  15. --with-png-dir \
  16. --enable-cli \
  17. --enable-pdo \
  18. --enable-exif \
  19. --enable-ftp \
  20. --enable-magic-quotes \
  21. --enable-fastcgi \
  22. --enable-discard-path \
  23. --enable-force-cgi-redirect

Используйте опцию --with-libdir=lib64 только если у вас 64-битная ОС, в противном случае используйте --with-libdir=lib. Определить свою версию Linux можно так

В процессе выполнения конфигурации могут сыпаться ошибки, которые мы устраняем устанавливая недостающие пакеты. И вновь запускаем конфигурацию.

Ниже список ошибок и методы их решения:

no acceptable cc found in $PATH — нет компилятора GCC

yum install gcc

checking for xml2-config path…
configure: error: xml2-config not found. Please check your libxml2 installation.

yum install libxml2-devel

checking for BZip2 support… yes
checking for BZip2 in default path… not found
configure: error: Please reinstall the BZip2 distribution

yum install bzip2-devel

checking for cURL support… yes
checking if we should use cURL for url streams… no
checking for cURL in default path… not found
configure: error: Please reinstall the libcurl distribution -
easy.h should be in /include/curl/

yum install curl-devel

configure: error: libjpeg.(a|so) not found.

yum install libjpeg-devel

configure: error: libpng.(a|so) not found.

yum install libpng-devel

configure: error: libXpm.(a|so) not found.

yum install libX11-devel gd-devel

checking for utf8_mime2text signature… new
checking for U8T_DECOMPOSE…
configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information.

yum install libc-client-devel

checking for mcrypt support… yes
configure: error: mcrypt.h not found. Please reinstall libmcrypt.

yum install libmcrypt-devel

checking for specified location of the MySQL UNIX socket… /var/lib/mysql/mysql.sock
configure: error: Cannot find MySQL header files under /usr.
Note that the MySQL client library is not bundled anymore!

yum install mysql-devel

Если лень заморачиваться и проверять каждую ошибку, можно сразу установить всё одной командой

yum install libxml2-devel bzip2-devel curl-devel libjpeg-devel libpng-devel libX11-devel gd-devel libc-client-devel libmcrypt-devel mysql-devel

Компилируем и инсталируем

  1. make
  2. make install

Для операционной системы CentOS, панель управления хостингом ISPmanager в обертку php прописывает путь к php-cgi как /usr/bin/php-cgi, который является бинарником php 5.3. Т.к. мы используем данную версию интерпретатора в модуле апача, то данный бинарник нам не нужен. Удаляем и вместо него делаем ссылку на наш новый php-cgi:

  1. rm /usr/bin/php-cgi
  2. ln -s /opt/php52/bin/php-cgi /usr/bin/php-cgi

Проконтролировать, какие модули были установлены можно командой

/usr/bin/php-cgi -m

Теперь выставляем для пользователя хостинга право выполнять «php как cgi», и в данном режиме будет использоваться php версии 5.2.17, если же для домена в панели управления хостинга установить режим «php как модуль Апач», то будет задействована php 5.3.

Решил дополнить статью вариантом, когда по умолчанию установлена php 5.2.x, а вам нужно в нагрузку установить php 5.3.27.

Качаем, распаковываем

  1. wget http://de1.php.net/distributions/php-5.3.27.tar.gz
  2. tar xzvf php-5.3.27.tar.gz
  3. cd php-5.3.27

конфигурируем

Этот вариант проверял у себя. Точно работает

  1. ./configure \
  2. --prefix=/opt/php53 \
  3. --with-zlib-dir \
  4. --with-freetype-dir \
  5. --enable-mbstring \
  6. --with-libxml-dir=/usr \
  7. --enable-soap \
  8. --enable-calendar \
  9. --with-curl \
  10. --with-mcrypt \
  11. --with-zlib \
  12. --with-gd \
  13. --disable-rpath \
  14. --enable-inline-optimization \
  15. --with-bz2 \
  16. --with-zlib \
  17. --enable-sockets \
  18. --enable-sysvsem \
  19. --enable-sysvshm \
  20. --enable-pcntl \
  21. --enable-mbregex \
  22. --with-mhash \
  23. --enable-zip \
  24. --with-pcre-regex \
  25. --with-mysql \
  26. --with-pdo-mysql \
  27. --with-mysqli \
  28. --with-jpeg-dir=/usr \
  29. --with-png-dir=/usr \
  30. --enable-gd-native-ttf \
  31. --with-openssl \
  32. --with-libdir=lib64 \
  33. --enable-ftp \
  34. --with-imap \
  35. --with-imap-ssl \
  36. --with-kerberos \
  37. --with-gettext \
  38. --enable-cgi

А этот какой то подозрительный. Там что-то не так с SQL. Оставлю тут для примера…

Исправляем ошибки так же, как показано выше и компилируем

  1. make
  2. make install

Замеченые ошибки и решения:

checking for pkg-config... /usr/bin/pkg-config
configure: error: Cannot find OpenSSL's <evp.h>

yum install openssl openssl-devel

checking for PCRE headers location... configure: error: Could not find pcre.h in /usr

yum install pcre-devel.x86_64

configure: error: jpeglib.h not found

yum install libjpeg-devel.x86_64

configure: error: png.h not found

yum install libpng-devel.x86_64

configure: error: freetype.h not found

yum install freetype-devel.x86_64

configure: error: Your t1lib distribution is not installed correctly. Please reinstall it

yum install t1lib-devel

configure: error: Unable to locate gmp.h

yum install gmp-devel

configure: error: Cannot find ldap.h

yum install openldap-devel

configure: error: mcrypt.h not found. Please reinstall libmcrypt

yum install libmcrypt.x86_64 libmcrypt-devel.x86_64

Note that the MySQL client library is not bundled anymore

yum install mysql-devel.x86_64

configure: error: Cannot find pspell

yum install aspell-devel.x86_64

configure: error: Can not find recode.h anywhere under yes /usr/local /usr /opt

yum install recode-devel.x86_64

configure: error: cannot find mm library

configure: error: Cannot find libtidy

yum install libtidy.x86_64 libtidy-devel.x86_64

configure: error: not found. Please reinstall the expat distribution

yum install expat-devel

configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution

yum install libxslt.x86_64 libxslt-devel.x86_64

configure: error: utf8_mime2text() has new signature

yum install libc-client-devel

При выполнении команды make еще может выскочить вот такая ошибка:

/usr/bin/ld: cannot find -lltdl

решается установкой:

yum install libtool-ltdl-devel

Если в процессе установки вы получаете сообщение virtual memory exhausted: Cannot allocate memory, то вам нужно временно остановить прожорливые процессы вашего сервера, как правило это mysqld — service mysqld stop. Выполнить make и make install и вновь запустить service mysqld start.

Теги: