Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem z funkcją eval()
Forum PHP.pl > Forum > Przedszkole
Jarod
Mam dwa pliki:

data.class.php
  1. <?php
  2.  
  3. class Data
  4. {
  5. public $sMessage;
  6. private $sSecret;
  7.  
  8. public function __construct($sInput)
  9. {
  10. echo '<br/><br/><b>Odpaliłem konstruktor klasy Data()...</b>';
  11. $this->sMessage = $sInput;
  12. }
  13.  
  14. public function setSecret()
  15. {
  16. $this->sSecret = md5($this->sMessage);
  17. }
  18.  
  19. public function getSecret()
  20. {
  21. return $this->sSecret;
  22. }
  23.  
  24. public function getMessage()
  25. {
  26. return $this->sMessage;
  27. }
  28. }
  29.  
  30. $oData = new Data('Tajny string...');
  31. $oData->setSecret();
  32. echo '<br/>Message: ' . $oData->getMessage();
  33. echo '<br/>Secret: ' . $oData->getSecret()
  34.  
  35. ?>


oraz index.php
  1. <?php
  2.  
  3. // data.class.php
  4. if (file_exists('data.class.php'))
  5. {
  6. if ($rHandle = @fopen('data.class.php', 'r'))
  7. {
  8. if (flock($rHandle, LOCK_SH))
  9. {
  10. $sFile = htmlspecialchars(fread($rHandle, filesize('data.class.php')));
  11. flock($rHandle, LOCK_UN);
  12. }
  13.  
  14. fclose($rHandle);
  15. }
  16. }
  17.  
  18. $sText = $sFile;
  19.  
  20. // base64_encode()
  21. $sText = base64_encode($sText);
  22. $sText = base64_decode($sText);
  23.  
  24.  
  25. eval($sText);
  26.  
  27.  
  28. ?>


Wywołując funkcję eval() dostaję błąd. W którym miejscu popełniam błąd?
Natomiast coś takiego
  1. <?php
  2. eval("echo \"a\";");
  3. ?>
działa bez problemu..
nospor
po pierwsze: czemu walisz ewalem plik? Nie lepiej include() ?
po drugie: eval wykonuje kod php. Nie moze wiec tekst zawierac takich rzeczy jak <? lub <?php ?>
Jarod
Cytat(nospor @ 21.02.2008, 08:37:26 ) *
po pierwsze: czemu walisz ewalem plik? Nie lepiej include() ?

Bo chcę zaciemnić skrypt i do uruchomienia go potrzebuję zapisu eval(base64_decode(...));

Cytat(nospor @ 21.02.2008, 08:37:26 ) *
po drugie: eval wykonuje kod php. Nie moze wiec tekst zawierac takich rzeczy jak <? lub <?php ?>


Po usunięciu <? <?php ?> także zgłasza błąd...
nospor
Cytat
Po usunięciu <? <?php ?> także zgłasza błąd...
O litosci... czy ja sie doczekam czasow kiedy osoba pytajaca bedzie na tyle domyslna ze poda konkretnie jaki blad, konkretnie co nie dziala i wogole konkretnie? Naprawde ciezko sie domyslic ze jak dostajesz blad to milo by bylo jakbys go podal?

A wiec zapytam wprost: jaki blad dostajesz?

ps:
Cytat
Bo chcę zaciemnić skrypt
Sorki, ale pomysl uwazam delikatnie rzecz mowiac za zły. Nie dosc ze wydluzysz sobie czas parsowania takiego skryptu to i zaciemnienie do kitu bo pierwszy lepszy programista od razu to odkoduje
Jarod
Cytat(nospor @ 21.02.2008, 09:29:32 ) *
O litosci... czy ja sie doczekam czasow kiedy osoba pytajaca bedzie na tyle domyslna ze poda konkretnie jaki blad, konkretnie co nie dziala i wogole konkretnie? Naprawde ciezko sie domyslic ze jak dostajesz blad to milo by bylo jakbys go podal?

A wiec zapytam wprost: jaki blad dostajesz?

Uważałem, że osoba próbująca pomóc sprawdzi kod, który podałem. Ale bardzo proszę. Błąd:
"Parse error: parse error, unexpected '&' in D:\WWW\X\index.php(49) : eval()'d code on line 1"


