Próbowałem:Jak zdefiniować PHP jako ciąg znaków?
$test = include 'test.php';
Ale to właśnie ten plik zawiera zwykle
Próbowałem:Jak zdefiniować PHP jako ciąg znaków?
$test = include 'test.php';
Ale to właśnie ten plik zawiera zwykle
Będziemy chcieli przyjrzeć się funkcji buforowania wyjścia.
//get anything that's in the output buffer, and empty the buffer
$oldContent = ob_get_clean();
//start buffering again
ob_start();
//include file, capturing output into the output buffer
include "test.php";
//get current output buffer (output from test.php)
$myContent = ob_get_clean();
//start output buffering again.
ob_start();
//put the old contents of the output buffer back
echo $oldContent;
EDIT:
Jak Jeremy zwraca uwagę, bufory wyjściowe stosu. Możesz teoretycznie po prostu zrobić coś takiego:
<?PHP
function return_output($file){
ob_start();
include $file;
return ob_get_clean();
}
$content = return_output('some/file.php');
To powinno być równoważne z moim bardziej szczegółowym oryginalnym rozwiązaniem.
Ale nie zawracałem sobie głowy przetestowaniem tego.
Dlaczego konieczne jest zatrzymanie istniejących buforów? Bufory wyjściowe w stosie PHP: http://php.net/ob_start –
Nie jest - po prostu nie zauważyłem możliwości układania w stosy. Edytuję moją odpowiedź. – timdev
Wypróbuj file_get_contents()
.
Funkcja ta jest podobna do
file()
, chyba żefile_get_contents()
zwraca plik w ciąg.
Zdecydowanie najlepsza odpowiedź tutaj. Krótki. Mądry. –
spróbować czegoś jak:
ob_start();
include('test.php');
$content = ob_get_clean();
Można użyć funkcji file_get_contents
.
Zastanawiam się, dlaczego ludzie sugerują buforowanie wyjściowe, gdy jest to o wiele prostsze. –
Być może dlatego, że file_get_contents nie wykonuje kodu PHP w pliku? – fool4jesus
Rozwiązanie nr 1: użycie Marka include (działa podobnie jak funkcja): [Mój najlepszym rozwiązaniem] index.php
Plik: included.php
<?php
$bar = 'BAR';
$php_file = include 'included.php';
print $php_file;
?>
Plik:
<?php
$foo = 'FOO';
return $foo.' '.$bar;
?>
<p>test HTML</p>
Spowoduje to wyświetlenie FOO BAR
, ale Uwaga: Praca s jak funkcja, a więc RETURN karty miejskiej zawartość z powrotem do zmiennej (<p>test HTML</p>
zostaną utracone w wyżej)
Rozwiązanie nr 2: op_buffer():
index.phpPlik:
<?php
$bar = 'BAR';
ob_start();
include 'included.php';
$test_file = ob_get_clean(); //note on ob_get_contents below
print $test_file;
?>
Plik dołączony.php:
<?php
$foo = 'FOO';
print $foo.' '.$bar;
?>
<p>test HTML</p>
Jeśli używasz ob_get_contents()
będzie wyjście FOO BAR<p>test HTML</p>
DWUKROTNIE, upewnij się, że używasz ob_get_clean()
Rozwiązanie 3: file_get_contents():
indeksu pliku. php:
<?php
$bar = 'BAR';
$test_file = eval(file_get_contents('included.php'));
print $test_file;
?>
included.php
Plik:
$foo = 'FOO';
print $foo.' '.$bar;
Wyjście wola FOO BAR
, ale Uwaga: Include.php nie powinien mieć <?php
otwierających i zamykających znaczników jak używasz go przez eval()
Jedynym powodem, dla którego bufor wyprowadziłby dwa razy, jest bufor, który nie został zatrzymany, a następnie wyczyszczony przed końcem pliku, co oznacza, że bufor jest automatycznie odtwarzany echem. Być może to jest problem, który masz. – worldofjr
Aah, dzięki @worldofjr, nie byłeś naprawdę konkretny, ale wskazałeś mi właściwy kierunek na OB; 'ob_get_contents()' powinno być 'ob_get_clean()' w przeciwnym razie wyprowadza dwa razy. Odpowiedź jest odpowiednio edytowana. – Duncanmoo
The inne odpowiedzi, z nieznanych mi powodów, nie do końca docierają do właściwego rozwiązania.
Proponuję użyć bufora, ale musisz pobrać zawartość, a następnie wyczyścić bufor przed końcem strony, w przeciwnym razie zostanie wyprowadzony. Jeśli chcesz użyć danych wyjściowych z dołączonego pliku, powinieneś użyć op_get_contents()
, która zwróci ciąg zawartości bufora.
Nie musisz też zamykać pętli, ponieważ każdy z nich będzie po prostu dodawany do bufora (chyba że najpierw go wyczyścisz).
Można zatem użyć następujących;
ob_start();
include_once('test.php');
include_once('test2.php');
$contents = ob_get_contents();
ob_end_clean();
Mam nadzieję, że to pomoże.
Czy możesz być bardziej grzeczny? –
Co chcesz osiągnąć? Że zawartość test.php jest przechowywana w $ test? – Boldewyn