2012-04-13 18 views
8

Olası Çoğalt:
Execute a PHP file, and return the result as a string
PHP capture print/require output in variableİçerikler bir dizge olarak nasıl eklenir?

Bir içeriğini bir dizeye dahil almaya çalışıyorum. Mümkün mü? Bir test.php dosyanız varsa

Örneğin,:

<?php 
echo 'a is equal to '.$a; 
?> 

Ben test.php içermekte olup dizede de çıkışı ne olacağını dönmek include_to_string demek, bir işlev gerekir. gibi

şey:

<?php 
$a = 4; 
$string = include_to_string(test.php); // $string = "a is equal to 4" 
?> 
+0

benim tahminim olmayacak olmasıdır @safarov ben test.php dosyasında bir $ yerine koymaz düşünüyorum –

+0

onun değişken değerlendirir. kontrol edeyim. – ppp

cevap

28
<?php 

    ob_start(); 
    include 'test.php'; 
    $string = ob_get_clean(); 

bence ne istediğiniz değil. Bakınız output buffering.

+1

Bu teknik meraklı herkes için çıktı tamponlama olarak adlandırılır. –

+0

@ Xeon06 Yorum yazarken sadece manuel bir link eklendi! Prod rağmen :-) :-) – DaveRandom

+0

@nickb [Hayır yapmaz] (http://php.net/manual/en/function.ob-get-clean.php), ob_end_clean() 'döner' bool '. ob_get_clean() ', $ str = ob_get_contents() öğesini çağırmanın kısayoludur; ob_end_clean(); ' – DaveRandom

5
ob_start(); 
include($file); 
$contents = ob_get_contents(); // data is now in here 
ob_end_clean(); 
3

Sen output buffering ile yapabilirsiniz:

function include2string($file) { 
    ob_start(); 
    include($file); 
    return ob_get_clean(); 
} 

@DaveRandom bir fonksiyon içerisine sarılması ile sorunun komut ($ dosya) erişemez olmasıdır ki (doğru) işaret küresel olarak tanımlanan değişken. Bu, dinamik olarak dahil birçok komut dosyası için bir sorun olmayabilir, ancak sizin için bir sorunsa, o zaman bu teknik (diğerleri tarafından gösterildiği gibi) bir işlev sarıcı dışında kullanılabilir.

** Değişkenleri içe aktarma Yapabileceğiniz bir şey, betiğinize değişken olarak göstermek istediğiniz bir veri kümesi eklemektir. Veriyi bir şablona aktarmak gibi düşünün.

include2string('foo.php', array('key' => 'value', 'varibleName' => $variableName)); 

ve şimdi $key ve $variableName sizin foo.php dosyası içinde görünür olacaktır:

function include2string($file, array $vars = array()) { 
    extract($vars); 
    ob_start(); 
    include($file); 
    return ob_get_clean(); 
} 

Sen bu şekilde çağırır.

Ayrıca, sizin için daha net görünüyorsa, betiğiniz için "içe aktarma" yapmak üzere global değişkenlerin bir listesini de sağlayabilirsiniz.

function include2string($file, array $import = array()) { 
    extract(array_intersect_key($GLOBALS, array_fill_keys($import, 1))); 
    ob_start(); 
    include($file); 
    return ob_get_clean(); 
} 

Ve sen komut maruz edilmesini istediğiniz globaller bir listesini sunan çağırır:

$foo='bar'; 
$boo='far'; 
include2string('foo.php', array('foo')); 

foo.phpfoo değil boo görmek mümkün olmalıdır.

+0

Bir işlevde sarma ile ilgili sorun, değişken kapsamlıdır ... – DaveRandom

+0

@DaveRandom, iyi çağrı. – Prestaul

+0

Bu yanlış yaptığım şeydi. Başka bir cevapta bu yönteme rastladım, ancak değişkenler fonksiyonun kapsamı dışında ilan edildiğinden beyan edilmemiş değişken bir hatayı aldım. – ppp

0

Aşağıdakileri de kullanabilirsiniz ama yukarıdaki cevabı öneriyorum.PHP kılavuzunda

// How 1th 
$File = 'filepath'; 
$Content = file_get_contents($File); 

echo $Content; 

// How 2th 
function FileGetContents($File){ 
    if(!file_exists($File)){ 
     return null; 
    } 

    $Content = file_get_contents($File); 
    return $Content; 
} 

$FileContent = FileGetContents('filepath'); 
echo $FileContent; 

Fonksiyon: file_get_contents

+0

Bu, içeriği alır, ancak içerdiği PHP'yi çalıştırmaz ve ham PHP kodunu döndürür. – MrCode

+0

Doğru, OP yayınında anahtar kelime yürütme işlemini görmedim ... Soruyu yanlış anlamış olabilirdim. –

+0

@MrCode Ben() '(kötülük)' olabilir, ama yine de bir işlevde yapmaktan ve muhtemelen sadece daha pahalı ('include') ilk yer – DaveRandom

İlgili konular