Как получить скомпиленую страницу

  • Автор темы -=GogA[qwe]=-
  • Дата начала

-=GogA[qwe]=-

Guest
Как получить скомпиленую страницу

Помогите, не могу найти ответ на вопрос: "Как получить скомпиленую страницу?"
 

-=GogA[qwe]=-

Guest
Как получить скомпиленую страницу

скомпиленная страница - то что "увидит" браузер, после отправки запроса на сервак. Тоесть вместо кода <?php print("<html>...</html>");?> он выведет <html>...</html>. А получить бы её в какую-нибудь переменную, или массив...
 

-=GogA[qwe]=-

Guest
Да, что-то основательно запутался. Вот ситуация: есть скрипт
tmp.php. Образно: "<?php print("<html>\r\n...код страницы...\r\n</html>"); ?>". Так вот, мне необходимо, чтобы в скрипте tmp2.php , допустим, в массив $amas[1]="<html>", $amas[со 2 по $n-1]="код страницы", $amas[$n]="</html>", где $n-количество строк в скомпиленом скрипте. В итоге: в массиве $amas будет содержаться все то, что нам покажет браузер, при отправке запроса на сервак. А далее с $amas будет можно делать всё, что душа пожелает...
 

-=GogA[qwe]=-

Guest
ob_get_contents - возвращает содержимое буфера вывода. Тоесть в результате работы скрипта tmp.php:
<?php
$buffer="";
function savebuf($buf)
{
global $buffer;
$buffer=$buf;
return ($buf);
}

ob_start("savebuf");
?>

КОД html

<?php
ob_end_flush();
print($buffer);
?>

КОД html будет дублирован. Это не совсем то, что мне нужно:
т.к. ob_get_contents - возвращает содержимое буфера вывода надо вызывать этот скрипт, как я понимаю. Но мне более интересно, чтобы был тотже результат, только без вывода:
мне нужно чтобы в скрипте tmp2.php переменная $buf2 была равна переменной $buffer из скрипта tmp.php, без загрузки в браузере tmp.php.

Здорово, если это возможно:))
 

-=GogA[qwe]=-

Guest
include (и require): "Если подключение возникает внутри функции в вызывающем файле, то весь код, содержащийся во включаемом файле, будет работать так, как если бы он был определён внутри. Так что он будет следовать области видимости переменной."
Тоесть, если бы можно было подключить include, чтобы небыло вывода, а передовать его через return:
tmp.php
<?php
$buffer="";
function savebuf($buf)
{
global $buffer;
$buffer=$buf;
return ($buf);
}

ob_start("savebuf");

ОСТАЛЬНОЙ КОД

ob_end_flush();
return $buffer;
?>

info.php
<?php
$buf=include ("tmp.php");
print($buf);
?>

В итоге при запросе info.php мы получим страничку, где ОСТАЛЬНОЙ КОД будет дублирован: по одному разу include и print. А вывод не требуется, нужно просто проанализировать html код >> пусть ОСТАЛЬНОЙ КОД и храниться в $buf...

ну вот... теперь не знаю что и делать...

зы. никогда раньше не фидал форума по пхп, подобного phpclub.ru - удобно, просто, быстро.
 

Demiurg

Guest
-=GogA[qwe]=-
скажи, а что ты делаешь, что тебе понадобелись такие вещи ?
 

-=GogA[qwe]=-

Guest
Надо проанализировать страничку, на своём сайте: есть php код (в файле), мне нужно получить итог выполнения скрипта: тоесть html код скомпиленой странички, и по результату выдать пользователю ответ. Страничка выбирается пользователем.

Пока остановился на include. Делаю так:
<?php
$buffer="";
function savebuf($buf)
{
global $buffer;
$buffer=$buf;
return ($buf);
}
ob_start("savebuf");

ОСТАЛЬНОЙ КОД

А здесь надо либо:
ob_end_clean();
return $buffer;
Либо:
ob_end_flush();


Выбор в зависимости откуда была загружена страничка.

Если этот скрипт вызван по запросу на анализ, то выбипаем:
ob_end_clean();
return $buffer;
Тогда страничка для анализа не "попортиться" вставленым кодом, который, как видно, будет в $buffer (код html).

