Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Czym zastąpić "eval" ?
MESSIAH :)
post 4.08.2015, 20:41:43
Post #1





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Czytałem w manualu aby nie stosować tej funkcji. Więc jak powinien wyglądać poprawnie funkcja renderowania html?
  1. if (file_exists($path)) {
  2. $content = file_get_contents($path);
  3.  
  4. eval(' ?>' . $content . '<?php ');
  5. }

Co takiego złego jest w tym eval?

Ten post edytował MESSIAH :) 4.08.2015, 20:43:20


--------------------
Go to the top of the page
+Quote Post
nospor
post 4.08.2015, 20:43:57
Post #2





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




A po grzyba ci tu eval? O include nie slyszal?


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

"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
Comandeer
post 4.08.2015, 20:43:57
Post #3





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


Wszystko… Już lepiej po prostu
Kod
echo file_get_contents($path);


Chyba że w środku jest PHP, więc można pokombinować z buforem i include (albo po prostu zaincludować).


--------------------
Go to the top of the page
+Quote Post
MESSIAH :)
post 4.08.2015, 20:55:25
Post #4





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Słyszałem o include i stosuje to. Mam mały system renderowania html w którym używam preg_replace i np mam kod html:
  1. Witaj [user] ostatni byłeś [online] masz [messages] nieprzeczytanych.

Dlatego użyłem eval
  1. eval(' ?>' . $content . '<?php ');
aby oddzielić php od html.


--------------------
Go to the top of the page
+Quote Post
nospor
post 4.08.2015, 20:56:36
Post #5





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




No i po co ci tu eval? Przeciez to zwykly tekst.... eval nie ma tu nic do roboty.


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

"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
MESSIAH :)
post 4.08.2015, 21:09:02
Post #6





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Cytat
eval — Evaluate a string as PHP code

Poprawny kod wygląda następująco:
  1. if (file_exists($path)) {
  2. $content = file_get_contents($path);
  3. foreach (this->vars as $key => $value) {
  4. $content = preg_replace('/\[' . $key . '\]/', $value, $content)
  5.  
  6. eval(' ?>' . $content . '<?php ');
  7. }


--------------------
Go to the top of the page
+Quote Post
nospor
post 4.08.2015, 21:14:18
Post #7





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




No i dobrze... nadal sie pytam po grzyba ci tu eval?? Czemu preg_replacem nie zamieniasz od razu na wartosc jaka ma byc? Bo teraz rozumiem, ze zamieniasz to na zmienna a potem evalem parsujesz... bez sensu totalnie.

ps: i nie cytuj mi tu prosze definicji. Ja wiem co robi eval. To ty bez sensu kombinujesz a nie ja tongue.gif


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

"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
MESSIAH :)
post 4.08.2015, 22:05:27
Post #8





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Bez eval wyświetla mi się pusta strona. Więc jest on potrzebny.


--------------------
Go to the top of the page
+Quote Post
Comandeer
post 4.08.2015, 22:46:02
Post #9





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


Może dlatego, że nie ma nigdzie echo?


--------------------
Go to the top of the page
+Quote Post
nospor
post 5.08.2015, 05:57:43
Post #10





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




@Comandeer o echo juz pisales w pierwszym poscie. Chyba nie podejrzewasz tegoż tu autora o nieczytanie tego co się do niego pisze wink.gif

Cytat
Bez eval wyświetla mi się pusta strona. Więc jest on potrzebny.
No tak, nie ma to jak wyciągnac logiczny wniosek wink.gif
Nie dam rady poleciec do sklepu oddalonego o 200 metrow - musze kupic helikopter.... Ale zeby pomyslec zeby uzyc nóg, to już ciezko na to wpaść.
Tak jak juz wspominano wczesniej: by sie cos wyswietlilo na ekranie, to trzeba uzyc echo. Wiesz, takie tam podstawy, ktore powinno sie znac od samego początku.


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

"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
Comandeer
post 5.08.2015, 09:40:07
Post #11





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


@nospor im dłuższy staż na forach, tym bardziej podejrzliwym człowiekiem się staję wink.gif


