Восстановление работы Oscommerce в Ubuntu 12.04
Версия OSC 2.2 рассчитана на работу на php 5.2. В LAMP Ubuntu 12.04 устанавливается версия 5.3.
Раньше я делал downgrade до версии 5.2 из репозиториев karmic.
Как оказалось, можно установить 2 версии php на 1 сервер. Я сделал как рекомендовано здесь Настройка PHP 5.2 (через fastcgi) и PHP 5.3 (как модуль Apache2) на одном сервере под управлением Ubuntu 10.04+.
(еще ссылка здесь)
При установке возникли некоторые проблемы, решение для которых я вписал в тексте ниже.
Итак, на одном сервере с одним Apache2 прекрасно заводятся и соседствуют PHP 5.2 (через fastcgi) и PHP 5.3 (как модуль Apache2). Мы далее решим проблему так, что указать какой именно PHP использовать можно будет на уровне настроек виртуального хоста.
Скачиваем дистрибутив php 5.2:
wget http://www.php.net/get/php-5.2.17.tar.gz/from/ru.php.net/mirror
У меня так дистрибутив не скачался, поэтому пришлось идти на сайт www.php.net и скачивать необходимый пакет оттуда (как видим по адресу ссылки, эта версия перемещена в "музей")
Распаковываем архив:
tar zxvf php-5.2.17.tar.bz2
Заходим в директорию:
cd php-5.2.17
Устанавливаем зависимости:
sudo aptitude install libxml2-dev libmysqlclient-dev libcurl4-gnutls-dev libpng12-dev libjpeg62-dev
Конфигурируем, собираем и ставим из исходников наш php 5.2 в директорию /opt/php5.2
:
./configure --prefix=/opt/php5.2 --with-config-file-path=/opt/php5.2 --with-mysqli --with-mysql --with-curl --with-gd --with-jpeg-dir --enable-cli --enable-fastcgi --enable-discard-path --enable-force-cgi-redirect
Здесь у меня произошел затык вида
configure: error: libjpeg.(a|so) not found
При этом
locate libjpeg|grep so*
показывал, что в папке /usr/lib/... такие библиотеки были версий 8 и 6.2, и на них были сделаны линки без указания версий. Гугль подсказал, что ошибка связана с опцией --with-gd, но удаление этой опции не помогло. Делал линки на папку /opt/ тоже без результатно. Помогло указание на точный адрес папки, где лежат библиотеки, и в итоге я получил команду:
./configure --prefix=/opt/php5.2 --with-config-file-path=/opt/php5.2 --with-mysqli --with-mysql --with-curl --with-gd --with-jpeg-dir --enable-cli --enable-fastcgi --enable-discard-path --enable-force-cgi-redirect --with-pdo-mysql --with-libdir=/lib/i386-linux-gnu
В таком виде конфигурация прошла без ошибок. Далее, как обычно
make
sudo make install
/opt/php5.2/bin/php -v
Однако, про этот php пока ничего не знает наш уважаемый веб-сервер Apache2. Мы их познакомим через fastcgi.
Ставим:
sudo aptitude install libapache2-mod-fastcgi
Включаем нужные модули Apache2:
sudo a2enmod cgi fastcgi actions
Перезапускаем Apache, чтобы модули подцепились:
sudo service apache2 restart
(я считаю это делать пока рано, но сделал, как советуют)
Теперь создадим файл (он будет просто обёрткой, вызывающей наш исполнимый бинарник /opt/php5.2/bin/php-cgi
, но с нужными настройками, которые вы можете изменить или дополнить):
sudo gedit /usr/lib/cgi-bin/php52-cgi
И туда поместим буквально следующее:
#!/bin/sh
PHPRC="/opt/php5.2/"
export PHPRC
PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
exec /opt/php5.2/bin/php-cgi
Сделаем файл исполнимым:
sudo chmod +x /usr/lib/cgi-bin/php52-cgi
Теперь создадим необходимую часть конфига для виртуальных хостов, которым потребуется php 5.2:
sudo nano /etc/apache2/php52.conf
Поместим в файл следующее:
<FilesMatch "\.php">
SetHandler application/x-httpd-php5
ScriptAlias /php52-cgi /usr/lib/cgi-bin/php52-cgi
Action application/x-httpd-php5 /php52-cgi
AddHandler application/x-httpd-php5 .php
Теперь давайте пойдём в конфиг того виртуального хоста, который должен работать с php 5.2 и добавим в него следующую строку (например, после DocumentRoot...):
...
Include php52.conf
...
Перезапустим Apache, чтобы подцепились новые настройки виртуального хоста:
sudo service apache2 restart
Готово! Идите на нужный хост и проверяйте: он теперь обслуживается php 5.2.
Ну что ж, перейдем на наш локальный интернет магазин под oscommerce v.2.2. Скажу сразу, что версия 2.3 работает под php 5.3, но мой магазин сильно доработанный, поэтому переделать его не так просто.
Итак, что мы видим и как решаем проблемы.
1. Сначала сайт ругнулся на mb_internal_encoding - типа не поддерживается. Я закомментировал строку mb_internal_encoding("UTF-8"); в /includes/russian.inc
Видимо, она там особо не нужна была, я "воевал" с кодировкой когда-то, вставил по совету старого вебмастера.
В админке аналогично:
Fatal error: Call to undefined function mb_internal_encoding() in /home/server/www/solarhome/shop/admin/includes/languages/russian.php on line 18
2. Получаем теперь ошибку
Fatal error: Call to a member function add_current_page() on a non-object in /home/server/www/solarhome/catalog/includes/application_top.php on line 312
Решается редактированием этого файла в районе указанной строки.
По совету отсюда, заменяем
// navigation history
if (tep_session_is_registered('navigation')) {
на
// navigation history
if (tep_session_is_registered('navigation') && is_object($navigation)) {
3. Далее получаем ошибку в боксе Отзывы
Fatal error: Call to undefined function mb_strlen() in ../functions/general.php
Лечится заменой
for ($i=0, $n=mb_strlen($string); $i<$n; $i++) {
$char = mb_substr($string, $i, 1);
на
for ($i=0, $n=strlen($string); $i<$n; $i++) {
$char = substr($string, $i, 1);
4. Да, еще не забываем менять путь к файлам в /includes/configure.php если он там прописан явно. А лучше сделать так:
define('DIR_FS_CATALOG', $_SERVER['DOCUMENT_ROOT'].'/catalog/'); // absolute path required
5. Теперь отзывы показываются без ошибки, но некоторые буквы идут знаками вопроса в ромбике. С этим я уже боролся когда-то, будем вспоминать.
А, вот http://addons.oscommerce.com/info/6034
Hello guys, i am not sure exactly if it was a bug or what but in my site the reviews system (the standard reviews system) was not working correctly with the UTF-8 (greek), maybe it has this problem with other languages too.. The first problem was on the reviews block it was apeearing a box symbol instead of the normal letter in every 15 letters, and the second problem was on the reviews.php admin, it was appearing these symbol boxes in the preview so it damages the whole text..
So the fix that worked to my is these chages :
in the includes/boxes/reviews.php
### find this : ###
$rand_review_text = tep_break_string(tep_output_string_protected($rand_review['reviews_text']), 15, '-
');
### and change with this : ###
$rand_review_text = tep_break_string(tep_output_string_protected($rand_review['reviews_text']), 15, '');
### save and close ###
in the admin/reviews.php
### find this : ###
reviews_text, 15))); ?>
### and change with this : ###
reviews_text))); ?>
### save and close ###
I am not very sure what those changes mean, but they are working for me, and it fixes the problem so the text is not changing with symbols..
6. Проверяем пути к файлам в обоих файлах /includes/configure.php. После исправлений снимаем права на запись с файла configure.php чтобы не получать уведомление от oscommerce вверху страницы.
Опубликовано