В последней версии php (на 7-10-2014), по моему версия 5.5, напрочь отсутствует такая полезная встроенная функция как json_decode. Потому сайтам, которые используют движок Joomla версии 2,5 и 3.х, на данный момент не рекомендуется переходить на эту версию php. Все дело в том что практически все параметры компонеyтов, модулей, плагинов и прочих настроек joomla хранит именно в этом виде и без поддержки упомянутой выше функции просто не сможет нормально функционировать.
Но что делать если хостер принудительно перевел ваш сайт на сервер с этой версией и ваши сайты перестали работать?
Есть несколько вариантов решения данной проблемы:
1. Если у вас сложный проект или у вас много сайтов, то нужно или срочно менять хостинг или настойчиво попросить администраторов хостинга вернуть ваши сайты на сервер с предшествующей версией php. имеющей в своем дистрибутиве функцию json.
2. Если у вас самописный сайт, или у вас переработанная версия Joomla, то вам, для того чтобы не зависеть от версии php, можно использовать приведенную ниже функцию, которая выполняет те же действия что и json_decode? то есть формирует ассоциативный массив из полученных данных:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function json2array($json){ if(get_magic_quotes_gpc()){ $json = stripslashes($json); } $json = substr($json, 1, -1); $json = str_replace(array(":", "{", "[", "}", "]"), array("=>", "array(", "array(", ")", ")"), $json); @eval("\$json_array = array({$json});"); return $json_array; } |
Закодировать же параметры компонентов joomla обратно можно с помощью вот этого аналога функции json_encode:
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 |
function toJSON($o) { switch (gettype($o)) { case 'NULL': return 'null'; case 'integer': case 'double': return strval($o); case 'string': return '"' . addslashes($o) . '"'; case 'boolean': return $o ? 'true' : 'false'; case 'object': $o = (array) $o; case 'array': $foundKeys = false; foreach ($o as $k => $v) { if (!is_numeric($k)) { $foundKeys = true; break; } } $result = array(); if ($foundKeys) { foreach ($o as $k => $v) { $result []= toJSON($k) . ':' . toJSON($v); } return '{' . implode(',', $result) . '}'; } else { foreach ($o as $k => $v) { $result []= toJSON($v); } return '[' . implode(',', $result) . ']'; } } } |
Свою благодарность автору статьи вы можете выразить просто кликнув в нужном месте на странице 🙂
автор: Руслан Овчинников