09. juli 2016 - 12:19Der er
12 kommentarer og 1 løsning
Parse Error
Jeg får følgende fejlmeddelelse i Magento Webshop:
Parse error: syntax error, unexpected T_STRING in /home/www/enheltnyverden.dk/app/code/community/Quickpay/Payment/Model/Sales/Order/Grid/Fraudprobability.php on line 1
Ser filen virkelig sådan ud? Altså, der er jo f.eks. en åbenlys fejl i, at <?phpclass er i ét ord, men hvis filen ser sådan ud, så er der jo noget helt galt. Det er ikke noget udvikleren ikke ville have opdaget.
Hvis ikke, så er det jo ikke til at fejlfinde i det rod. Så skal vi nok se den ordentligt.
Det ligner en FTP-overførsel der er gået galt. Har selv oplevet at få hentet en fil ned lokalt med ftp, som blev hentet ned forkert - og indholdte fejl a la dem du har i det der stykke "kode". Problemet er så at den blev hentet ned sammen med en masse andre, så jeg havde ingen chance for at vide at der var fejl i den. Når man så uvidende om fejlen, uploader det hele til serveren igen, så er fejlen pludselig permanent overalt. Den eneste måde at rette op på det er at installere quickpay-modulet påny for at få den rigtige fil på plads igen.
Ja, det ser jo fint ud, og kompilerer også fint på min side. Så det er lidt underligt at du får fejl. Måske serveren har fået noget galt i halsen, og derfor kunne bruge en genstart. Eller også er der noget med UTF8 eller linjeskift som stadig er forkert i filen.
Ja, "Unexpected string" kan betyde at filen har et BOM tegn i starten, som er usynligt i næsten alle editors, men som kan forstyrre PHP. Sørg for at filen er gemt uden BOM.
Afinstallerede og re-installerede Quickpay modulet. Og nu fungerer det. Så nu behøver jeg ikke spekulere yderligere over hvad der var galt. :-) Tak for gode råd.
Ja, indirekte havde jeg jo løsningen, men Slater var nok mest præcist på den - selvom det går hen og bliver lidt teknisk - med usynlige tegn/BOM :-) Disse er sansynligvis ikke til stede efter du opdaterede modulet, da de dermed er uberørt af en editor. Så, ja, det løste det.
Så vidt jeg ved indeholder DreamWeaver en W3C validator og denne ser ud til at smide en advarsel om det - altså når man aktivt beder DreamWeaver om at køre en validering, men jeg kan ikke se nogen steder at DreamWeaver selv gør det.
Stort set ingen editors viser BOM, ikke engang Notepad. Du skal som regel helt over i en hex-editor for at kunne se dem.
BOM betyder byte order mark, og det er en ting der bruges i Unicode tegnsæt, hvor hvert tegn kan bestå af mere end én byte. I et traditionelt tegnsæt, som ANSI, er hvert tegn én byte, altså et tal fra 0 til 255 i computerens hukommelse. Unicode har den fordel, at det understøtter mange forskellige sprog og tegn, men derfor er 255 muligheder ikke nok, og hvert tegn kan fylde flere bytes. Men der er man nødt til at fortælle programmet der læser det, hvilken rækkefølge de bytes står i, for der er stor forskel på f.eks. 127 21 og 21 127. Der kommer BOM ind i billedet. Det er et enkelt tegn allerførst i en bil, som bare fortæller hvilken rækkefølge bytes forekommer i, little endian eller big endian.
Men fordi det er en del af tegnsættet, bliver det tegn næsten altid skjult. Det er ikke meningen, man skal se det. PHP burde naturligvis også bare ignorere tegnet, men det gør den ikke, og der kan opstå en del problemer.
Mange moderne editors gemmer automatisk i Unicode uden BOM, altså uden det tegn i starten, så det bare bliver læst som standard big endian, men mange andre gemmer stadig tegnet som udgangspunkt. De fleste giver en mulighed for at vælge at gemme det uden, men det kommer helt an på editoren. I Notepad++ skal man f.eks. gå op i menuen Encode og vælge Unicode without BOM. I Programmer's Notepad er det i egenskaber for filen. Atom og Brackets gemmer automatisk uden BOM. Jeg ved ikke med Dreamweaver.
Synes godt om
1 synes godt om dette
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.