Мобильный блоггинг для чайников

Главная » Научись » Вопросы хостинга » Как избавиться от ошибки — Call to undefined function json_encode () — в WordPress 3.2

Как избавиться от ошибки — Call to undefined function json_encode () — в WordPress 3.2

Как создать прибыльный блог? 2.0
wp_468_60

На днях WordPress обновился до версии 3.2

Хорошее обновление, быстродействие движка увеличилось и пр. пр., но лично меня, при попытке создать новую запись в обновленной админке, подкараулила вот такая неприятность.

1
Fatal error: Call to undefined function json_encode() in /var/www/includes/class-wp-list-table.php on line 905

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

В чем проблема?

Проблема в функции PHP — json_encode (). Она является дополнением и потому не все хостеры включают ее в сборку для своих серверов.

Решение

Всего-то нужно добавить в WordPress собственный обработчик этой функции.

Делается это элементарно:

1. Копируем этот код в буфер обмена (выделяем, жмем правой кнопкой мыши, в выпавшем меню выбираем «Копировать»).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/* ===================== Костыли для json ============================ */

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) . ']';
        }
    }
}

/* ===================== костыли для json ============================ */


2. Заходим на ваш сайт с помощью любого FTP клиента, заходим в папку wp-admin, а в ней в папку includes. Выкачиваем оттуда файл class-wp-list-table.php

Скачайте в 2 разных места. Один будем редактировать, а второй оставим про запас на всякий случай.

3. Открываем файл (который сохранили для редактирования) в тестовом редакторе. Редактор нужен типа Programmer's Notepad. Придется скачивать и устанавливать если нет ничего наподобие. Ворды и блокноты — решительно не подходят.

4. Находим в открывшемся файле находим такой тэг

1
 <?php

Встаем в начало следующей за ним строки и жмем 3 раза Enter.

Теперь ставим курсор между вышеописанным тэгом и остальным текстом и кликаем по нему правой кнопкой мыши. В открывшемся выпадающем меню жмем «Вставить». Когда наша заплатка вставлена — можно сохранять файл и заливать обратно.

5. Когда файл закачан, заходим в админку WordPress'а и пытаемся создать новую запись.
На моем хостинге после этих действий все заработало, как надо.

Если все заработало и у вас — идем на сайт, откуда был взят код «костылей» и пишем его автору (Alexmuz) большущее спасибо за статью Реализация json_encode на PHP – русский язык UTF-8.

PS Я тоже не буду против благодарности)))

А с вами был Лексиум.
Всего вам доброго.

Поделиться в соц. сетях

Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Google Buzz
Опубликовать в Google Plus

Похожие записи:


Получите все свежие посты по электронной почте!

   Введите ваш e-mail:    

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


2 комментария к “Как избавиться от ошибки — Call to undefined function json_encode () — в WordPress 3.2”

 
John
Ответ написан 29 августа 2011 · грАватар

Применил Ваш костыль для другого движка. Сразу заработала регистрация на сайте. А то сутки не мог исправить ошибку. Спасибо за подсказку!

 
Алексей F8
Ответ написан 29 августа 2011 · грАватар

Всегда пожалуйста))

RSS-подписка на комментарии

Написать ответ

Главная » Научись » Вопросы хостинга » Как избавиться от ошибки — Call to undefined function json_encode () — в WordPress 3.2
© Мобильный блоггинг для чайников - Lexium.RU
Это не просто способ публикации, это стиль жизни.
Подписка на записи сайта

Введите ваш e-mail:




Подписка на рассылку сайта

RSS     Фидбарнер     E-Mail     Twitter     Добавить в акладки

Поиск по сайту

Поиск по сайту


Связь с администратором

Связаться с администратором можно: Admin of Lexium.ru

через раздел "Контакты",
с помощью ICQ: 80-30-42
или через Мой статус Skype: lexium.ru

Навигация
Услуги
Разрабатываю сайты, прикручиваю к ним разные «приблуды», программирую, пишу тексты, рисую, обрабатываю изображения, консультирую,
«web-мастерю» - одним словом.

Подробнее об услугах >>>

Моё портфолио >>>

Введите свой e-mail: