serialization drama
4 отговора
201 прегледа
serialization drama
здравейте,
сериализирам си значи едни обектчета във файлове. обектите всички са от един клас, слагам ги по един във файл. всичко е прекрасно докато в единия от обектите не се появи низ със символи за край на ред в него.
в този случай сериализацията минава успешно, но функцията unserialize(), която трябва да ми възстанови обекта от текстовото му представяне във файла се озъбва с мистична грешка - казва, че файла е "корумпиран" някъде около края - най-често 139тия от 140ина символа.
засега заобиколих проблема, като прекарвам низа, който може да съдържа нови редове през base64 кодиране при запис и декодиране при четене. работи, но искам да знам, защо предишната версия не работеше. никъде не намерих из текстовете за сериализация на пхп обекти дето имам някакво споменаване за нови редове и други специални символи.
мерси предварително
ein heller Schein am Firmament
сериализирам си значи едни обектчета във файлове. обектите всички са от един клас, слагам ги по един във файл. всичко е прекрасно докато в единия от обектите не се появи низ със символи за край на ред в него.
в този случай сериализацията минава успешно, но функцията unserialize(), която трябва да ми възстанови обекта от текстовото му представяне във файла се озъбва с мистична грешка - казва, че файла е "корумпиран" някъде около края - най-често 139тия от 140ина символа.
засега заобиколих проблема, като прекарвам низа, който може да съдържа нови редове през base64 кодиране при запис и декодиране при четене. работи, но искам да знам, защо предишната версия не работеше. никъде не намерих из текстовете за сериализация на пхп обекти дето имам някакво споменаване за нови редове и други специални символи.
мерси предварително
ein heller Schein am Firmament
Re: serialization drama
коя версия PHP ползваш?
да не хитваш бъг?
post-ни пример с кода си ...
иначе с base64_encode е добре, даже може да ползваш gz_compress
да не хитваш бъг?
post-ни пример с кода си ...
иначе с base64_encode е добре, даже може да ползваш gz_compress
Re: serialization drama
В последната версия на PHP има bugfix точно на функциите за сериализиране, като преди да я оправят е имало дълга дискусия какъв е точно проблема. Може да си попаднал на нещо такова
-----------------------------------------------------
Има - няма, ние сме длъжни да проверим
-----------------------------------------------------
Има - няма, ние сме длъжни да проверим
Re: serialization drama
кода е почти 1:1 с примера от мануала - давам примера от мануала, който взех от цхм версията на [линк]
сега като се замисля, може и да е нещо от четенето на низа от файла преди десериализацията. средата е: пхп 4.3.1 на уиндоус 2000 ( уиндоуса е някаква неофициална версия отпреди финалната ( не ме питайте защо и какво - не съм я инсталирал аз и не мислех, че ще пречи ) )
ще го замъкна тия дни в офиса да го пробвам на линукс
те тва е
ein heller Schein am Firmament
сега като се замисля, може и да е нещо от четенето на низа от файла преди десериализацията. средата е: пхп 4.3.1 на уиндоус 2000 ( уиндоуса е някаква неофициална версия отпреди финалната ( не ме питайте защо и какво - не съм я инсталирал аз и не мислех, че ще пречи ) )
ще го замъкна тия дни в офиса да го пробвам на линукс
<?php
// classa.inc:
class A
{
var $one = 1;
function show_one()
{
echo $this->one;
}
}
// page1.php:
include("classa.inc");
$a = new A;
$s = serialize($a);
// store $s somewhere where page2.php can find it.
$fp = fopen("store", "w");
fputs($fp, $s);
fclose($fp);
// page2.php:
// this is needed for the unserialize to work properly.
include("classa.inc");
$s = implode("", @file("store"));
//тук унсериализе ми казва лошите неща
$a = unserialize($s);
// now use the function show_one() of the $a object.
$a->show_one();
?>
те тва е
ein heller Schein am Firmament
Re: serialization drama
в такъв случай явно проблемът не е в тебе
пробвах го набързо под моя линукс и нямаше никакви проблеми
единственото, което можеш да направиш е да видиш точното съобщение за грешка и да потърсиш в bugs.php.net
пробвах го набързо под моя линукс и нямаше никакви проблеми
единственото, което можеш да направиш е да видиш точното съобщение за грешка и да потърсиш в bugs.php.net