2011-12-14 7 views
5

Tutaj potrzebna jest odrobina pomocy PHP, zawarta w niej zawartość pojawia się jako "1", co oznacza, że ​​jest prawdziwa, ale potrzebuje jej zawartości i nie jest pewna, dlaczego tak się nie stało. Oto skrócona wersja funkcji:Korzystanie z include() w ramach ob_start()

public function content { 
    $website->content = 'Some content here. '; 
    ob_start(); 
    include('myfile.php'); 
    $file_content = ob_end_clean(); 
    $website->content .= $file_content; 
    $website->content .= ' Some more content here.'; 
    echo $website->content; 
} 

This wyjścia:

 
Some content here 
1 
Some more content here 

Kiedy potrzebuję go do wyjścia:

 
Some content here 
'Included file content here' 
Some more content here 

Każdy pomysł, w jaki sposób mogę rozwiązać ten problem?

Odpowiedz

8

Spróbuj użyć ob_get_clean() zamiast ob_end_clean().

Zarówno wyczyść bieżący bufor, ale ob_end_clean() zwraca wartość boolean, a ob_get_clean() zwraca zawartość bieżącego bufora.

+0

Dziękuję, to działa. –

2

Powinieneś używać ob_get_clean(), a nie ob_end_clean(). Ten pierwszy zwraca ciąg bufora wyjściowego i opróżnia go, podczas gdy drugi po prostu opróżnia i zwraca wartość logiczną.

2

Zamiast ob_end_clean zmodyfikować istniejący kod na coś podobnego do poniżej

ob_start(); 

include('myfile.php'); 

$file_content = ob_get_contents(); 

ob_end_clean(); 

Powodem nie będę głosować za ob_get_clean dlatego miałem czasy, gdy inni deweloperzy się mylić odnośnie tego, co jest naprawdę dzieje się tak, nazwa funkcji tak naprawdę nie stwierdza, że ​​buforowanie wyjściowe zakończy się po wywołaniu.

Myślę, że funkcja ta będzie podatna na dalsze błędy, dlatego korzystanie z niej jest łatwiejsze do zrozumienia i lepszej obsługi w przyszłości.

Kompromis pomiędzy dodatkowymi liniami kodu, ale łatwiejszym do zrozumienia jest warto.

Powiązane problemy