Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Problem z funkcją eval()
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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..
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 ?>
Go to the top of the page
+Quote Post
Jarod
post
Post #3





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
Jarod
post
Post #5





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Jarod
post
Post #7





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




zjadles srednik w ostatniej linijce swego evaluowanego kodu. No takie rzeczy moglbys sam sprawdzac.
Go to the top of the page
+Quote Post
Jarod
post
Post #9





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
Jarod
post
Post #11





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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..
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no wlasnie nie. bytecod jest to juz uruchamialny kod. Cos jak .exe. Juz go system nie rozkodowuje.
Go to the top of the page
+Quote Post
Jarod
post
Post #13





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


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..

Ten post edytował Jarod 21.02.2008, 14:33:54
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 17:12