Я очень новичок в PHP, но теперь я должен помочь своему другу решить проблему с PHP.
Он купил веб-сайт на основе PHP, после того как он загрузил его на хост, обнаружил, что есть ошибка:
Fatal error: Call to undefined function json_encode() in xxx.php
Код очень прост:
echo json_encode(array( 'result' => true, ));
Он отправляет json клиенту.
Я знаю, что json_encode
добавляется после php 5.2, но PHP-версия его хоста – это PHP 5.1.2, поэтому именно поэтому он сообщает об ошибке.
Но мы не имеем права обновлять PHP-версию хоста, поэтому мне нужно изменить код. Как вернуть Json клиенту без json_encode
?
Веб-страница в браузере клиента запустит этот код javascript, чтобы получить и проверить, что json:
jQuery.ajax({ 'url': '...', ..., 'success':function(json) { if(json != null && json.result == true) { // do something } } }
Большое спасибо!
ОБНОВИТЬ
Поскольку у меня нет прав на обновление или установка новых библиотек на этот хост, единственное, что я могу сделать, это изменить код. Но я почти ничего не знаю о php, что я не знаю, как использовать сторонние библиотеки. Наконец, я исправлю это так:
В php:
echo '{"result":"true"}';
В javascript:
if(json!=null && json.result=="true") { // do something }
Прежде всего: вы должны серьезно рассмотреть возможность обновления, поскольку PHP 5.1.x и 5.2.x больше не поддерживаются. Вы указали, что у вас нет прав на это, но если вы платный клиент, это должно рассчитывать на что-то. PHP 5.2 устарел с последней версии PHP 5.3.6 .
Пользователь на PHP.net предоставил настраиваемую функцию, которая делает то же самое. Вы можете переименовать его в json_decode()
и обернуть его в оператор if (!function_exists('json_encode'))
:
if (!function_exists('json_encode')) { function json_encode() { // do stuff } }
У него старшая версия PHP, где отсутствует json_encode. Это можно исправить с помощью различных сторонних библиотек.
json_encode
/ json_decode
почти идентичный встроенному расширению PHP (причудливый в отношении Unicode). Существует реализация, которую вы можете использовать в комментариях к документам PHP для json_encode
.
Вы можете использовать стороннюю библиотеку JSON, такую как один из проекта PEAR (они предоставляют всевозможные полезные библиотеки PHP различного качества):
http://pear.php.net/pepr/pepr-proposal-show.php?id=198
Я уверен, что есть еще (я бы попробовал поиск в Google для PHP JSON-библиотек).
Почему бы не использовать обычную json-библиотеку PHP, которую вы можете включить в каждую настройку?
Я искал это здесь для вас.
Прочитайте комментарии для json_encode по адресу http://www.php.net/manual/en/function.json-encode.php, где вы также найдете комментарий, содержащий ручную реализацию для php <5.2: http: //www.php. нетто / ручной / де / function.json-encode.php # 100835
Кроме того, существуют другие реализации, доступные через google.
jsonwrapper реализует функцию json_encode, если она отсутствует, и оставляет ее в покое, если она уже присутствует. Так что это красиво совместимо с будущим.
мне пришлось установить JSON Libs на днях на моем сервере, попробуйте следующее:
Выполните следующие команды:
pecl install json
touch /etc/php.d/json.ini
echo "extension=json.so" > /etc/php.d/json.ini
service httpd restart
Первый установит json-библиотеки на ваш компьютер, вторая строка создаст json.ini fiel в каталоге php.d, а последняя строка добавит extension=json.so
строки extension=json.so
в файл json.ini
.
Надеюсь это поможет!