Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Problem z funkcją eval()
Jarod
post 21.02.2008, 08:33:52
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..


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
nospor
post 21.02.2008, 08:37:26
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 ?>


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Jarod
post 21.02.2008, 09:20:05
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...


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
nospor
post 21.02.2008, 09:29:32
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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Jarod
post 21.02.2008, 09:46:23
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


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
nospor
post 21.02.2008, 10:12:58
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 winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Jarod
post 21.02.2008, 10:22:23
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 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


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
nospor
post 21.02.2008, 10:25:29
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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Jarod
post 21.02.2008, 10:33:39
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


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
nospor
post 21.02.2008, 10:37:04
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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Jarod
post 21.02.2008, 14:20:55
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..


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
nospor
post 21.02.2008, 14:25:13
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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Jarod
post 21.02.2008, 14:33:03
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


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 01:36