[php]Как сгенерить страницу и посчитать её объём?

iakobi91

Так же, как поисковики считают объём страницы, на которой есть искомое слово. Как это сделать)

ppplva

Ничего не понял, как минимум одно слово лишнее.

iakobi91

http://www.yandex.ru/yandsearch?rpt=rad&text=asd
ASD
www.ASD.ru (7 КБ)
Найденные слова · Еще с сайта (3935)
Как посчитать объём такой страницы, если она генериться из пхп?

stat7819605

Если правильно понял, то можно с помощью "Управления выводом"

Типа:
ob_start
генерация
$size=ob_get_length;
ob_end_flush;

$size будет содержать длину данных в буфере.

А в яндексе наверно немного другой случай.

stat7819605

Не, не правильно понял.

Используй cURL или сокеты. Тебе ответом не php-код ведь вернется

ppplva

wget, и посмотреть размер файла.

iakobi91

подробнее не можешь разъяснить, а то в мануале долго копацца и мне нужно решение только этой задачи?

Andbar

поясни внятно, размер какой страницы тебе нужно знать и куда его писать?
Если той, которую ты клиенту отправляешь, придется немного поизвращаться: приблизительно тот-же код, который указал , только если нужно вписать размер в выдаваемую страницу, добавляешь вместо ob_end_flush; две строки:
ob_start;
//Весь вывод должен произойти после этой строки
//....
//генерация
//....
//весь вывод должен произойти до этой строки
$length = ob_get_length;
$content = ob_get_content;
ob_end_clean;
//теперь надо "вписать размер контента $length, полученный ранее (или по длине $content) в $content,
//например заменяя стандартную последовательность символов в шаблоне на размер,
//учитывая разницу длины стандартной последовательности и строки с размером
echo $content;//больше вывода не должно быть
Если же тебе надо узнать размер, который возвращает какая-то страница, то её просто надо получить.

kruzer25

Ты подробнее не можешь разъяснить, что тебе надо?
Яндекс ведь не сам ту страницу генерит, а берёт уже готовую с того сайта, где она генериться.

iakobi91

Есть страница по адресу www.page.com/index.php?par=... Мне нужно узнать, какой объем занимает сгенеренный на пхп html-код этой страницы. Я не знаю, как ещё можно это объяснить.

evgen5555

При чем тут PHP?
Смотришь Content-Length в заголовках, и всё.

stat7819605

Как всегда прав, но ПХП тут притом что заголовки, то тадо еще как-то получить.

Это как раз и делается с помощью cURL или сокетов.

Можно конечно и просто посмотреть размер полученной странтцы.

Пример с использованием cURL:

$url = 'http://www.google.com/';
$ch = curl_init;
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEPUT, 3);
$result = curl_exec($ch);

В переменной $result содерщимое страницы.

Чтоб получать только заголовки, есть какой-то параметр, ща не вспомню... В доках на php.ru посмотри.

kruzer25

Во-первых, причём тут
Как сгенерить страницу
?
Во-вторых, какая вообще разница, генерится она на пхп, или лежит там в статике? Для клиена это совершенно прозрачно, всё это делает сервер на www.page.com.
В-третьих - а в чём тогда проблема?

kruzer25

Смотришь Content-Length в заголовках, и всё
Если удалённая страница генерится, то с большой долей вероятности никакого Content-length не будет.

kruzer25

Всегда следует использовать максимально высокоуровненвые средства.
В данном случае, самый низкий уровень (если не считать, конечно, создание внешнего испольняемого файла на с и его исполнение, и прочие подобные вещи) - сокеты, уровень повыше - cURL, а самый высокий уровень (при разрешении устанавливать опции php.ini - должна быть включена опция allow_url_fopen или что-то такое) - file_get_contents и подобные. И не придётся задумываться о специфике файла - удалённая ли это веб-страница, генерящаяся на пхп; или это файл на фтп-сервере; или это локальный файл - всё равно всё будет работать.

iakobi91

