Most futottam bele, gyorsan lejegyzem…

File feltöltéshez építettem be egy JQuery-s flash betétet (Uploadify). A feltöltött kép neve megváltozik, mivel a PHP végrehajt egy string konverziót, hogy a file neve ne tartalmazhasson csúnya – de inkább káros – karaktereket. Azt gondoltam, hogy session-be mentem a végleges file-nevet, és visszatéréskor így tudni fogok róla. De jött egy pici meglepetés…

Egyébként az Uploadify nagyon jól paraméterezhető, és kellően sok eseménnyel van felvértezve, hogy mindent megoldjunk vele. Egyetlen problémám az volt, hogy az onAllComplete metódus csak arról a file-névről tud, amit elindított feltöltésre. Ha abban olyan karakter van, amit szeretnénk módosítani, vagy netán új nevet kap a file, és erről szeretnénk tudni, azt kicsit problémásabb megoldani.

Nálam konkrétan azért kellene, mert a feltöltés után rögtön ajax hívással betöltöm a feltöltött képet. Arra gondoltam, úgy valósítom meg a végleges név átvitelét, hogy a feltöltés fázisában session-be teszem, majd a betöltésnél ezt kiolvasom.Ez valahogy nem sikerült. A szerveren megnéztem a session-fileokat, és akkor láttam, hogy két, teljesen különböző session-öm jön létre a feltöltés során. Mi történt?

Rögtön rájöttem, miután korábban már figyeltem az apache access és error logjait is. Ott feltűnt, hogy a flash feltöltő „Shockwave Flash” useragent néven fut, míg a Firefoxom nem igazán. Mivel a PHP más böngészőnek érzékeli, másik sessiont nyit neki, és oda kerül be a file végleges neve. Aztán a betöltéskor már a Firefox hívja a file-t, így az már a másik, eredetileg megnyitott sessiont éri el.

Természetesen van megoldás, egyrészt megnézem, hogyan lehet belerakni a visszatérési értékekbe a módosított nevet, de ha ez nem megy, akkor cookie alapon is le lehet kezelni. Sőt lenne még egy sor más megoldás is (txtfile, mysql tábla), de azért jó lenne a legtisztább, legoptimálisabb megoldást megtalálni erre a pici műveletre.

Update:

Az onComplete metódusnál, ami egy-egy file feltöltése után következik be, a response változó tartalmazza az adatot, amit a feltöltő script visszaad, tehát ott csak pl. egy echo $ujfilenev kell, és már meg is van.

Mindezt főleg azért írtam le, hogy ha más is találkozik ilyesmivel, akkor könnyebb legyen kideríteni a problémát, hiszen sok mindent debugolni nem lehet rajta, hibaüzenet nincs, csak nem jön a várt érték.

Ez mindenhol előfordulhat, ahol session-használat keveredik egy más useragent nevet használó beépülővel.

(Ha valamiben tévednék, és nem jól, nem pontosan fogalmaztam, szívesen veszem a kijavításokat.)

0.00 avg. rating (0% score) - 0 votes

Leave a comment

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük