Régen írtam már "napi szívás" címkéjű posztot, pedig alkalom lett volna rá... igaz, hogy kicsit offtopic, de a legutóbbi szívás annyi időmet elvette, hogy mégiscsak megér egy bejegyzést.
Történet ott kezdődött, hogy az egyik honlapon egyes szolgáltatások eléréséhez fizetni kell, legkézenfekvőbb megoldás az országos bankunk bankkártyás átutalása bizonyult.
Maga a telepítés is már megért volna egy posztot. Sosem voltam igazán rendszergazdai vénákkal megáldva, így amikor láttam, hogy kapok tőlük egy setup.exe –t, amivel klikkelgetéssel átkonfigurálhatom a PHP-met, akkor bátran elindítottam. Először furcsáltam, hogy megkérdezi a php.ini helyét. Merthát, a franc érti, hogy miért, de a Window mappába van, hol máshol? :) Ám a setup.exe nem volt rest, és az Apache konfigot jól átszabta, mondván, hogy a PHP is a Window mappába van... bazz... mivel átírt konfig fájlról készített mentést, így nem volt akkora probléma.
Valójában, semmi másról nem szólt ez a telepítés, minthogy a PHP-hez hozzá kellett adni az OpenSSL, illetve SOAP modult, azaz kettő darab kommentet ki kellett venni a php.ini-ből. Ja, azt azért nem annyira ellenőrizte, hogy az OpenSSL biztos fog-e működni, merthogy az sem annyira egyértelmű. Némi Google, majd két fájl átmásolása egyik könyvtárból a másikba és már nincs is gond. :)
(félreértés elkerülése végett, csak a saját gépemen használok ilyen operációs rendszert, az éles rendszer valami unix-os cuccon fut)
De, hogy ne csak negatív megjegyzést kapjon kedvenc bankunk, nagyon korrekt mintakódokat adtak, bőséges kommenttel. Szinte elsőre elindult a banki kapcsolat.
A probléma akkor lépett fel, amikor az ügyfél a banki átutalás közben a vissza gomb megnyomásával újra akarta tölteni a saját oldalát. Az első reakció, illetve a visszajelzés felém az volt, hogy az Apache meghalt… egy vissza gomb miatt…
Persze a minta kódnál nem volt ilyen probléma, ott lehetett használni a vissza gombot… majd jött a közel három éjszakámat betöltő kutatás, vajon mi a franc különbség van a két kód között? Az átdobó oldalt én GET-tel hívtam meg, míg a mintakód POST-tal, a keretrendszernek köszönhetően bővebb fejléc adatokat használtam.… némi átalakítással a két oldal pontosan ugyanolyan fejléccel mentek. Ám a problémán ez semmit sem változott. Az ügyfél hibajelzése némileg pontatlan volt, mert az Apache végülis nem halt meg, csupán a böngészője nem kapott semmiféle választ. Böngésző kikapcs, bekapcs után sem. És az csak a probléma mellékhatása volt, hogy az Apache újraindítása után megjavult a helyzet. (bár ennyiből már sejteni lehetett volna, hogy mi a gond, de... :)
Kínomban elkezdtem kikapcsolna a rendszerből részeket, és láss csodát a session kikapcsolása után megjavult a helyzet. A mintakód persze nem használt session-t, így mint kiderült az összes átalakítás teljesen felesleges volt, mert a küldéshez semmi köze nem volt a problémának. Majd némi utánajárással a következő diagnózis született: A banki kapcsolat elindult, megállította a szállat, a böngészőhöz tartozó session fájl meg továbbra is lockolva maradt. Az örömteli megoldást így aztán a session_write_close függvény kiadása adta a banki kapcsolódás előtt...