ob начать и включить проблему
Наш веб-сайт работает уже пару лет, и что-то изменилось, что действительно странно. Я пытался поговорить с хостингом, но ничего не решается.
Проблема в том, что все, что перед первым тегом <?php
в первом включенном файле, выводится непосредственно перед входом в OB
Например:
<?php
ob_start();
?>
<h1>Welcome</h1>
<?php
include('contentbox1.php');
include('contentbox2.php');
include('contentbox3.php');
?>
<b>Bye</b>
<?php
$content = ob_get_contents();
ob_end_clean();
echo("Included{".$content."}");
?>
Выводится следующее: (Обратите внимание, что <h1>Welcome</h1>
не совпадает с остальным содержимым, которое было выведено внутри буфера)
<h1>Welcome</h1>
Included{
<div id="contentbox1"></div>
<div id="contentbox2"></div>
<div id="contentbox3"></div>
<b>Bye</b>
}
Что за правильный вывод должен быть (и находится на моем локальном компьютере):
Included{
<h1>Welcome</h1>
<div id="contentbox1"></div>
<div id="contentbox2"></div>
<div id="contentbox3"></div>
<b>Bye</b>
}
Это вызывает серьезные проблемы на нашем сайте, и я не могу понять, почему. Он отлично работает на моем локальном компьютере, просто не на хостинге, с которым мы работаем уже много лет.
РЕШЕНИЕ:
Оказывается, пока я повторно загружал test.php
, коробки с контентом и многие другие файлы на моем веб-сайте стали забавными и, возможно, были повреждены. Как только я повторно загрузил весь свой сайт (хотя никаких изменений в коде не произошло), мой сайт, который работал медленно, теперь работает очень быстро, и все проблемы исчезли. У меня тоже были повреждены файлы с другими хостами, так что имейте это в виду, если в будущем у вас тоже будут странные вещи.
2 answers
Ваш код выполнен правильно, потому что именно так работает ob_get_clean:
ob_get_clean — Get current buffer contents and delete current output buffer
Возвращает содержимое выходного буфера и завершает буферизацию вывода . Если буферизация вывода не активна, возвращается значение FALSE.
Используйте ob_get_contents();
ob_start();
include('test.php');
$content = ob_get_contents();
ob_end_clean();
echo("Included{".$content."}");
Обновление:
<?php
ob_start();
?>
<h1>Welcome</h1>
<?php
include('contentbox1.php');
include('contentbox2.php');
include('contentbox3.php');
?>
<b>Bye</b>
<?php
$content = ob_get_contents();
ob_end_clean();
echo("Included{".$content."}");
?>
Попробуйте выполнить следующее:
Добавьте это в начало test.php
<?php include("empty_file.php"); ?>
Содержание empty_file.php :
<?php
echo "";
?>