--------------------
Go to the top of the page
+Quote Post
Tuminure
post 5.08.2015, 09:51:57
Post #12





Grupa: Zarejestrowani
Postów: 178
Pomógł: 49
Dołączył: 16.04.2012
Skąd: Bytom

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


Nie wiem jaki efekt chcesz uzyskać ale z pewnością go uzyskasz bez używania eval wink.gif.
Go to the top of the page
+Quote Post
nospor
post 5.08.2015, 10:42:30
Post #13





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




@Comandeer to sobie pomysl jaką ja mam fazę biggrin.gif


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

"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
Comandeer
post 5.08.2015, 12:00:17
Post #14





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


@nospor jestem adminem na (konkurencyjnym?) forum, więc też już mam odpowiednią…

Co do tematu: nie łatwiej już wziąć jakiś super mega prosty system szablonów, skoro i tak ten kod go ma przypominać?


--------------------
Go to the top of the page
+Quote Post
MESSIAH :)
post 5.08.2015, 16:03:43
Post #15





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Więc sprawa wygląda następująco. Nie mogę używać echo lub tym podobne gdyż moje if, else i endif będą miały postać komentarza html czyli:
  1. <!-- if 1 == 1 -->

I tutaj będę podmieniał tylko wartość dla if. Więc eval jest tutaj jak najbardziej na miejscu. Echo wyświetla wszystko i psuje output preg_replace.


--------------------
Go to the top of the page
+Quote Post
Comandeer
post 5.08.2015, 16:23:44
Post #16





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


Jeśli masz tam if to najlepszy znak tego, że potrzebujesz systemu szablonów, a nie rzeźbienia czegoś takiego na szybko.

Najprostszy system szablonów można uzyskać używając PHP (tzw. PHP Views), np. przy pomocy output bufferingu + include jak wspominałem.

  1. <?php
  2. function generateView($file, array $vars = [])
  3. {
  4.  
  5. extract($vars);
  6.  
  7. include $file;
  8.  
  9. return ob_get_clean();
  10. }
  11.  
  12. echo generateView('view.php', [
  13. 'a' => 1
  14. ]);


I plik view.php:
  1. <?php if($a > 0): ?>
  2. <p>Super! $a wynosi aż <?=$a;?>.</p>
  3. <?php endif; ?>


Zero eval.

Oczywiście PHP Views są najmniej przyjemne w pracy (ale za to masz dostęp do całego PHP, co w zależności od punktu widzenia jest plusem lub minusem) i warto zaznajomić się choćby z Twigiem czy jakąś implementacją wąsów dla PHP


--------------------
Go to the top of the page
+Quote Post
MESSIAH :)
post 5.08.2015, 19:13:34
Post #17





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


W moim pliku z View używam tylko html - php odpada. Chcę mieć w nim czysty html
  1. Witaj [użytkownik] <br>
  2.  
  3. <!-- Jeśli 1 == 1 -->
  4. Jest równe
  5. <!-- Inaczej -->
  6. Nie jest równe
  7. <!-- KoniecJeśli -->


Moim celem jest przetworzenie
  1. <!-- Jeśli 1 == 1 -->
na
  1. <?php if ($1) : ?>
i ponownie na html. Czy bez eval się nie obędzie?


--------------------
Go to the top of the page
+Quote Post
nospor
post 5.08.2015, 19:58:31
Post #18





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




Cytat
W moim pliku z View używam tylko html - php odpada. Chcę mieć w nim czysty html
Jest ku temu jakiś konkretny powód czy zwykły kaprys?


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

"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
MESSIAH :)
post 5.08.2015, 20:01:01
Post #19





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Chcę po prostu sprawdzić zachowanie takiego renderowania. Muszę przetestować kilka opcji i wybrać tą najlepszą dla mnie.


--------------------
Go to the top of the page
+Quote Post
nospor
post 5.08.2015, 20:07:50
Post #20





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




Aaaaa, to ty..... ten co nie slucha innych tylko robi po swojemu... juz sobie przypomnialem smile.gif
Dobra, powodzenia smile.gif


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

"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

2 Stron V   1 2 >
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: 15.06.2025 - 11:04