Бер 122008
 

PHP5 & PHP4

See here for English version of the article

Напевно кожен з нас стикався з проблемою, коли на WEB-сервері одночасно потрібні дві версії мови PHP – версія 4 та версія 5. Проблема стає гострішою тоді, коли сервер працює під управлінням RPM-базованої ОС Linux. Як правило хостери вибирають CentOS5, а ця система йде “в комплекті” з PHP v5.1, і версія 4.х для неї не поствляється упорядниками пакетів. Як варіант, ставимо нижчу версію ОС, що має портовану PHP v4.3.9, але тут проблема – для неї немає PHP v5.х.

Особисто в мене на сервері розміщені кілька комерційних проектів, і вимоги до версій PHP в них доволі пістряві – хтось хоче 4ту версію, хтось 5ту. Відповідно завдання потрібно було вирішити будь-якою ціною :).

Спроба перша – поставити RPM-пакети і 4ї, і 5ї версій. Ясне діло, що я це навіть не не пробував :), бо по-перше не поставилося б воно, а по-друге збудувати RPM-пакет PHP4 із пакета вихідного коду (SRPM) так і не вдалося – явно видно бібліотеки ОС CentOS5 більш “прокачані” аніж в CentOS4, бо ерори компіляції мене вимотали. Одним словом, це рішення мені не підійщло ніяк.

Варіант другий – зібрати десь збоку PHP4 і підключити її в режимі CGI. Власне такий варіант “заканав”, але не все так зразу :). Спочатку,попробував зібрати PHP із сурсів отриманих із офіційного сайту www.php.net. Зібрав і зрозумів нафіга RedHat додає до своїх пакетів ще тисячу і один патч. Словом, кривеньке вийшло то моє PHP – проблеми з Unicode, виконанням певних функцій, якісь там “сіґфолти” і т.д. Як то кажуть, з того ніц 🙁 .

І тут я знайшов один проект, де чуваки вже підготували PHP4 під CentOS5 зі всіма редхатівськими патчами, та ще й в RPM запакували. Як кажуть, те, що й треба! Але тут теж засада – інсталяція пакетів від проекту LabCoding явно не дружить із існуючою інсталяцією PHP5. На превелике моє “лінуксоїдівське” щастя ці хлопаки виклали ще й сорс-РПМ, який я вирішив використати, щоб збудувати свою інсталяцію :).

Зміна полягала в наступному – винести інсталяцію PHP4 в окремий каталог, у моєму випадку це /opt/php4. Це дозволить версії 4 не перетинатися із версією5 і забезпечить їх повну незалежність.

Отже, за основу я все ж таки взяв пакет від LabCoding і як кажуть програмісти “порефакторив” його, забезпечивши повну інсталяцію PHP4 в окремий каталог. Завантажити RPM-пакет із вихідним кодом можна за цим лінком: php4-4.4.8-LAB4.src.rpm . Це для тих “гурманів”, які люблять все побілдати самому :).

А тепер головне – як поставити та налаштувати. Отже:

  1. Налаштовуємо інсталятор YUM наступним чином, створивши файл /etc/yum.repos.d/conforge.repo із таким вмістом:

    [conforge] name=Conforge package for CentOS $releasever – $basearch
    baseurl=http://repo.conforge.com/conforge/CentOS/$releasever/$basearch
    enabled=1

  2. Інсталюємо PHP4 використовуючи YUM:

    ~# yum install php4 php4-pear php4-mysql

  3. Щоб поставити всі доступні додатки (extensions) до PHP4 слід скористатися командою:

    ~# yum install php4*

  4. Тепер налаштовуємо Apache HTTPD. У конфігураційному файлі для вашого віртуального хоста (virtual host) прописуємо таке:

    ScriptAlias /php-bin/ /opt/php4/bin/
    SetEnv PHPRC “/opt/php4/bin”
    Action php4-script “/php-bin/php4-cgi”
    AddHandler php4-script .php

    Якщо цю річ прописати для загальної конфігурації сервера (як правило в /etc/http/conf/httpd.conf) тоді це відключить PHP5, що налаштоване по замовчуванню.

  5. Якщо є проблеми з кирилицею, слід додати ще й таке:
  6. AddDefaultCharset windows-1251

  7. Перезавантажуємо Apache HTTPD:
  8. ~# /etc/init.d/httpd reload

От все. Тепер віртуальний хост, для якого були задані опції, що в пункті 4, буде успішно працювати на PHP4 у режимі CGI, тоді як все інші віртуальні хости, включаючи хост по замовчуванню, будуть працювати на PHP5 у режимі ISAPI. Ще залишилось підправити файл php.ini, що знаходиться у каталозі /opt/php4/etc.

Всі ваші побажання, а також проблеми/баги/недоліки пишіть в коментарі.

 Додав о 21:12

  4 коментарі to “Ставимо PHP4 та PHP5 на CentOS5/RHEL5”

  1. Я тут недавно попробував FastCGI замість CGI на Lighttpd

    завантаженість процика зменшись щонайменше в 5 разів 😀

  2. будь ласка, відповісте, зробив так як ви кажете, а мені у процесі видає php4-pear-4.4.8-LAB4.i386.rpm is not signed що робити?

  3. коли роблю це yum install php4 php4-pear php4-mysql а пакет я на сервері цей маю php4-pear-4.4.8-LAB4.i386.rpm

  4. Спробуйте встановити із використанням опції –nogpgcheck , яка відключає перевірку на цифровий підпис. Наприклад, ось так:

    yum install php4-pear –nogpgcheck –enablerepo=conforge

    А ще поправте опис репозиторія [conforge] як це показано тут: http://wiki.conforge.com/wiki/tiki-index.php?page=Linux-ConforgeRepository

Залишість відповідь до Cancel reply

Ви можете використовувати ці HTML теги та артибути: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(обов'язково)

(обов'язково)