Cytat(nospor @ 21.02.2008, 09:29:32 ) *
ps:
Sorki, ale pomysl uwazam delikatnie rzecz mowiac za zły. Nie dosc ze wydluzysz sobie czas parsowania takiego skryptu to i zaciemnienie do kitu bo pierwszy lepszy programista od razu to odkoduje


Wiem o tym doskonale, ale chcę trochę utrudnić a na szybkości dużo nie stracę. Przynajmniej chcę to sprawdzić. Jesli zastosuję IONCube też stracę jakieś ułamki sekund.

pzdr
nospor
Cytat
Uważałem, że osoba próbująca pomóc sprawdzi kod, który podałem.
Ale po co ktos ma sprawdzac wlasnorecznie twoj kod i marnowac przy tym swoj czas, skoro wystarczy ze podasz komunikat bledu i juz wszystko jasne?

A teraz do rzeczy: wywal te htmlspecialchars() Przeciez to ci zamienia takie rzeczy jak > na encje, ktore sa bledem dla parsera php.

Cytat
Wiem o tym doskonale, ale chcę trochę utrudnić a na szybkości dużo nie stracę.
Przy skrypcie typu Hello World z dwoma odwiedzinami dziennie to moze i faktyczne strata nie bedzie duza winksmiley.jpg
Jarod
Cytat(nospor @ 21.02.2008, 10:12:58 ) *
A teraz do rzeczy: wywal te htmlspecialchars() Przeciez to ci zamienia takie rzeczy jak > na encje, ktore sa bledem dla parsera php.

Wywaliłem, ze skryptu data.class.php usunąłem <?php i ?> i otrzymuję błąd:
Cytat
"Parse error: parse error, unexpected $end, expecting ',' or ';' in D:\WWW\X\index.php(49) : eval()'d code on line 32"


Jako ciekawostkę podam, że jak wklepiesz na stronie http://www.php-einfach.de/php_code_verschluesseln.php
mój kod i skopiujesz wygenerowanego evala to także nie działa.

Cytat(nospor @ 21.02.2008, 10:12:58 ) *
Przy skrypcie typu Hello World z dwoma odwiedzinami dziennie to moze i faktyczne strata nie bedzie duza winksmiley.jpg

Chcę sprawdzić jak to wpłynie na wydajność bo nigdy nie sprawdzałem. Liczę się ze spadkiem wydajności. Jestem ciekawy jak wypadają pod tym względem rozwiązania takie jak ioncube.

pzdr
nospor
zjadles srednik w ostatniej linijce swego evaluowanego kodu. No takie rzeczy moglbys sam sprawdzac.
Jarod
Cytat(nospor @ 21.02.2008, 10:25:29 ) *
zjadles srednik w ostatniej linijce swego evaluowanego kodu. No takie rzeczy moglbys sam sprawdzac.

Fakt. Dziękuje za pomoc.

Swoją droga macie jakieś doświadczenia z programami typu ioncube, zend encoder? Jak to wpływa na wydajność i jak się takie rozwiązania mają do stosowania base64..?


Pzdr
nospor
Cytat
Swoją droga macie jakieś doświadczenia z programami typu ioncube, zend encoder?
Te cudaki przewalaja kod php do bytecodu co jest o niebo szybsze od twoich base64. Bytecode jest sparsowanym (skompilowanym) kodem php.
Jarod
Cytat(nospor @ 21.02.2008, 10:37:04 ) *
Te cudaki przewalaja kod php do bytecodu co jest o niebo szybsze od twoich base64. Bytecode jest sparsowanym (skompilowanym) kodem php.

Ja to wiem ale przecież taki skompilowany kod, zewnętrzna biblioteka musi rozkodować przed uruchomieniem..
nospor
no wlasnie nie. bytecod jest to juz uruchamialny kod. Cos jak .exe. Juz go system nie rozkodowuje.
Jarod
Cytat(nospor @ 21.02.2008, 14:25:13 ) *
no wlasnie nie. bytecod jest to juz uruchamialny kod. Cos jak .exe. Juz go system nie rozkodowuje.

Dziwne. Próbowałeś kiedyś zakodować skrypt ioncube? Ja pobrałem testową wersję i kiedyś sprawdzałem. To nie jest zwykły ala "exe". Wieczorem zamieszczę przykładowy kod.

Zamieszczę też jakieś wyniki wydajności kodowania base64. Wstępne krótkie testy nie wykazały różnicy - średniej wielkości aplikacja..
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.