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, коробки с контентом и многие другие файлы на моем веб-сайте стали забавными и, возможно, были повреждены. Как только я повторно загрузил весь свой сайт (хотя никаких изменений в коде не произошло), мой сайт, который работал медленно, теперь работает очень быстро, и все проблемы исчезли. У меня тоже были повреждены файлы с другими хостами, так что имейте это в виду, если в будущем у вас тоже будут странные вещи.

Author: Craig White, 2013-03-01

2 answers

Ваш код выполнен правильно, потому что именно так работает ob_get_clean:

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."}");
?>
 3
Author: , 2013-02-28 23:10:51

Попробуйте выполнить следующее:

Добавьте это в начало test.php

<?php include("empty_file.php"); ?>

Содержание empty_file.php :

<?php
echo "";
?>
 0
Author: Shehabic, 2013-02-28 23:08:15