Перед отправкой в ​​PHP заархивируйте объект JSON - PullRequest
6 голосов
/ 25 июня 2011

Я заинтересован в заархивировании текстового вывода из объекта JSON на сервере перед передачей его на мое мобильное устройство, которое запросило объект. Небольшое тестирование TXT-архивирования уменьшит его размер примерно на 80%! Это отлично подходит для мобильных устройств! :)

Мне вообще не нужно сохранять zip-файл, который я создаю, на сервере, просто храните его в памяти, а затем выводите его. Я могу разархивировать его на стороне Android без проблем.

В любом случае, я сделал небольшую манипуляцию, но я не смог придумать ничего, что работает, вот что у меня есть до сих пор:

while($e=mysql_fetch_assoc($q))
   $output[]=$e;
$zip = new ZipArchive();
$zip->addFromString("test",(json_encode($output)));
echo $zip;

Я знаю, что я, вероятно, делаю что-то неправильно, я не очень знаком с php. Мой $ q - это курсор, содержащий много строк sql, и если я использую print(json_encode($output)); вместо всех почтовых махинаций, он отлично работает для вывода необработанного текста.

Полагаю, это не должно быть сжатие zip, но любое сжатие было бы полезно, если бы вы указали мне правильное направление, я, вероятно, смогу это выяснить. Спасибо!

Ответы [ 2 ]

9 голосов
/ 25 июня 2011

вы можете использовать ob_start с ob_gzhandler:

if(function_exists('ob_gzhandler')) ob_start('ob_gzhandler');
else ob_start();

echo json_encode($output);
ob_end_flush();
0 голосов
/ 31 января 2016

Сторона сервера: создайте объект JSON, который содержит только свойство, являющееся байтовым массивом, который является объектом JSON, заархивирован и отправьте его клиенту.Сторона клиента: разархивируйте байтовый массив, содержащийся в объекте, чтобы получить исходные данные JSON.Pro: 5X Самая быстрая связь Сервер-Клиент, меньше операций ввода-вывода для Сервера.Требуется больше работы процессора от сервера.Обратите внимание: P

...