Avatar billede algizoft Nybegynder
08. december 2006 - 12:31 Der er 15 kommentarer og
1 løsning

Problem med eAccelerator + encoding

Kan noget mon hjælpe med dette?

Jeg har problemer med at encode nogle PHP scripts vha. eAccelerator. Se nedenstående eksempler. Er der nogen der kan forklare mig hvorfor det første eksempel går galt, eller bare komme med et hint til hvad jeg kan foretage mig for at få løst dette problem?

// Fejl
<?php
$id = 3;
$q = "SELECT something FROM table WHERE id = ".$id;
?>

Output eksempel 1:
ERROR: Can't compile file
"C:\\Program Files\\xampp\\htdocs\\hh/enctest.php"

// OK
<?php
$q = "SELECT * FROM table WHERE id = 3";
?>

Output eksempel 2:
Encoding:
"C:\\Program Files\\xampp\\htdocs\\hh/enc.php" ->
"C:\\Program Files\\xampp\\htdocs\\hhenc/enctest.php"

Software + versioner:
eAccelerator 0.9.5
PHP 5.2.0
Avatar billede olebole Juniormester
08. december 2006 - 12:48 #1
<ole>

De viste stier er jo i hvertfald helt hen i skoven. Der, hvor de dannes, skal du lede efter fejlen  =)

/mvh
</bole>
Avatar billede algizoft Nybegynder
08. december 2006 - 12:57 #2
Der er intet galt med stierne. Som jeg skriver så går eksempel 2 fint, og der er stien magen til eksempel 1
Avatar billede olebole Juniormester
08. december 2006 - 13:02 #3
Hvis man vil være påståelig, er det en fordel at være 100% sikker! Det _er_ stierne, den er helt gal med .... kik dog på dem  =)
Avatar billede olebole Juniormester
08. december 2006 - 13:03 #4
Hint: '\\' kontra '/'  ;o)
Avatar billede algizoft Nybegynder
08. december 2006 - 13:07 #5
Stierne er bare noget output, og har INTET med mit problem at gøre....

Når jeg nu fortæller dig at de to eksempler (eller filer) ligger samme sted, og det kun er indholdet af filen der er afgørende for om encoding fejler eller går godt.

Prøv at se bort fra at stierne der tumbede ud, og kig på det jeg spørger om.
Avatar billede olebole Juniormester
08. december 2006 - 13:16 #6
Ja, det er netop output ... output, hvor PHP fortæller dig, hvad der ikke kan lade sig gøre:

    ERROR: Can't compile file
    "C:\\Program Files\\xampp\\htdocs\\hh/enctest.php"

Nej, det tror da pokker den ikke kan kompilere en fil med en sti, der er en bastard mellem to forskellige styresystemers måde at skrive en sti på!

PHP må ikke kunne behandle - endsige finde - en fil med denne sti:
    "C:\\Program Files\\xampp\\htdocs\\hh/enctest.php"

- og derfor giver det absolut ingen mening at se bort fra 'at stierne der tumbede ud'  =)
Avatar billede algizoft Nybegynder
08. december 2006 - 13:16 #7
Lige et eksempel Ole.... Hvis stierne ovenfor er så meget i skoven virker nedenstående vel ikke?

<?php
$file = "c:\\tmp/olebole.txt";
file_put_contents($file, 'Er der mon fejl i dette????');
?>
Avatar billede algizoft Nybegynder
08. december 2006 - 13:19 #8
Og en lille en mere... Fejlen kommer ikke fra PHP, men fra eAccelerator (encoder.php linie 44)
Avatar billede intenz Novice
10. december 2006 - 11:48 #9
Mærkeligt, du beder om hjælp, og får svar på hvad det er. Men du vil ikke tro på det. Så er det svært!
Det ER stierne der er forkerte.
Avatar billede tdafoobar Nybegynder
10. december 2006 - 11:51 #10
Nu bruger windows godt nok \ men altså ikke \\ , hvilket er hvad de andre har prøvet at fortælle dig.

Jeg vil så bare tilføje at eAccelerator ikke ligefrem har det bedste php5 support, så du vil nok bruge Zend Encoder hvis du absolut SKAL lave security by obscurity.
Avatar billede olebole Juniormester
11. december 2006 - 09:33 #11
tdafoobar >> Nej, det er nu ikke det, jeg prøvede at fortælle ham. Da '\' jo skal escapes i PHP, skal der stå '\\' - men jeg er til gengæld ret sikker på, han ikke kan mixe de to ('\' og '/') i samme sti. Under alle omstændigheder ville enhver koder ved sine fulde fem rette det med det samme  ;o)
Avatar billede algizoft Nybegynder
11. december 2006 - 09:53 #12
Jeg gover Ole ret i at det ville være rart hvis stierne var pænere, men som sagt er det ikke det der er mit problem, og jeg gider ikke begynde at rette eAccelerator koden for at få noget pænt output.

Problemet i en nøddeskal

Kompilering af denne fil går godt:
<?php
$q = "SELECT * FROM table WHERE id = 3";
?>

Kompilering af denne fil går IKKE godt:
<?php
$id = 3;
$q = "SELECT something FROM table WHERE id = ".$id;
?>

Dvs. problemet opstår når jeg forsøger at lave streng konkatering med variable. Da dette jo er en rimelig simpel operation gætter jeg på at problemet må være et sted i min opsætning. Kan vi være enige om at det er underligt at jeg kan encode den første, men ikke den anden fil?
Avatar billede olebole Juniormester
12. december 2006 - 14:42 #13
$q = "SELECT something FROM table WHERE id = '".$id."'";  ;o)
Avatar billede olebole Juniormester
12. december 2006 - 14:44 #14
- og så bør man jo også altid escape navne i SQL-kald ... ikke mindst, hvis man kan finde på at kalde dem noget reserveret  ;o)
    $q = "SELECT `something` FROM `table` WHERE `id` = '".$id."'";  ;o)
Avatar billede algizoft Nybegynder
12. december 2006 - 15:45 #15
$q = "SELECT something FROM table WHERE id = '".$id."'";  ;o)

Dette gør ingen forskel. Jeg havde forsøgt denne mulighed, selvom det ikke er nødvendigt når id er en int. (Dette havde jeg selvfølgelig ikke skrevet nogle steder). Jeg kan faktisk godt få min kode til at kompilere når jeg gør følgende:

<?php
$id = 3;
$q = sprintf("SELECT something FROM table WHERE id = %d", $id);
?>

Men det er rimelig surt at skulle skrive hele koden om til at bruge sprintf istedet for streng konkatering.

Jeg har dog fundet en anden løsning jeg kan bruge, som virker fint. PHPs bcompiler extension, som desværre er experimental, men den virker.

Hvis nogen vil have nogle point er i velkomne til at svare. Jeg skal ikke bruge dem.

Generelt tak for hjælpen, selvom i ikke er meget for at tro på min sti-historie :-)
Avatar billede algizoft Nybegynder
29. januar 2007 - 12:55 #16
luk
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester