Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z eval
Forum PHP.pl > Forum > PHP
PiratNowegoPokolenia
Parser wywala mi bład:
Kod
Notice
Indirect modification of overloaded property Template::$tabs has no effect
Błąd wystąpił w pliku C:\PHP\cms\libary\template.class.php(61) : eval()'d code ( Linia : 29 )

Pytanie brzmi dlaczego ?

A teraz okoliczności:

Kod który jest evalowany
Kod
<ul>
<?php foreach( $this->tabs as $aTab ): ?>
<li id="current"><a href="<?php echo $aTab['href']?>"><span><?php echo $aTab['text']?></span></a></li>
<?php endforeach; ?>
</ul>


Eval jest wykonany w metodzie render() w klasie Template. Oto ta metoda...
  1. <?php
  2. public function render( $sFileName )
  3. {
  4. if( file_exists( $this->__sPath . DS . $sFileName ) )
  5. {
  6. $sTemplate = file_get_contents( $this->__sPath . DS . $sFileName );
  7. // To żeby nieco ograniczyć możliwości użytkownikowi ...
  8. $aBanned = array( '/global/' ,
  9. '/$_POST/' ,
  10. '/$_GET/' ,
  11. '/$GLOABLS/' ,
  12. '/$_REQUEST/' ,
  13. // *** //
  14. '/$this->__aContent/' );
  15.  
  16. foreach( $aBanned as $sBannedString )
  17. {
  18. if( preg_match( $sBannedString , $sTemplate ) )
  19. throw new Exception( 'Illegal procedure in template ( '.$sFileName.' )' );
  20. }
  21.  
  22.  
  23. eval( '?>' . $sTemplate );
  24.  
  25. return ob_get_clean();
  26. }
  27. else
  28. {
  29. throw new Exception( 'Template file ( '.$sFileName.' ) doesn't exist );
  30. }
  31. }

Są jeszcze 4 metody które zmienne przesłane do templatki zapisują ...
  1. <?php
  2. public function __set( $sVar , $mValue )
  3. {
  4. $this->__aContent[ $sVar ] = $mValue;
  5. }
  6.  
  7. public function __get( $sVar )
  8. {
  9. if( isset( $this->__aContent[ $sVar ] ) )
  10. return $this->__aContent[ $sVar ];
  11. }
  12.  
  13. public function __unset( $sVar )
  14. {
  15. unset( $this->__aContent[ $sVar ] );
  16. }
  17.  
  18. public function __isset( $sVar )
  19. {
  20. return isset( $this->__aContent[ $sVar ] );
  21. }
  22. ?>
Norbas
Proponuję zmienić funkcję __get, aby zwracała jakąś wartość np. null, gdy nie istnieje element tablicy __aContent
PiratNowegoPokolenia
automatycznie zwracana jest wartość false ... a pozatym $this->__aContent['tabs'] ma jakomś tam wartość (array) ...
Norbas
Sprawdź czy również będziesz miał błędy w najnowszej wersji PHP. Tego typu błędy były już zgłaszane
PiratNowegoPokolenia
wielkie dzięki ...
działa
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.