Если вы серьезно занимаетесь разработкой, а не просто "погулять вышли", то один и тот же проект у вас крутится, как минимум, на двух серверах - на девелопер-сервере (где, собственно, вы и занимаетесь кодингом), и на продакшн-сервере - это уже рабочий сервер у хостера, доступный публике, куда вы заливаете результаты своего труда.
Понятно, что самый простой способ залить изменения - это сделать сравнение папок (локальных и удаленных) и залить измененные файлы. Но тут часто разработчики наступают на одни и те же грабли с завидной регулярностью: файла конфигурации. Ведь они отличаются на локальном и удаленном серверах - везде прописаны свои папки, свои пути, свои базы и т.д., которые не совпадают на сервере локальном и на удаленном. Поэтому надо следить, чтобы при заливке файлов измененных файлов не трогались файлы конфигурации. Проблема мелкая, но я сам раньше постоянно на это натыкался - сначала зальешь, потом спохватишься, что сайт перестал работать, и давай быстро конфиги в порядок приводить. В общем, я как-то для себя нашел решение, которое использую сейчас и в ocStore.
Для начала я создал в корне проекта файл defines.php, где определяю константу LOCALHOST и общие константы, которые используются и в админке, и в клиентской части:
<?php
// Определение локального сервера
if (($_SERVER['SERVER_ADDR'] == '127.0.0.1' AND $_SERVER['REMOTE_ADDR'] == '127.0.0.1')
OR (strpos($_SERVER['SERVER_NAME'], 'localhost') !== false)
OR (substr($_SERVER['SERVER_NAME'], -6) == '.local')
OR (substr($_SERVER['SERVER_NAME'], -4) == '.loc')
) {
define('LOCALHOST', 1);
} else {
define('LOCALHOST', 0);
}
define('DOCROOT', dirname(__FILE__));
if (LOCALHOST) {
// DB
define('DB_DRIVER', 'mysql');
define('DB_HOSTNAME', 'localhost');
define('DB_USERNAME', 'user');
define('DB_PASSWORD', 'psw');
define('DB_DATABASE', 'db_name_local');
define('DB_PREFIX', 'oc_');
} else {
define('DB_DRIVER', 'mysql');
define('DB_HOSTNAME', 'localhost');
define('DB_USERNAME', 'user');
define('DB_PASSWORD', 'psw');
define('DB_DATABASE', 'db_name_remote');
define('DB_PREFIX', 'oc_');
}
// DIRs
define('DIR_SYSTEM', DOCROOT . '/system/');
define('DIR_DATABASE', DOCROOT . '/system/database/');
define('DIR_CONFIG', DOCROOT . '/system/config/');
define('DIR_IMAGE', DOCROOT . '/image/');
define('DIR_DOWNLOAD', DOCROOT . '/download/');
define('DIR_CACHE', DOCROOT . '/_cache/_sys/');
define('DIR_TMP', DOCROOT . '/_cache/_tmp/');
define('DIR_DATA', DOCROOT . '/_data/');
// EOF
Затем переписал файлы config.php для клиентской части:
<?php
require_once 'defines.php';
// DIR
define('DIR_APPLICATION', DOCROOT . '/catalog/');
define('DIR_LANGUAGE', DOCROOT . '/catalog/language/');
define('DIR_THEME', DOCROOT . '/catalog/view/theme/');
define('DIR_LOGS', DOCROOT . '/system/logs/');
// EOF
и то же самое для админки:
<?php
require_once '../defines.php';
if (LOCALHOST) {
define('SITE_NAME', 'my-site.local');
} else {
define('SITE_NAME', 'my-site.ru');
}
// HTTP
define('HTTP_SERVER', 'http://' . SITE_NAME . '/admin/');
define('HTTP_CATALOG', 'http://' . SITE_NAME . '/');
define('HTTP_IMAGE', 'http://' . SITE_NAME . '/image/');
// HTTPS
define('HTTPS_SERVER', 'http://' . SITE_NAME . '/admin/');
define('HTTPS_IMAGE', 'http://' . SITE_NAME . '/image/');
// DIR
define('DIR_APPLICATION', DOCROOT . '/admin/');
define('DIR_LANGUAGE', DOCROOT . '/admin/language/');
define('DIR_THEME', DOCROOT . '/admin/view/');
define('DIR_TEMPLATE', DOCROOT . '/admin/view/template/');
define('DIR_LOGS', DOCROOT . '/system/logs/');
define('DIR_CATALOG', DOCROOT . '/catalog/');
// EOF
И теперь я смело могу лить любые изменения с локального (девелоперского) сервера на удаленный (продакшн), совершенно не задумываясь относительно файлов конфигураций, чем сохраняю себе при обновлениях энное количество нервных клеток, чего и вам желаю.