Домашняя лаборатория мудрого KAA

Трудности переноса osCommerce v3.0 SP 1.4

Просмотров: 1461Комментарии: 0
CMS
Трудности переноса osCommerce v3.0 SP 1.4
Good news, everyone!

Понадобилось перенести сайт с одного сервера на другой. Хостер REG.RU предоставляет услугу создания полного бэкапа, именно ей я и воспользовался. Затем залил файлы на новый хостинг, поправил файл конфигурации /includes/configure.php и импортировал базу данных через phpMyAdmin. Сайт заработал, но заботы были еще впереди.

Отключение аутентификации Apache

В файле /admin/.htaccess удалите следующие строки:

##### OSCOMMERCE ADMIN PROTECTION - BEGIN #####
AuthType Basic
AuthName "osCommerce Online Merchant Administration Tool"
AuthUserFile /web/htdocs/YOUR PATH TO ADMIN DIRECTORY/.htpasswd_oscommerce
Require valid-user
##### OSCOMMERCE ADMIN PROTECTION - END #####
Правда, у меня все выглядело несколько иначе, но принцип понятен.

Сброс пароля администратора

Открыть phpMyAdmin и выбрать таблицу administrators. Из консоли выполнить следующий скрипт:

INSERT INTO `administrators` VALUES (1, 'admin', '55340159dccd929e0cd2abd72cfe799a:14');
В результате добавится новый пользователь с логином "admin" и паролем "admin". После успешного входа не забыть сменить пароль.

После добавления товара его невозможно отредактировать

Кроме того, в режиме отображения всех товаров на новом товаре все просто зависало. В моем случае проблема возникла в файле /admin/includes/applications/products/pages/main.php из-за этой стоки:

   
newCell = newRow.insertCell(2);
newCell.innerHTML = htmlSpecialChars(record.products_last_modified); 
А все из-за того, что record.products_last_modified после добавления нового товара равен null;

Я исправил эту ошибку следующим образом:

if (record.products_last_modified !== null)
  newCell.innerHTML = htmlSpecialChars(record.products_last_modified); 
else
  newCell.innerHTML = htmlSpecialChars(record.products_date_added); 

Неудобный порядок сортировки

Порядок сортировки общего списка товаров можно изменить в файле /admin/includes/applications/products/classes/products.php. Мне нравится, когда новые товары отображаются первыми. Для этого нужно просто заменить все вхождения order by pd.products_name на order by pd.products_id desc.

Не создаются изображения предпросмотра

С этой ошибкой я ковырялся особенно долго. Проблема была в том, что на новом хостинге стоял запрет на использование функции exec. Видимо, дело обычное для виртуальных хостингов. Кстати, из этого можно предположить, что раньше сайт хостился на выделенном сервере.

Вот, что я обнаружил в логе:

PHP Warning: exec() has been disabled for security reasons in /admin/includes/classes/image.php on line 52

Кстати, лог находится в файле /includes/work/oscommerce_errors.log. Рекомендую его регулярно проверять и удалять.

Как оказалось, ошибка кроется в функции resize (см. /admin/includes/classes/image.php). Давайте рассмотрим эту функцию более подробно:

    
function resize($image, $group_id) {
  if (osc_empty(CFG_APP_IMAGEMAGICK_CONVERT) || !file_exists(CFG_APP_IMAGEMAGICK_CONVERT)) {
    return $this->resizeWithGD($image, $group_id);
  }
  
  ...

  exec(escapeshellarg(CFG_APP_IMAGEMAGICK_CONVERT) . ' -resize ' ...
}
В случае если скрипт находит программу конвертации изображений, путь к которой расположен в константе CFG_APP_IMAGEMAGICK_CONVERT, то он пытается запустить эту программу. Если команда exec отключена, то происходит ошибка.

Вот исправленный вариант:

function resize($image, $group_id) {
  if (exec('echo EXEC') != 'EXEC' || osc_empty(CFG_APP_IMAGEMAGICK_CONVERT) || !file_exists(CFG_APP_IMAGEMAGICK_CONVERT)) {
        return $this->resizeWithGD($image, $group_id);
  }
  ...
}
На этом, пожалуй, пока все.

ЗЫ Оставайтесь голодными. Оставайтесь безрассудными. Всем большое спасибо (C)

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

Используйте нормальные имена

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)