Доброго времени суток.
С помощью php требуется записать в mysql некие данные. Задание простое, но...
Придётся начать с момента, до того, как данные будут отданы в php:
В ActionScript
некая array (JSON.stringify) будет записана в ByteArray, затем она будет сжата с помощью алгоритма ZLIB, затем превращена с помощью Base64 в данные, кодированные способом MIME base64. После этого будут переданы в качестве значения одной из переменных POST запроса.
В php я получаю данные, кодированные способом MIME base64:
$smth = $_POST['smth'];
Вопрос №1:Возможно ли $smth сразу передать в mysql? Как я понимаю это string и в поле типа text отлично впишется.
К сожалению, $smth совершенно не читабельна.
Поэтому придётся проделать вышеуказанные шаги в обратном порядке, но уже в php. Тут я теряюсь и прошу вашей помощи.
$compressed_bytes = base64_decode($smth);
$uncompressed_bytes = gzdecode($compressed_bytes);
$string = implode('', array_map('chr', $uncompressed_bytes));
Завершаю всё это передачей $string в mysql, которая теперь должна быть "
некой array (JSON.stringify)".
Вопрос №2:Что здесь не так, и как это исправить?
Буду благодарен за любую помощь.
т.е нужно декодировать обратно(зачем? Че бы так и не записать?) и сохранить в бд?
Что здесь не так
Это не к нам, а к вам вопрос.
_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."
Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. ©
AllesKlar
Чтобы было понятнее:
Сейчас всё работает по сокращённому способу:
В ActionScript некая array (JSON.stringify) передаётся в качестве значения одной из переменных POST запроса и из php сразу передаётся в mysql.
НО с недавних пор некая array стала занимать слишком большой размер, её придётся сжать. Сжать с помощью ZLIB, значит записать в byteArray, а потом переделать с помощью base64. Значит на сервер она придёт не как читабельная string, а как набор закорючек. Я бы рад её так и записать, но хотелось бы её в mysql читать как текст, и иногда вручную править.
-----------
Я прочитал, что нижеуказанное не работает должным образом и может байты превратить в не те символы.
implode('', array_map('chr', $bytes));
vagrand
10.10.2014 - 08:15
XELAD
А почему бы не увеличить размер поля в MySQL? Если же строка ну очень большая, например от 1мб, то можно и в файлец сохранить.
_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
killer8080
10.10.2014 - 10:28
Цитата (XELAD @ 9.10.2014 - 19:53) |
$uncompressed_bytes = gzdecode($compressed_bytes); $string = implode('', array_map('chr', $uncompressed_bytes)); |
тут ошибка, gzdecode возвращает строку, а не массив, плюс chr не подойдёт, если данные в юникоде.
да и сама логика передачи данных настораживает, сначала данные сжимаются, а потом кодируются в base64
Цитата |
А почему бы не увеличить размер поля в MySQL |
Вопрос не в том, чтобы записать огромное что-либо в mysql, а в сжатии данных при отправке. Сжать array или string в ActionScript нельзя, только byteArray. Отсюда все танцы.
Мой пример кода для php был написан на коленке, с этими методами никогда не работал, поэтому попросил помощи.
Значит $uncompressed_bytes это string of UTFbytes. Вопрос в том, как байты превратить в символы?
Цитата |
сначала данные сжимаются, а потом кодируются в base64 |
А как вы предлагаете передать набор байтов в php скрипт? Ведь в таком виде лишь одна переменная.
killer8080
10.10.2014 - 13:51
Цитата (XELAD @ 10.10.2014 - 11:13) |
Значит $uncompressed_bytes это string of UTFbytes. Вопрос в том, как байты превратить в символы? |
а если вывести эту строку? var_dump() что показывает?
Цитата (XELAD @ 10.10.2014 - 11:13) |
А как вы предлагаете передать набор байтов в php скрипт? Ведь в таком виде лишь одна переменная. |
я не силен в AS3, потому предположил что флеш плеер сам умеет сжимать передаваемые данные, на уровне http, как и браузер?