Miért Filezilla hibásan tölti fel néha a PHP fájlokat?
Hát ezt jól megaztmondtad… :-)
Valószínű a probléma abból fakad, hogy különböző rendszerekben máshogy jelölik a sorvéget. A probléma még a monitor nélküli számítógépekre vezethető vissza, amik a számítási eredményeket papírra nyomtatták. Ott külön vezérlőjel volt a soremelésre, ami a papírt feljebb görgette egy sorral, és külön vezérlőjel volt arra, hogy a nyomtatófej – „kocsi” – menjen vissza a sor elejére. Ahhoz, hogy a nyomtatófej a következő sor elejére jusson, mindkét vezérlőjelet ki kellett adni.
Hogy ez két külön jel volt, annak volt értelme. Pl. ha csak a kocsi vissza vezérlőjelet adták ki a nyomtatónak, akkor rá lehetett nyomtatni az előző sorra, pl. aláhúzás jelekkel „_” alá lehetett húzni a szöveget. A soremeléssel, és más vezérlőjelekkel lehetett az előző sorhoz képest relatíve pozicionálni a kurzort.
A kocsi vissza (carriage return vagy CR) vezérlőjelnek az ASCII táblában a 13-as jel felel meg, a nyelvek zömében a \r escape szekvencia jelöli.
A soremelés (line feed vagy LF) vezérlőjelnek az ASCII táblában a 10-es jel felel meg, a nyelvek zömében a \n escape szekvencia jelöli.
~ ~ ~
És itt kezdődnek a bonyodalmak.
A Windows megtartotta az eredeti jelölést, és \r\n (CRLF) jelet használta a szöveges fájlokban az új sor jelölésére.
A Linuxban – afféle spórolásképpen – az egyik jelet hagyták csak meg, mégpedig a \n (LF) vezérlőkaraktert.
A Mac rendszerekben is csak az egyiket hagyták meg, mégpedig a \r (CR) vezérlőkaraktert.
Ha a linuxos soremeléssel kódolt szövegfájlt egy erre fel nem készített maces, vagy windowsos szövegszerkesztővel nyitod meg, akkor azok nem fogják a \n jelet soremelésnek tekinteni.
Ha a windowsos módszerrel hozol létre egy szövegfájlt, akkor meg mondjuk egy linuxos gépen lesz probléma az arra fel nem készített programoknál, mert minden sor végén lesz egy \r jel, ami nem a sortörés része. (Pl. Bash scriptek esetén hibát jelez, ha CRLF sortörés van.)
~ ~ ~
A probléma másik forrása az FTP protokollal van. Kétféle feltöltési mód létezik, a bináris, ami bájtra pontosan ugyanazt tölti fel, mint az eredeti volt, és a text feltöltés, ami konvertálja feltöltéskor a szövegfájlt. Azaz a CRLF sortörést használó szövegfájlból LF sortörést használó szövegfájl lesz a szerveren. Mivel viszont ez csak a feltöltésre vonatkozik, a letöltött fájl is LF sortörést fog tartalmazni, és az arra fel nem készített szövegszerkesztő – pl. Jegyzettömb – nem fogja sortörésnek tekinteni.
~ ~ ~
Megoldás:
1. Ha PHP-zel, akkor szokj rá a linuxos sortörés használatára.
2. Használj olyan szövegszerkesztőt, ami támogatja ezt. A legtöbb kódszerkesztő támogatja, pl. Notepad++, Sublime, stb…
3. Az FTP-nél mindig bináris feltöltést állíts be.
2-es köszi a "szófosást" és az időded, elmélkedtem rajta, hasznosnak tartottam.
3-as, igen az volt a baj :) De hogy miért nem ismerte fel a Filezilla automatikusan a Hostgator CPanel rendszerét, nem tudom.
Notepad++ -t használok, de az a baj hogy most semmit sem szerkesztettem csak egy Plugin-t frissíteni akartam hogy a fájlokat csak átírom (így nem kell kikapcsolni a plugint addig). Csak hibákat generált.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!