Prošle noći sam izgubio 4h na debagovanje i modifikaciju koda koji je bio ispravan, ali nije radio – a ja sam jedva provalio o čemu se radi. Glavni krivac bio je Windows, a šta se desilo, kako sam otkrio o čemu se radi i kako sam problem rešio, saznaćete vrlo brzo 🙂 Naime, razrešenje ove misterije nije išlo gore pomenutim redosledom, pa upravo zato i reših da svoje iskustvo podelim sa ostatkom svet.
Pretprošle noći krenuh u realizaciju jednog mog mini WEB projekta. Kako su pitanju XHTML/CSS + PHP/MySQL tehnologije, krenuo sam sa radom u lokalu. Startovah LAMP pa se bacih na izradu baze i back panel-a. Zaključno sa sistemom za logovanje korisnika, privedoh rad kraju za taj dan (noć zapravo) pa sam sve do tada urađeno okačio na server. Probao sam skriptu i sve do tada implementirano je radilo bez ikakvih problema.
Onda prošle noći reših da malo sredim kod, formatiranje i komentare, pa sam sve ponovo svuk’o u lokal, sredio i vratio online. Jedina razlika bila je što sam ovog puta radio sa WAMP-om na mašini sa Windowsom. Ništa značajno nisam menjao što se koda tiče, ali ipak reših da još jednom proverim da li je sve ok. Kad imam šta i da vidim: na svakom fajlu pucaju neke funkcije (2-3 uproseku). Od svega su se najviše bunile sesije (kreiranje i promena podataka). Tu je krenulo 4h pakla sa istraživanjem šta tačno ne radi i zašto se od jednom buni, a prethodnog dana je radilo.
Probao sam sve i svašta. Čak sam i potpuno promenio sistem za logovanje. Menjao pamćenje nekih stvari u cookie umesto u sesiju i svašta drugo što mi je palo na pamet. No na kraju je ipak negde pucalo. Onda reših da sklonim komentare sa početka fajla, jer sam čitao da neke PHP funkcije moraju biti apsolutno na početku koda (iako su u demo primerima, čak i u dokumentaciji, radile i ako pre njih ima belina ili komentara). Iz web-editora sam otvorio, izmenio i sačuvao svaki fajl ponaosob, posle čega je, na moje zaprepašćenje, sve ponovo proradilo bez ikakvih grešaka. U neverici sam ponovo vratio komentare, kako bih bio siguran da je do toga, no i dalje je sve radilo. Nekoliko minuta sam gledao u kod i češkao se po glavi dok se nisam setio sličnih problema jednog prijatelja. Branku je pucao IE7 prilikom izvršavanja JavaScript-a pisanog na Windows platformi, pa sam pomislio da i ovde CR-LF pravi probleme.
Ovu teoriju sam eksperimentalno dokazao na sledeći način: Prvo sam sve fajlove upload-ovao preko FTP-a (text-modom) gde sistem autoamtski sređuje EOL. Pokrenuo sam skriptu sa servera i nije bilo nikakvih grešaka. Zatim sam iste fajlove arhivirao i ponovo upload-ovao (ovaj put kao jednu arhivu, binarnim modom) pa otpakovao na serveru. Prilikom pokretanja skripte, ponovo su se javile misteriozne greške o nemogućnosti pokretanja sesija.
Suma sumarum: Ukoliko se bavite WEB development-om i radite pod Windows-om, imajte na umu da je većina WEB servera pod nekim UNIX-olikim operativnim sistemom (Linux, BSD, Solaris, MacOS…) te da je preporučljivo da svoje fajlove spakujete u odgovarajući format kako ne bi dolazilo do ovakvih problema. Sa druge strane, ako radite u Linux okruženju, a koristite komponente koje su razvijala treća lica, obavezno proverite da li su sami fajlovi sačuvani na odgovarajući način. Na taj način uštedećete vreme i sebi i drugima ukoliko dođe do ovakvih problema.