Downgrade PHP 5.xx до 5.4, 5.3 в Ubuntu 14.04, 13.04

Попытаюсь здесь описать данную проблему. Когда мы устанавливаем или обновляем Ubuntu до версии 14.04 LTS, то мы первым делом мы обращаем внимание на то, что данная версия дстрибутива содержит PHP 5.5.9.  Конечно большинству разработчиков это абсолютно никаким боком не важно, но я столкнулся с , что мне все же требуется для работы старый добрый 5.3.10 — 5.3.28 ввиду того, что системные требования веб приложения с которым я постоянно работаю локально требуют именно такой версии интерпретатора PHP.  Я согласен со многими, что это не слишком критично, конечно есть определенные риски, например PHP 5.3.X может вести наблюдения за какими-то Warning или Exceptions, в отличии от того как в 5.5.9 подобные слежки могут быть упразнены. Это чисто поверхностный пример, для понимания того, что разница в версиях присутствует и вероятнее всего эта разница есть на уровне совместимости кода написанного под более старшими версиями PHP. Ну ведь не зря же разработчики некоторых веб платформ в системных требованиях к приложению четко указывают какие версии PHP приемлимы для работы с их приложением.

Сама проблема заключалась в том, что никаких из простых способов мне не удавалось понизить версию PHP  в дистрибутиве Ubuntu 14.04.  Мне давали разные советы. Первый который для меня был наиболее логичным, это сделать подмену списка репозиториев Ubuntu 14.04 на Ubuntu 12.04 , установить все то что мне нужно и вернуть все в исходное состояние. Но этот способ был плох тем что теперь , когда мы получаем новые версии или обновление ПО для нашей Ubuntu, PHP точно так же пытается обновится.  Нужно обновлять очень осторожно, в ручную, мне не особо это понравилось, учитывая ту скорость приходящий апдейтов, чуть ли не каждый день.

Еще один способ это не париться особо, а просто установить Ubuntu 12.04 LTS  с поддержой, если мне не изменяет память до 2018 года.

Но есть и способ другой,  скомпилировать из исходников версии 5.3.28 интерпретатор PHP, в Ubunru 14.04.
Для начала давайте вычистим наш текущий php, в любом случае если что-то не получится мы без проблем сможем его установить заново.
Итак удаляем текущую версию PHP:

sudo apt-get remove php5-gd php5-curl php5-common
sudo apt-get remove --purge php5*
sudo apt-get autoremove

После чего пошагово выполняем следующие команды в терминале:

sudo -i
wget http://in1.php.net/distributions/php-5.3.28.tar.bz2
tar -xvf php-5.3.28.tar.bz2
cd php-5.3.28
./configure
make
make install

Данный набор команд скачает, распакует, сконфигурирует и установит пониженную версию PHP  в нашей Ubuntu 14.04. Данный способ мной лично опробован не был, но товарищи по работе мне сообщили что все отлично и все работает. Удачи. Если у Вас возникнут какие-нибудь проблемы,  задавайте вопросы в комментариях, будем разбираться.

ПРОБЛЕМЫ И ВАРИАНТЫ ИХ РЕШЕНИЯ:

UDP:  Если на этапе ./configure ошибка – configure: error: xml2-config not found. Please check your libxml2 installation. Пишем в терминале следующее:

sudo apt-get install libxml2-dev

Спасибо Максим. 

UDP 2:  Если во время make (gcc 4.8.2-19ubuntu1)  dereferencing pointer to incomplete type

/tmp/php-5.3.3/ext/dom/node.c:1903:21: error: dereferencing pointer to incomplete type
    ret = buf->buffer->use;
                     ^
In file included from /tmp/php-5.3.3/main/php.h:38:0,
                 from /tmp/php-5.3.3/ext/dom/node.c:26:
/tmp/php-5.3.3/ext/dom/node.c:1905:40: error: dereferencing pointer to incomplete type
     RETVAL_STRINGL((char *) buf->buffer->content, ret, 1);
                                        ^
/tmp/php-5.3.3/Zend/zend_API.h:545:20: note: in definition of macro ‘ZVAL_STRINGL’
   const char *__s=(s); int __l=l;  \
                    ^
/tmp/php-5.3.3/ext/dom/node.c:1905:5: note: in expansion of macro ‘RETVAL_STRINGL’
     RETVAL_STRINGL((char *) buf->buffer->content, ret, 1);
     ^
make: *** [ext/dom/node.lo] Error 1

Выполняем следующие инструкции:

Pavel: (Изменить)

Решение нашёл здесь.
Нужно применить этот патч:
1) сохраняем патч в /ext/patch.patch
2) применяем git apply -v patch.patch
3) запускаем make

Спасибо Pavel

 

12 комментариев к “Downgrade PHP 5.xx до 5.4, 5.3 в Ubuntu 14.04, 13.04”

  1. Максим

    Здравтсвуйте. На этапе ./configure ошибка — configure: error: xml2-config not found. Please check your libxml2 installation.

    1. Андрей Боргояков

      Попробуйте в терминале следующее sudo apt-get install libxml2 libxml2-dev

    1. Андрей Боргояков

      Прошу прощения за поздний ответ, только добрался до интернета 🙂

  2. `dereferencing pointer to incomplete type` во время make (gcc 4.8.2-19ubuntu1)

    
    /tmp/php-5.3.3/ext/dom/node.c:1903:21: error: dereferencing pointer to incomplete type
        ret = buf->buffer->use;
                         ^
    In file included from /tmp/php-5.3.3/main/php.h:38:0,
                     from /tmp/php-5.3.3/ext/dom/node.c:26:
    /tmp/php-5.3.3/ext/dom/node.c:1905:40: error: dereferencing pointer to incomplete type
         RETVAL_STRINGL((char *) buf->buffer->content, ret, 1);
                                            ^
    /tmp/php-5.3.3/Zend/zend_API.h:545:20: note: in definition of macro ‘ZVAL_STRINGL’
       const char *__s=(s); int __l=l;  \
                        ^
    /tmp/php-5.3.3/ext/dom/node.c:1905:5: note: in expansion of macro ‘RETVAL_STRINGL’
         RETVAL_STRINGL((char *) buf->buffer->content, ret, 1);
         ^
    make: *** [ext/dom/node.lo] Error 1
    
    1. Решение нашёл здесь.
      Нужно применить этот патч:
      1) сохраняем патч в /ext/patch.patch
      2) применяем git apply -v patch.patch
      3) запускаем make

  3. Все получилось, но php не работает, при открытии сайта выдает содержание index.php просто текстом =(

    1. Андрей Боргояков

      Скиньте сюда результат выполнения этой команды в терминале

      ls -ld /etc/apache2/mods-*/php5*

  4. Если ошибка во время make, применить эти команды по очереди и потом ошибки не будет.

    wget -c -t 3 -O ./libxml29_compat.patch https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt
    patch -p0 -b < libxml29_compat.patch

    wget -c -t 3 -O ./debian_patches_disable_SSLv2_for_openssl_1_0_0.patch https://bugs.php.net/patch-display.php\?bug_id\=54736\&patch\=debian_patches_disable_SSLv2_for_openssl_1_0_0.patch\&revision=1305414559\&download\=1
    patch -p1 -b ./php-5.2.17-fpm-0.5.14.patch
    patch -p1 < php-5.2.17-fpm-0.5.14.patch

    Автор, раз уж пишите статью-инструкцию, пишите все полностью.

Оставьте комментарий

%d такие блоггеры, как: