Бывают случаи, когда необходимо сделать несколько сайтов с одной и той же, или во многом похожей базой товаров, при этом используя одни и те же изображения. Для экономии дискового пространства в этом случае лучший вариант - один каталог изображений на все сайты, при этом на сайте пути к картинкам будут выглядеть так же, как если бы они находились в папке сайта, по привычному пути.
Есть:
Несколько сайтов на opencart с одними и теми же товарами
VPS сервер, ubuntu 14
Панель Vesta cp. Здесь важно, т.к. пути файлов, которые редактирую будут отличаться в других случаях
Путь к корню сайта: /home/httpm/web/хххххх.ru/public_html
Каталог, где будут размещены изображения: /home/httpm/web/image/
В принципе, метод достаточно универсален, в зависимости от панели могут быть некоторые отличия с настройкой open_basedir.
Часть 1 — настройки opencart и операции с каталогами изображений
Открываем конфиги — /config.php и /admin/config.php и меняем путь к каталогу изображений:
define('DIR_IMAGE', '/home/httpm/web/хххххх.ru/public_html/image/');
На
define('DIR_IMAGE', '/home/httpm/web/image/');
Перемещаем каталог изображений (/image) соответственно новому пути
Теперь файлы перемещены, но:
1 — Изображения нельзя открыть из браузера, т.к. в корне сайта нет каталога «image»
2 — Каталог по новому пути скорее всего недоступен для CMS (по крайней мере в указанных условиях это так) и при открытии сайта Вы увидите ошибки вроде:
Warning: is_file(): open_basedir restriction in effect. File(/home/httpm/web/image/catalog/123.jpg) is not within the allowed path(s): (/home/httpm/web/xxxxxxxx.ru/public_html:/home/admin/tmp) in /home/httpm/web/xxxxxxxx.ru/public_html/catalog/model/tool/image.php on line 4
Решение первого пункта — создать в корне сайта ссылку на папку изображений в новом месте. Здесь важно, ято бы каталог (в прежнем месте, где теперь будет ссылка) был удален перед выполнение команды, иначе ссылка окажется внутри. Для этого необходимо в терминале выполнить команду:
ln -s /home/httpm/web/image/ /home/httpm/web/хххххх.ru/public_html/image
Часть 2 — избавляемся от ошибки с open_basedir
В open_basedir содержится список каталогов, к которым разрешено обращаться php скриптам. Если Вы разместили image в каталоге, который есть в списке разрешенных, ошибок быть не должно и на этом можно остановиться, все должно работать. Если ошибки есть, добавляем путь в шаблон /usr/local/vesta/data/templates/web/apache2/default.stpl, или /usr/local/vesta/data/templates/web/httpd/default.stpl, в зависимости от используемого web сервера. Находим:
php_admin_value open_basedir %docroot%:%home%/%user%/tmp
Меняем (добавляем ":%home%/%user%/web/image"):
php_admin_value open_basedir %docroot%:%home%/%user%/tmp:%home%/%user%/web/image
При использовании других панелей/отсутствии таковой, путь будет другой
Далее необходимо внести изменения в текущую конфигурацию сайтов - пересоздать WEB для пользователя через панель: