PHP, çıktı tamponlama kullanmadan bir değişkene bir PHP dosyası çıkışını yakalamak için bir yolu var mı?

7 Cevap php

PHP, bir değişken içine bir dosyayı okumak ve çıkış tamponlama kullanmadan aynı anda dosyasında PHP işlemek istiyorum. Bu mümkün mü?

Esasen ben kullanmadan bunu gerçekleştirmek mümkün olmak istiyorum ob_start():

<?php
ob_start();
include 'myfile.php';
$xhtml = ob_get_clean();
?>

Bu PHP mümkün mü?

Güncelleştirmek: I (çıkış tamponlama izin verilmez) bir çıkış geri arama içinde biraz daha karmaşık şeyler yapmak istiyorum.

7 Cevap

Ben PHP belgelerinde ne söyleyebilirim, hayır. Neden çıktı tamponlama önlemek istiyor musunuz?

Bunu aşmanın tek yolu komut satırı php istemcisi çağırarak ya da mevcut ne dayalı bir kıvrılma isteği yapıyor ve belirli gereksinimleri ne vardır ya içeren hacky yöntemler olacaktır.

PHP bir az bilinen bir özelliği, dönüş değeri, bir işlev çağrısı gibi bir yer / gerekli dosyayı tedavi mümkün ediliyor.

Örneğin:

// myinclude.php
$value = 'foo';
$otherValue = 'bar';
return $value . $otherValue;


// index.php
$output = include './myinclude.php';
echo $output;
// Will echo foobar

, Herkesin önerileri okuduktan belgelerin bir demet okuma, ve bazı şeyler etrafında oynadıktan sonra, ben bu ile geldi:

<?php
$file = file_get_contents('/path/to/file.php');
$xhtml = eval("?>$file");
?>

Ben alabilir gibi yakın ama maalesef çalışmıyor. Bunun anahtarı kapanış PHP bit (?>) dosyasının içeriğini önce eklemektir. Bu PHP-değerlendirme modunda dışarı eval() alacak ve non-PHP kodu olarak başlayan dosyanın içeriğini tedavi edecek. PHP kod blokları dosya içinde varsa o zaman, o PHP olarak değerlendirilecektir. Serseri bu değişkeni içinde eval'd içeriği kaydedebilirsiniz olmamasıdır, sadece sayfaya çıktılar.

Yardım herkes için teşekkürler!

Joeri Sebrechts is correct. An equivalent and slightly easier method is available if the PHP script is HTTP accessible:

$data = file_get_contents('http://google.com/');

Bu çıktı tamponlama kullanarak kaynaklarına daha kolay olacağını belirtmek gerekir.

Aslında tarayıcı gibi davranarak, php sayfaya bir kıvrılma isteği yapmak.

Dosya yerel ise ne yapabileceğini, dize eval çalıştırmak sonra, bir dize olarak bir değişken içine script yük olduğunu. Sonra sonra, tüm diğer şeyler yapabilirsiniz. Aksi halde, çıktı tamponlama kullanmak zorunda.

$fileData = file_get_contents('fileOnDisk.php'); $results = eval($fileData);

Aslında onun sonuçlarını yerine sadece yankı onlara geri çağırıyor dosyası olmak zorunda çünkü Ama, eval belgelerine bakın:

http://us2.php.net/eval