пасибки всем. Все получаецца с помощью
$size = strlen(file_get_contents($file_url;

Andbar

пасибки всем. Все получаецца с помощью
$size = strlen(file_get_contents($file_url;
это значит, что политика безопасности неправильная. У тебя Денвер чтоли? Настрой по нормальному пхп. А именно, allow_url_fopen лучше в ноль выставить. Тогда, кстати, такой код не будет работать.

alexkravchuk

это значит, что политика безопасности неправильная. У тебя Денвер чтоли? Настрой по нормальному пхп. А именно, allow_url_fopen лучше в ноль выставить. Тогда, кстати, такой код не будет работать.
Из каких соображений подобное нужно блокировать? Не считаю это нормальной настройкой.
Другое дело, что такой код может некорректно работать и в других ситуациях, я часто сталкивался, например, с тем, что если пытаться читать что-то из инета через fread, то есть указать большой блок для чтения, то работает очень нестабильно с ряда сайтов, то есть работает, но часто соединение рвётся. Вполне возможно, что и в подобном случае может произойти чего-нибудь подобного.

stm7884696

на www.page.com
ты смотрел, куда ссылка ведет ?

johnny2000

полную хуйню сказал.

kruzer25

Я ссылку не делал.
Что ты придираешься к названиям? www.page.com сказал автор треда.

Andbar

Из каких соображений подобное нужно блокировать?
в некоторых случаях, это потенциальная дыра. Если надо работать со внешней информацией - лучше работать с ней явно, а не через fopen. Зато в тех местах, где со внешней информацией работать не следует, не придется проверять имя файла, если оно получается от клиента.
Замечу, что на большинстве хостингов (если это только не хороший платный хостинг) это дело скорее всего будет закрыто, т.к. админы, думаю, не дураки, чтобы давать возможность пользователям потенциальную дырку оставлять. (на сколько я понимаю, allow_url_fopen разрешает использовать удалённые файлы не только для fopen)

kruzer25

не придется проверять имя файла, если оно получается от клиента
Ага, а при работе через сокеты, можно подумать, имя файла вообще обрабатывать не придётся.
в некоторых случаях, это потенциальная дыра
Почему же по умолчанию она открыта?
Замечу, что на большинстве хостингов (если это только не хороший платный хостинг) это дело скорее всего будет закрыто, т.к. админы, думаю, не дураки, чтобы давать возможность пользователям потенциальную дырку оставлять.
Я уже сказал, когда этот способ не подойдёт.

Andbar

Ага, а при работе через сокеты, можно подумать, имя файла вообще обрабатывать не придётся.
ты будешь сознательно его обрабатывать
Почему же по умолчанию она открыта?
это не единственная потенциальная дыра, которую советуют прикрыть... Просто, например, для неопытного пользователя проще написать fopen, чем разбираться с cURL и, тем более, с сокетами.
Если где-то надо работать с сетью, лучше это делать явно... не знаю, почему, мне кажется так правильнее.

alexkravchuk

в некоторых случаях, это потенциальная дыра. Если надо работать со внешней информацией - лучше работать с ней явно, а не через fopen. Зато в тех местах, где со внешней информацией работать не следует, не придется проверять имя файла, если оно получается от клиента.
Не знаю, чем другие способы безопаснее, в использовании одной функции для чтения локальных и удалённых файлов я вижу лишь одну проблему, что враг подставит вместо url имя локального файла, про который он хочет что-то узнать, например исходник просмотреть какой-нибудь, файл с паролями и т.п.
Замечу, что на большинстве хостингов (если это только не хороший платный хостинг) это дело скорее всего будет закрыто, т.к. админы, думаю, не дураки, чтобы давать возможность пользователям потенциальную дырку оставлять. (на сколько я понимаю, allow_url_fopen разрешает использовать удалённые файлы не только для fopen)
Закрыто, но скорее всего из тех соображений, чтобы нельзя было использовать хостинг в качестве прокси-сервера, чтобы нельзя было использовать его для атак и т.п. И закрывают при этом вообще все исходящие соединения... Но это на бесплатных хостингах, на платных регистрируемых такое не практикуется, а дыр можно куда больше и куда более серьёзных понаделать, например при upload'е файлов, и много где ещё.
Оставить комментарий
Имя или ник:
Комментарий: