Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Błąd serializacji, Dwa serwery - różne działanie serializacji...
Walian
post
Post #1





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

Ostrzeżenie: (0%)
-----


Witam.
Zauważyłem coś bardzo dziwnego, na serwerze znajomego (jeden z tych na linuxpl.com) nie działa serializacja...

Plik na którym sprawdzam działanie serializacji:
  1. $form_data['cos'] = 'costam1';
  2. $form_data['cos2'] = 'costam2';
  3. $form_data['cos3'] = 'costam3';
  4. $form_data['cos4'] = 'costam4';
  5. $form_data['cos5'] = 'costam5';
  6. $form_data['cos6'] = 'costam6';
  7. $form_data['cos7'] = 'costam7';
  8. $form_data['cos8'] = 'costam8';
  9.  
  10. $sr = serialize($form_data);
  11. echo 'serialized: "'.$sr.'"'."<br>\n";
  12. $usr = unserialize($sr);
  13.  
  14. print_r($usr);

Bez znaczenia, czy zapiszę go w ANSI czy w UTF-8.

Wersja PHP na serwerze znajomego: 5.2.9.
Wersja PHP u mnie na localhost: 5.3.0.

Wynik uruchomienia pliku na serwerze znajomego:
Kod
serialized: "s:32:"c9dufa4urcvha1d4i845redp94kqrf7p";"
c9dufa4urcvha1d4i845redp94kqrf7p


Wynik uruchomienia pliku u mnie na localhost:
Kod
serialized: "a:8:{s:3:"cos";s:7:"costam1";s:4:"cos2";s:7:"costam2";s:4:"cos3";s:7:"costam3";s:4:"cos4";s:7:"costam4";s:4:"cos5";s:7:"costam5";s:4:"cos6";s:7:"costam6";s:4:"cos7";s:7:"costam7";s:4:"cos8";s:7:"costam8";}"
Array ( [cos] => costam1 [cos2] => costam2 [cos3] => costam3 [cos4] => costam4 [cos5] => costam5 [cos6] => costam6 [cos7] => costam7 [cos8] => costam8 )


Dziwne prawda? Wie ktoś czemu tak się dzieje?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Zainicjuj tablicę przed serializacją i sprawdź, czy dzieje się to samo.
Go to the top of the page
+Quote Post
Walian
post
Post #3





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

Ostrzeżenie: (0%)
-----


No teraz działa. Tylko dlaczego bez inicjalizacji na jednym serwerze działa a na drugim już nie?
Go to the top of the page
+Quote Post
darko
post
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Może na tym serwerze, na którym nie działa jest coś ustawione w konfiguracji php.ini dla unserialize_callback_func ?
Go to the top of the page
+Quote Post
Walian
post
Post #5





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

Ostrzeżenie: (0%)
-----


Sprawdziłem wcześniej wszystkie ustawienia z "serializ" w nazwie - wartości są takie same jak u mnie na localhost, czyli domyślne.
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




O ile pamiętam, to w PHP 5.3 odwołania do znaków stringów przez klamry są oznaczone jako zaniechane i należy stosować nawiasy kwadratowe. W 5.3 dochodzi pewnie do niejawnego rzutowania nieistniejącej zmiennej na string (w przypadku odwoływania przez nawiasy), co powoduje sytuację przez Ciebie opisaną. Jeśli zainicjujesz zmienną jako tablicę, nie dojdzie do rzutowania i zserializowanie nastąpi prawidłowo.

Podejrzewam, że potwierdzeniem mojej tezy będzie wywołanie var_dump na tej zmiennej.
Go to the top of the page
+Quote Post
Walian
post
Post #7





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

Ostrzeżenie: (0%)
-----


var_dump zwracało coś w stylu "string(32):" (nie chce mi się teraz sprawdzać) więc trafiłeś ze swoją teorią, tyle, że opisujesz przypadek wystąpienia tego na PHP 5.3, natomiast ja miałem problem na PHP 5.2.9 (IMG:style_emoticons/default/smile.gif)
Chyba, że to ja Cie źle zrozumiałem.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 13:07