Скрипт подмены конфигов сайта на лету
Надоело каждый раз при переносе сайтов между серверами прописывать конфиги в нескольких местах. Каждый раз напрягаешься, чтобы не перепутать. Написал скрипт, который делает это автоматически в зависимости от $_SERVER['HTTP_HOST'] сервера на котором он запускается. Нужно лишь поправить один раз в конструкции switch переменные для каждого сервера, и пути ниже, если они отличаются от стандартных. И потом можно перетаскивать сайт с места на место, открывать страничку в браузере, а скрипт автоматически заменит файлы конфигов и почистит кеш. Закомментированные шаблоны файлов находятся прямо в нём, чтобы всё уместилось в одном файле. Ну в общем, думаю сами разберётесь.
Назовём файл migration.php поместим в корень сайта.
Предупреждение. Если что-то пошло не так, ко мне никаких претензий, что сайт перестал работать. Кто вообще не понимает в PHP, лучше делайте как привыкли) . По сути скрипт только 4 файла заменяет и чистит кеш.
Назовём файл migration.php поместим в корень сайта.
Предупреждение. Если что-то пошло не так, ко мне никаких претензий, что сайт перестал работать. Кто вообще не понимает в PHP, лучше делайте как привыкли) . По сути скрипт только 4 файла заменяет и чистит кеш.
<?php
header('Content-Type: text/html; charset=utf-8');
$params = []; // список переменных для подстановки в шаблоны файлов
$params['database_port'] = '3306';
switch ($_SERVER['HTTP_HOST']) {
case 'site.loc':
$params['database_server'] = 'localhost';
$params['dbase'] = 'dbname';
$params['database_user'] = 'dbuser';
$params['database_password'] = 'dbpassword';
break;
case 'site.ru':
$params['database_server'] = 'localhost';
$params['dbase'] = 'dbname';
$params['database_user'] = 'dbuser';
$params['database_password'] = 'dbpassword';
break;
default:
exit;
}
$params['table_prefix'] = 'modx_';
$params['core_url'] = '/core/';
$params['connectors_url'] = '/connectors/';
$params['manager_url'] = '/manager/';
$params['assets_url'] = '/assets/';
/***************************************************************************/
$base_path = __DIR__;
$params['host'] = $_SERVER['HTTP_HOST'];
$params['base_path'] = $base_path . '/';
$params['base_url'] = '/';
$params['core_path'] = $base_path . $params['core_url'];
$params['manager_path'] = $base_path . $params['manager_url'];
$params['connectors_path'] = $base_path . $params['connectors_url'];
$params['assets_path'] = $base_path . $params['assets_url'];
$params['processors_path'] = $params['core_path'] . 'model/modx/processors/';
$markers = []; // какой файл какому куску кода между маркерами соответствует
$markers[ $params['connectors_path'] . 'config.core.php' ] = 'config';
$markers[ $params['manager_path'] . 'config.core.php' ] = 'config';
$markers[ $params['base_path'] . '/config.core.php' ] = 'config';
$markers[ $params['core_path'] . 'config/config.inc.php' ] = 'core_config';
if( $params['database_port'] ) {
$params['db_port'] = ':' . $params['database_port'];
} else {
$params['db_port'] = '';
}
//echo '<pre>' . print_r($markers, 1) . '</pre>';
//echo '<pre>' . print_r($params, 1) . '</pre>';
//echo '<pre>' . print_r($_SERVER, 1) . '</pre>';
$thisfile = file_get_contents(__FILE__);
foreach ($markers as $path => $marker) {
preg_match("#.+-----{$marker}-----[\r\n\s]*(.+)[\r\n\s]*-----{$marker}-----.+#sm", $thisfile, $matches);
$file = $matches[1];
foreach ($params as $key=>$value) {
$file = str_replace("{%{$key}%}", $value, $file);
}
file_put_contents($path, $file);
}
// чистим папку кеша
function RDir( $path ) {
if ( file_exists( $path ) AND is_dir( $path ) ) {
$dir = opendir($path);
while ( false !== ( $element = readdir( $dir ) ) ) {
if ( $element != '.' AND $element != '..' ) {
$tmp = $path . '/' . $element;
if ( is_dir( $tmp ) ) {
RDir( $tmp );
} else {
unlink( $tmp );
}
}
}
closedir($dir);
if ( file_exists( $path ) ) {
rmdir( $path );
}
}
}
RDir( $params['core_path'] . 'cache/' );
echo '<a href="/">' . $_SERVER['HTTP_HOST'] . '</a> ';
$mysqli = new mysqli($params['database_server'], $params['database_user'], $params['database_password'], $params['dbase'], $params['database_port'] );
if (mysqli_connect_errno()) {
printf('Connect failed: %s\n', mysqli_connect_error());
} else {
echo 'cоединение с БД установлено! ';
}
echo "\r\n";
/* Шаблон файлов config.core.php лежащих в корне, manager и connectors
-----config-----
<?php
define('MODX_CORE_PATH', '{%core_path%}');
define('MODX_CONFIG_KEY', 'config');
?>
-----config----- */
/* Шаблон файла core.config.inc
-----core_config-----
<?php
$database_type = 'mysql';
$database_server = '{%database_server%}{%db_port%}';
$database_user = '{%database_user%}';
$database_password = '{%database_password%}';
$database_connection_charset = 'utf8';
$dbase = '{%dbase%}';
$table_prefix = '{%table_prefix%}';
$database_dsn = 'mysql:host={%database_server%}{%db_port%};dbname={%dbase%};charset=utf8';
$config_options = array (
);
$driver_options = array (
);
$lastInstallTime = 1571553474;
$site_id = 'modx5dac00c2023563.39300708';
$site_sessionname = 'SN5bf2a43920e0f';
$https_port = '443';
$uuid = '2ddc828e-9ca5-401b-9cb9-f5883e2fd6ff';
if (!defined('MODX_CORE_PATH')) {
$modx_core_path= '{%core_path%}';
define('MODX_CORE_PATH', $modx_core_path);
}
if (!defined('MODX_PROCESSORS_PATH')) {
$modx_processors_path= '{%processors_path%}';
define('MODX_PROCESSORS_PATH', $modx_processors_path);
}
if (!defined('MODX_CONNECTORS_PATH')) {
$modx_connectors_path= '{%connectors_path%}';
$modx_connectors_url= '{%connectors_url%}';
define('MODX_CONNECTORS_PATH', $modx_connectors_path);
define('MODX_CONNECTORS_URL', $modx_connectors_url);
}
if (!defined('MODX_MANAGER_PATH')) {
$modx_manager_path= '{%manager_path%}';
$modx_manager_url= '{%manager_url%}';
define('MODX_MANAGER_PATH', $modx_manager_path);
define('MODX_MANAGER_URL', $modx_manager_url);
}
if (!defined('MODX_BASE_PATH')) {
$modx_base_path= '{%base_path%}';
$modx_base_url= '{%base_url%}';
define('MODX_BASE_PATH', $modx_base_path);
define('MODX_BASE_URL', $modx_base_url);
}
if(defined('PHP_SAPI') && (PHP_SAPI == "cli" || PHP_SAPI == "embed")) {
$isSecureRequest = false;
} else {
$isSecureRequest = ((isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') || $_SERVER['SERVER_PORT'] == $https_port);
}
if (!defined('MODX_URL_SCHEME')) {
$url_scheme= $isSecureRequest ? 'https://' : 'http://';
define('MODX_URL_SCHEME', $url_scheme);
}
if (!defined('MODX_HTTP_HOST')) {
if(defined('PHP_SAPI') && (PHP_SAPI == "cli" || PHP_SAPI == "embed")) {
$http_host='{%host%}';
define('MODX_HTTP_HOST', $http_host);
} else {
$http_host= array_key_exists('HTTP_HOST', $_SERVER) ? htmlspecialchars($_SERVER['HTTP_HOST'], ENT_QUOTES) : '{%host%}';
if ($_SERVER['SERVER_PORT'] != 80) {
$http_host= str_replace(':' . $_SERVER['SERVER_PORT'], '', $http_host); // remove port from HTTP_HOST
}
$http_host .= ($_SERVER['SERVER_PORT'] == 80 || $isSecureRequest) ? '' : ':' . $_SERVER['SERVER_PORT'];
define('MODX_HTTP_HOST', $http_host);
}
}
if (!defined('MODX_SITE_URL')) {
$site_url= $url_scheme . $http_host . MODX_BASE_URL;
define('MODX_SITE_URL', $site_url);
}
if (!defined('MODX_ASSETS_PATH')) {
$modx_assets_path= '{%assets_path%}';
$modx_assets_url= '{%assets_url%}';
define('MODX_ASSETS_PATH', $modx_assets_path);
define('MODX_ASSETS_URL', $modx_assets_url);
}
if (!defined('MODX_LOG_LEVEL_FATAL')) {
define('MODX_LOG_LEVEL_FATAL', 0);
define('MODX_LOG_LEVEL_ERROR', 1);
define('MODX_LOG_LEVEL_WARN', 2);
define('MODX_LOG_LEVEL_INFO', 3);
define('MODX_LOG_LEVEL_DEBUG', 4);
}
-----core_config-----*/ Комментарии: 17
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
забыл дописать 'cache/', запускаю скрипт… И тут на моих глазах все папки в core по очереди куда-то исчезают, а там лежит 80% работы. Всё на файлах было)) Сразу не понял, а потом когда дошло, спохватился, но было поздно… У меня аж адреналин подскочил как в момент опасности. Я уже трясущимися руками метаюсь в корзину, но… там ничего, оно и понятно, ведь папки удалил скрипт работающий в linux (подсистема винды), а не сама винда. Одна часть меня говорит: да ладно, быть такого не может, чтобы нельзя было обратно вернуть. А другая понимает, что так оно и есть)) И резервных копий нет, точнее есть одна, но слишком старая. И тут я начинаю представлять, что меня ждёт впереди: недели 2+ интенсивной работы за бесплатно, объяснения с заказчиком, а того будет трясти клиент… Ну думаю писец, попал… первый раз такой косяк. А потом вспоминаю, что в шторме была история файлов. Я ей не пользовался никогда, даже толком и не знал возможности. Немного поковырявшись, восстановил полностью весь сайт на момент до этого косяка. Шторм спас меня))
Выводы: делать резервные копии регулярно, пользоваться гитом, не работать сверх меры, phpStorm — лучшая прога, а VSCode и тому подобные редакторы, это просто удобные редакторы.
Спасибо за скрипт, думаю оч облегчит работу по переносу!