Перенос Drupal 7 на виртуальный хостинг. Нашла коса на камень.

Опубликовано Опубликовано в рубрике Drupal, Easy Patch

Drupal готовится к выпуску уже восьмой версии, а крупные хостеры до сих пор не полностью готовы даже к полноценной установке 7 версии популярной CMS. Как бороться с fatal errors при установке? Об этом чуть ниже!

Рассмотрим установку CMS Drupal v.7 на примере хостинга RuCenter.

Итак, проблем с импортом дампа БД быть не должно. Веселье начнётся после переноса файлов и установки настроек подключения к БД в файлике settings.php.

Для начала браузер вывалится в ошибку

Fatal error: Call to undefined function hash() in bootstrap.inc

Её фатальность в отключенном модуле hash() интерпретатора PHP со стороны хостера. Хотя и в пакетах, начиная с версии 5.2.0, эта функция идёт «из коробки», на пресловутом RuCenter придётся его включить. Благо, в тамошней панели управления есть соответствующие настройки, а само включение производится простановкой галочки.

И вот, пользователь, облегчённо вздохнув, жмёт F5, на что браузер валится в другую сторону с ловкостью заправского пьяницы, выдавая

Fatal error: Class ‘PDO’ not found in /home/…/public_html/drupal/includes/database/database.inc on line 184

Далее следует нецензурный отзыв серверу со стороны пользователя.

Действуем следующим образом. Всё там же в настройках подключаем модули php_pdo и php_pdo_mysql.

При последующих попытках изменить начальные данные о сайте система вылетит с ошибкой

Call to undefined function filter_var()

А потому сразу же включаем модуль filter!

Но и на этом все беды не кончаются. Как выясняется дальше, обработка форматов JSON тоже устарела! Тут могли бы следовать разбитые мониторы, но можно обойтись без них.

Найдём файлик includes/common.inc

В нём после вхождения маркера php-кода вставим

if (!function_exists('json_encode')) {  
    function json_encode($value) 
    {
        if (is_int($value)) {
            return (string)$value;   
        } elseif (is_string($value)) {
            $value = str_replace(array('\\', '/', '"', "\r", "\n", "\b", "\f", "\t"), 
                                 array('\\\\', '\/', '\"', '\r', '\n', '\b', '\f', '\t'), $value);
            $convmap = array(0x80, 0xFFFF, 0, 0xFFFF);
            $result = "";
            for ($i = mb_strlen($value) - 1; $i >= 0; $i--) {
                $mb_char = mb_substr($value, $i, 1);
                if (mb_ereg("&#(\\d+);", mb_encode_numericentity($mb_char, $convmap, "UTF-8"), $match)) {
                    $result = sprintf("\\u%04x", $match[1]) . $result;
                } else {
                    $result = $mb_char . $result;
                }
            }
            return '"' . $result . '"';                
        } elseif (is_float($value)) {
            return str_replace(",", ".", $value);         
        } elseif (is_null($value)) {
            return 'null';
        } elseif (is_bool($value)) {
            return $value ? 'true' : 'false';
        } elseif (is_array($value)) {
            $with_keys = false;
            $n = count($value);
            for ($i = 0, reset($value); $i < $n; $i++, next($value)) {
                        if (key($value) !== $i) {
                  $with_keys = true;
                  break;
                        }
            }
        } elseif (is_object($value)) {
            $with_keys = true;
        } else {
            return '';
        }
        $result = array();
        if ($with_keys) {
            foreach ($value as $key => $v) {
                $result[] = json_encode((string)$key) . ':' . json_encode($v);    
            }
            return '{' . implode(',', $result) . '}';                
        } else {
            foreach ($value as $key => $v) {
                $result[] = json_encode($v);    
            }
            return '[' . implode(',', $result) . ']';
        }
    } 
}

Всё! На этом мучения наконец-то заканчиваются, и измученный пользователь наконец-то может поработать не с настройками хостинга, а со своим детищем!

Безошибочного кода Вам!

Перенос Drupal 7 на виртуальный хостинг. Нашла коса на камень.: 2 комментария

Добавить комментарий для Александр Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *