Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zawartosc pliku w zmiennej i kod php
paBlas16
post
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 3
Dołączył: 27.09.2009
Skąd: Toruń

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


Witam. Może trochę to głupie co robię ale to będzie używane przez laików (IMG:style_emoticons/default/winksmiley.jpg)

Mam plik content.php i np. kontakt.php

content.php

  1. <?php
  2. $default_url = encode_url("newsy/index.php");
  3.  
  4. $file = $_GET['u'];
  5. if(empty($file)){ $file = $default_url; }
  6. $file = decode_url($file);
  7. $file = sprawdz_plik($file);
  8. $file = file_get_contents($file);
  9. $cala = explode('@all_content@',$file);
  10. $ile_cala = count($cala);
  11.  
  12. if ($ile_cala == 2){
  13.  
  14. $ac = 1;
  15. $tresc = '
  16. <div class="column_all">
  17. '.$cala[1].'
  18. </div>
  19. ';
  20.  
  21. } else {
  22.  
  23. $lewa = explode('@left_content@',$text);
  24. $ile_lewa = count($lewa);
  25.  
  26. if ($ile_lewa == 2){
  27.  
  28. $prawa = explode('@right_content@',$lewa[1]);
  29. $ile_prawa = count($prawa);
  30.  
  31. if ($ile_prawa == 2){
  32.  
  33. $lewa[1] = str_replace('@right_content@'.$prawa[1], " ", $lewa[1]);
  34.  
  35. }
  36.  
  37. $lc = 1;
  38. $tresc = '
  39. <div class="column">
  40. '.$lewa[1].'
  41. </div>
  42. ';
  43.  
  44. if ($ile_prawa == 2){
  45.  
  46. $tresc .= '
  47. <div class="column2"><br><br>
  48. '.$prawa[1].'
  49. </div>
  50. ';
  51.  
  52. }
  53. }
  54. }
  55. ?>


kontakt.php

  1.  
  2. @left_content@
  3.  
  4. coś tak związane z kontaktem z firma
  5.  
  6. @right_content@
  7.  
  8. nasza firma zajmuje sie produkcja wszelakiego dziadostwa
  9.  


i teraz jeżeli w pliku kontakt.php znajduje się sam html to jest ok ale jeśli pojawi tam się jakakolwiek wstawka php to jest ona interpretowana jak zwykły tekst, nie wykonuje się. Czy da się to jakoś zrobić. Mój sposób wydaje się dosyć fajny ale niestety. Czekam na szybkie odpowiedzi. W $_GET['u'] - jest przesyłany adres pliku który ma się otworzyć jako zawartość. To @all , left , right _content@ jest gdyż cała strona jest zrobiona tak że zawartość można wyświetlać albo na całej szerokości w jednej kolumnie albo w dwóch. Mam nadzieję że zrozumieliście ;p
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Zasada działania eval.
Załóżmy, że mamy plik:
[PHP] data.php - pobierz, plaintext
[PHP] data.php - pobierz, plaintext
Jego zawartość pobieramy za pomocą funkcji file_get_contents('data.php') i zapisujemy ją jako $content. Następnie poddajemy zmienną $content działaniu eval
  1. <?php eval($content); ?>
co jest równoważne z
  1. <?php echo time(); ?>
Jedynie takie rozwiązanie jest prawidłowe i działa.
Załóżmy teraz, że nasz plik data.php wygląda nieco inaczej, a mianowicie
[PHP] data.php - pobierz, plaintext
  1. <?php echo time(); ?> DANE
[PHP] data.php - pobierz, plaintext
Wczytujemy ponownie plik za pomocą file_get_contents() i zapisujemy pod zmienną $content. Zmienna $content zawiera teraz łańcuch znaków "<?php echo time(); ?> DANE". Jako, że funkcja eval wykonuje się w ciele skryptu php (tzn. pomiędzy znacznikami <?php i ?>), wywołanie eval($content) spowoduje błąd, ponieważ będzie równoważne zagnieżdżeniu skryptu w skrypcie
  1. <?php eval($content); ?>
to w tym przypadku
  1. <?php <?php echo time(); ?> DANE ?>
Zatem znak < będzie nieoczekiwanym (unexpected).
Ale plik data.php możemy jeszcze inaczej zapisać:
[PHP] data.php - pobierz, plaintext
  1. echo time(); DANE
[PHP] data.php - pobierz, plaintext
Jednak to również spowoduje błąd, ponieważ
  1. <?php eval($content); ?>
będzie w tym przypadku oznaczać
  1. <?php echo time(); DANE ?>
gdzie słowo "DANE" jest najzwyklejszym łańcuchem znaków, który do tego miejsca nijak nie pasuje.


Jak zatem wczytać plik kontakt.php? Po prostu z serwera. Przy czym plik najpierw powinien zostać przetworzony przez PHP, a później zwrócony przez file_get_contents(). Jak to się robi? Zamiast pobierać plik z katalogu
  1. <?php
  2. $content = file_get_contents('kontakt.php');
  3. ?>
pobieramy go z lokalizacji sieciowej
  1. <?php
  2. $content = file_get_contents('http://localhost/htdocs/sciezka/do/pliku/kontakt.php');
  3. ?>
I problem z głowy.
@paBlas16 Dla Ciebie oznacza to, że musisz jedynie zmienić linijkę 8 na odpowiednią. W stylu
  1. $file = file_get_contents('http://domena.ext/sciezka/do/pliku/' . $file);
Go to the top of the page
+Quote Post

Posty w temacie


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: 8.10.2025 - 06:08