А если пользователь запрашивает запрос на просмотр этой странички, тогда:
ob_end_flush();
и буфер вывода не будет очищен и пользователь получит требуемый код...

Проблема:

как передать через include какую-нибудь переменную
(вообще как передать, а не только конкретно для этого случая)
 

fixxxer

К.О.
Партнер клуба
не надо ничего передавать.
все переменные доступны внутри инклюдника.
 

Demiurg

Guest
-=GogA[qwe]=-
ты толком ничего не объеснил. "Надо проаналезировать страничку" - это тоже, что надо почитать текст. прямым ответом будет : "php не предназначенн для анализирования страничек, он нужен для их генерирования."
 

-=GogA[qwe]=-

Guest
fixxxer
Толкнул на мысль, что переменную надо хранить не в подключаемом скрипте, а в скрипте, в который подключается:):
в анализирующем скрипте создать переменную, а в остальных (по которым возможен анализ) проверять, если переменная чиста (неопределена), то ob_end_flush();, иначе ob_end_clean(); :))

Моя идея:
в "анализирующем" скрипте:
<?php
$buffer="";
function savebuf($buf)
{
global $buffer;
$buffer=$buf;
return ($buf);
}
КОД
ob_start("savebuf");
include_once($namepage);
ob_end_clean();
КОД
?>

В итоге переменная $buffer будет содержать искомый html код, полученый в результате компиляции серверного скрипта $namepage. Что и требовалось.

Demiurg.
Суть: пользователь выбирает страничку сайта, несколько или все... (include_once($namepage); можно и в цикле, а $buffer - массив). В итоге $buffer содержит html код запрошенной страницы (страниц). Далее делаем strip_tags... и можно работать с текстом на странице... (разгул для статистиков:)) Далее с этим текстом я делаю, что хочу: можно устроить поиск слов и словосочетаний, вести их подсчет, заниматься сбором информации и т.д. - воля для разума и рук... Главное, что из подключаемях через инклуды функции не будут обделены вниманием (так у меня генерится шапка, менюшка, дизайн, комментарии...). В данном случае, так как коментарии храняться отдельно, то не будет проблемы и с ними, всё будет в $buffer'е...
Хотя на счет комментариев надо будет подумать, так как при их обилии они разделяются....

Остался только один вопрос: как быстро это будет работать и есть ли какой-нибудь другой, более эффективный способ.

Да, и всем спасибо, что откликнулись и помогли:)
 

Demiurg

Guest
C задачи ты скатился на реализацию, предложеную тобой. Если тебе нужен некий поиск по словам, то просто храни записи вида (id страницы, слово), потом по этим саписям легко будет выбрать объенедения, пересечения и все что угодно. Записи эти могут ежемесечно/ужедневно/ежечасно обнавляться.
 

-=GogA[qwe]=-

Guest
Автор оригинала: Demiurg
Если тебе нужен некий поиск по словам, то просто храни записи вида (id страницы, слово), потом по этим записям легко будет выбрать объенедения, пересечения и все что угодно. Записи эти могут ежемесечно/ужедневно/ежечасно обновляться.
Проблема первая: надо хранить эти id и слова, когда проще разбивать текст на лету с помощью
PHP:
split()
, хотя ото несколько будет медлено, но при небольшом объёме сайта - приемлемо:))
Проблема вторая: на страницах с статьями можно добавлять коментарии.... Осенило... при добавлении коментариев можно производить эту "индексацию"... и всё будет работать здорово!

зы. есть скрипт. в нем несколько инклудов. так вот, если в этих инклудах есть инклуды (извините за корявый язык) на один и тотже скрипт, то облом:(( а в нём все константы:)) include_once тоже не помогает:(( проблема с redeclare..
 

IntenT

SkyDiver
Инклюдь этот один и тот-же скрипт include_once.
Другое дело, если у тебя в разных инклюдах названия функций одинаковые
 

Demiurg

Guest
Индексировать надо снаружи, т.е. как видет пользователь. А там хоть 500 вложеных инклудов.
 
Сверху