Проблемы с serialize-unserialize
1649 повідомлень
#14 років тому
Tkachenko, уже определил что проблема в переносах строк. Из за этого срывается и работа unserialize.
65 повідомлень
#14 років тому
Цитата ("oren"):Str_replace(
array("\r", "\n"),
array('', '#'),
$_POST
)
Верно, но потом в случае с \n\n\r будет ##, думаю должен быть один.
WebDesignStudio, или без разницы?
1649 повідомлень
#14 років тому
oren, мне кажется не пойдет. Мне нужно между строками добавить. А так получится вместо всех \r \n по одному #. Хотя, можно это в массим загнуть через explode и поудалять пустые строчки. Думаю универсальный способ. 
326 повідомлень
#14 років тому
Ну это-ж простейшие строковые функции, я думаю WebDesignStudio сам разберётся :-)Удалить двойные \n preg_replace-ом, с помощью регулярки /{2,}/
И, возвращаясь, к первой проблеме, - переводы строк нормально обрабатываются: сериализуются, рассериализовываются...
3240 повідомлень
#14 років тому
Я не люблю использовать serialize/unserialize для сериализации массивов, слишком уж много недостатков, в том числе проблемы с переносами строк, с UTF-8, и т.д.Вместо этого использую json_encode/json_decode, тем более что функция json_encode работает значительно быстрее чем serialize, и не говоря уже о том, что в случае с JSON сериализованные данные занимают меньше места.
1649 повідомлень
#14 років тому
tvv, надо попробовать наверное. Но так я нашел один баг в своей системе. Неправильно делалась разбивка по строкам. 
326 повідомлень
#14 років тому
Цитата ("tvv"):тем более что функция json_encode работает значительно быстрее чем serialize
Сам я это не проверял, но вот только что на хабре читал, что измеряли, и serialize получался всегда быстрее.
Цитата ("WebDesignStudio"):
Мне нужно между строками добавить
Ну так ничто не мешает заменять \n на "\n*\n"
1649 повідомлень
#14 років тому
Вот, может кому еще пригодится:
function explode_lines($text){//функция разбивает текст на строки и возвращает результат в виде массива
$text = str_replace(array("\r", "\n"), array('', '#'), $text);
$list = explode("#", $text);
foreach($list as $k=>$v){
$v=trim($v);
if(empty($v))
unset($list);
}
return $list;
}
3240 повідомлень
#14 років тому
Цитата ("oren"):Сам я это не проверял, но вот только что на хабре читал, что измеряли, и serialize получался всегда быстрее.
Можете ли дать ссылку на эту статью?
Вероятно, Вы смотрели эту: посилання
Я угадал? Разбирался я с ней года 3 назад, даже отписался там в комментах...
Далее, мне знакомо несколько статей на хабре на данную тему, с разными способами измерения, то есть на разных наборах данных. В большинстве случаев JSON побеждает. Пожалуйста, смотрите: посилання
3240 повідомлень
3240 повідомлень
#14 років тому
Цитата ("WebDesignStudio"):tvv, уже нет. Щас еще посмотрю если работает.
Все еще да.
После for (...), видимо, не проставлены фигурные скобки, и только лишь $v=trim($v); выполняется в цикле... Это же PHP, а не Python...
65 повідомлень
3240 повідомлень
#14 років тому
Цитата ("oren"):Сам я это не проверял, но вот только что на хабре читал, что измеряли, и serialize получался всегда быстрее.
Вероятно, Вы имели в виду, что unserialize выполняется на несколько процентов быстрее. Это да, с этим никто не спорит. Но это не относится к функции serialize, которая работает быстрее только в редких случаях (на очень больших строках с латинскими буквами), а обычно существенно медленнее, иногда даже в разы медленнее.
В общем, попробуйте сами сделать замеры, мне например в свое время было интересно. Кстати, также интересно, как в последних версиях PHP с этим...
3240 повідомлень
#14 років тому
Цитата ("Tkachenko"):Судя по этой статье посилання unserialize еще медленней чем json_decode
Да ну, там в общем случае примерно сопоставимые цифры. На одних наборах данных unserialize немного быстрее, на других — json_decode немного быстрее. А пример в статье не особо часто распространенный (объемы данных большие), хотя знать об этом еще одном недостатке unsrialize необходимо.
А вот в случае serialize vs json_encode разница уже весьма существенна даже на относительно небольших наборах данных.
11416 повідомлень
#14 років тому
Я тоже всегда в таких случаях использую json, очень удобно. А про serialize если честно вообще впервые сейчас узнал 
1599 повідомлень
#14 років тому
oren, что, форум одни кавычки заменил, а другие оставил? У вас отличное мышление! Кстати, если вы заметили, проблема была именно с кавычками и экранированием.П.С. Поверьте, я хоть и маленький, но уже научился использовать редакторы кода, чтобы заметить переносы в строке.