Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Parsowanie kodu w zmiennej
loganek
post
Post #1





Grupa: Zarejestrowani
Postów: 81
Pomógł: 20
Dołączył: 14.06.2007

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


Witam, mam następujący problem;
mam:
Kod
$zmienna='hej, liczymy: <? for($i=0; $i<5; $i++)echo $i;?>';

i nie wiem jakiej funkcji użyć, żeby w zmiennej $zmienna2 zostało:
Kod
$zmienna='hej, liczymy: <? for($i=0; $i<5; $i++)echo $i;?>';
$zmienna2=jakasfunkcja($zmienna);//$zmienna2 ma przyjąć wartość hej, liczymy: 01234

chodzi po prostu o przeparsowanie kodu php w zmiennej. Myślałem o wyrażeniach regularnych i funkcji eval, ale ona nie zwraca wartości, tylko wykonuje tekst. Ma ktoś może inny pomysł?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Zyx
post
Post #2





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Najprostszy z możliwych patentów - API strumieni.

  1. <?php
  2. class Moj_Strumien
  3. {
  4.    private $read = 0;
  5.    static public $text;
  6.  
  7.    public function stream_open($path, $mode, $options, $opened_path)
  8.    {        
  9.        return true;
  10.    } // end stream_open();
  11.  
  12.    public function stream_close()
  13.    {        
  14.    
  15.    } // end stream_close();
  16.    
  17.    public function stream_read($count)
  18.    {        
  19.        $return = substr(self::$text, $this->read, $count);
  20.        $this->read += $count;
  21.        return $return;
  22.    } // end stream_read();
  23.    
  24.    public function stream_write($data)
  25.    {        
  26.    
  27.    } // end stream_write();
  28.    
  29.    public function stream_eof()
  30.    {        
  31.        return (strlen(self::$text) < $this->read);
  32.    } // end stream_eof();
  33.    
  34.    public function stream_tell()
  35.    {        
  36.    
  37.    } // end stream_tell();
  38.    
  39.    public function stream_seek($offset, $whence)
  40.    {        
  41.    
  42.    } // end stream_seek();
  43.    
  44.    public function stream_stat()
  45.    {        
  46.        return array('foo' => 'bar');
  47.    } // end stream_stat();
  48.    
  49.    public function url_stat($path, $flags)
  50.    {        
  51.        return array('foo' => 'bar');
  52.    } // end url_stat();
  53. } // end Moj_Strumien;
  54.  
  55. stream_register_wrapper('zmienna', 'Moj_Strumien');
  56.  
  57. Moj_Strumien::$text = 'hej, liczymy: <? for($i=0; $i<5; $i++)echo $i;?>'; // Wprowadzamy tekst do pamięci strumienia
  58.  
  59.  
  60. // wykonujemy tekst
  61. require('zmienna://foo'); // zamiast "foo" mozna wpisac cokolwiek, bo nie napisalismy tak zaawansowanej obslugi.
  62. $zmienna = ob_end_flush();
  63.  
  64. // cieszymy się.
  65.  
  66. ?>


Klasę można oczywiście rozbudować, by była możliwość zapisania do niej wielu różnych wartości - w tym celu należy napisać jakąś obsługę do stream_open().

Ten post edytował Zyx 8.11.2008, 14:12:44
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: 10.10.2025 - 09:27