PHP - manipülasyon sonra dosyadan baskı içerik

3 Cevap php

Bir dize olarak içeriğe sahip sonra ben .. bir php içinde bir php dosyası okumak ve bazı manipülasyon yapmak için çalışıyor mücadele ediyorum, ama ben çıktı çalıştığınızda o yankı veya tüm php etiketleri yazdırabilirsiniz anlamıyla dosyasına dahil edilir.

işte benim kod:

function compilePage($page,$path){
   $contents = array();
   $menu = getMenuFor($page);
   $file = file_get_contents($path);
   array_push($contents,$menu);
   array_push($contents,$file);
   return implode("\n",$contents);
}

ve bunun gibi bir dize dönecektir

<div id="content>
   <h2>Here is my title</h2>
   <p><? echo "my body text"; ?></p>
</div>

ama bu tam üzerinde php derleme değil yukarıda içeriği yazdırmak olacaktır.

Peki, nasıl emin derlenmiş php sonuç verir ve sadece bir düz metin yapım bu "compilePage" işleyebilir?

Şimdiden teşekkürler

3 Cevap

function compilePage($page, $path) {
    $contents = getMenuFor($page);
    ob_start();
    include $path;
    $contents .= "\n".ob_get_clean();
    return $contents;
}

Eğer eval işlevini kullanabilirsiniz, ancak bu highly tedbirsiz gelen bir dize PHP kodu değerlendirmek için. PHP kodu içeren bir dosya varsa, include, include_once, require, ya da require_once ihtiyaca bağlı olarak ile değerlendirmek . Veya gerekli, ya da hangisi yöntemi - - dahil bir dosyanın çıktısını yakalamak için size etkinleştirmeniz gerekir output buffering.

Bunun için output buffering kullanımı ve include dosyayı normal olabilir:

function compilePage($page,$path){
   $contents = array();
   $menu = getMenuFor($page);
   ob_start();
   include $path;
   $file = ob_get_contents();
   ob_end_clean();
   array_push($contents,$menu);
   array_push($contents,$file);
   return implode("\n",$contents);
}

include() araması normal PHP dosyasını içerecektir, ve <?php blokları ayrıştırılır ve idam edilecek. Herhangi bir çıkış ob_start() ile oluşturulan tampon tarafından esir olacak ve diğer ob_* fonksiyonları ile daha sonra alabilirsiniz.

Sen include kullanmak için () bu yüzden idam edecek gerekir. Sen output buffering bir dize getiriyi elde etmek ile çift bu olabilir.

function compilePage($page,$path){ $contents = array(); $menu = getMenuFor($page);

//output buffer
ob_start();
include($path);
$file = ob_get_contents();
ob_end_clean();   

array_push($contents,$menu);
array_push($contents,$file);
return implode("\n",$contents);

}