Как можно получить в переменную значение тэга <title> средствами php?
Чтобы было яснее добавлю что это нужно для счётчика посещений по страницам. Код счётчика включается в страницу блоком через require и идентификация этой страницы происходит по её адресу (url). Но чтение статистики не удобно, вся информация генерируется автоматически, название страницы не могу найти как можно получить средствами php, поэтому название страницы приходиться вводить в файл отчёта вручную; пока при автоматическом создании отчёта в отчёте записывается вместо имени страницы "имя не введено".
Вместо этого "имя не введено" можно было-бы вставлять то что находится в тэге <title>. Пример работы по адресу http://волшебный-брелок.рф/schet/po-stranicam.php
Спустя 1 час, 12 минут, 35 секунд (18.02.2011 - 10:22) Demjan написал(а):
Если не средствами php - то как вообще можно получить это значение?
Спустя 31 минута, 43 секунды (18.02.2011 - 10:54) Evilsoul написал(а):
Не знаю зачем оно тебе, но если ты уж так хочешь, то тебе нужно получить и записать всё содержимое страницы в строку, потом вытащить то что между тэгами тайтл записать в переменную и обработать как душе будет угодно.
Спустя 3 минуты, 47 секунд (18.02.2011 - 10:58) Demjan написал(а):
Evilsoul, как это - записать в строку?
Спустя 18 минут, 40 секунд (18.02.2011 - 11:17) Evilsoul написал(а):
Ну я использовал такой метод:
curl_setopt — Set an option for a cURL transfer
ну а здесь, опции, под себя можешь настроить
$link = 'http://google.com'; // Адресс
$ch = curl_init($link); // Инициализируем сеанс CURL
curl_setopt($ch, CURLOPT_HEADER, 1); // Получаем заголовок
curl_setopt($ch, CURLOPT_NOBODY, 1); // Тело страницы не загружаем
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Возвращаем результат
$res = curl_exec($ch); // Записываем его в переменную
curl_close($ch); // Завершаем сеанс и освобождаем ресурсы
curl_setopt — Set an option for a cURL transfer
ну а здесь, опции, под себя можешь настроить
Спустя 1 минута, 59 секунд (18.02.2011 - 11:18) Evilsoul написал(а):
Ну а вот описание библиотеки
Спустя 4 минуты, 58 секунд (18.02.2011 - 11:23) twin написал(а):
Ой... Зачем заголовки то курлом...
get_headers
get_headers
Спустя 7 минут, 2 секунды (18.02.2011 - 11:30) Evilsoul написал(а):
twin
Штука прикольная, спасибо, буду знать, ток что-то я не понял, а где содержимое заголовка? И что такое ETag:?
Штука прикольная, спасибо, буду знать, ток что-то я не понял, а где содержимое заголовка? И что такое ETag:?
Спустя 12 минут, 16 секунд (18.02.2011 - 11:43) twin написал(а):
$res = get_headers('http://google.com');Так понятнее? :)
print_r($res);
А что такое ETag: понятия не имею... Какой то гугловский прикол наверно.
Спустя 10 минут, 22 секунды (18.02.2011 - 11:53) Evilsoul написал(а):
twin
Наверное я совсем болван :)
Где вот это:
КиноПоиск.ru. Все фильмы планеты
Наверное я совсем болван :)
$res = get_headers('http://kinopoisk.ru');
echo '<pre>';
print_r($res);
echo '</pre>';
Array
(
[0] => HTTP/1.1 301 Moved Permanently
[1] => Server: nginx/0.7.62
[2] => Date: Fri, 18 Feb 2011 08:51:01 GMT
[3] => Content-Type: text/html
[4] => Content-Length: 185
[5] => Connection: close
[6] => Location: http://www.kinopoisk.ru/
[7] => HTTP/1.1 200 OK
[8] => Server: nginx/0.7.62
[9] => Date: Fri, 18 Feb 2011 08:51:03 GMT
[10] => Content-Type: text/html; charset=WINDOWS-1251
[11] => Connection: close
[12] => X-Powered-By: PHP/5.2.10-2ubuntu6.5
[13] => Set-Cookie: PHPSESSID=f08685a5ea8176a773aa645ecb13018e; path=/; domain=kinopoisk.ru
[14] => Expires: Thu, 19 Nov 1981 08:52:00 GMT
[15] => Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
[16] => Pragma: no-cache
[17] => Set-Cookie: user_country=ua; expires=Mon, 28-Feb-2011 08:51:01 GMT; path=/; domain=.kinopoisk.ru
)
Где вот это:
<title>
КиноПоиск.ru. Все фильмы планеты
</title>
Спустя 4 минуты, 18 секунд (18.02.2011 - 11:57) Evilsoul написал(а):
У гугла ETag: нету, это я в твоем справочнике вычитал
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 20 минут, 13 секунд (18.02.2011 - 12:18) sergeiss написал(а):
Какие хедеры, какие курлы? Хорошо хоть, не предложили на Си написать свою библиотеку, да еще с активным использованием ООП ![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Речь идет о том, что надо посчитать страницу, на которой уже находишься.
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Речь идет о том, что надо посчитать страницу, на которой уже находишься.
Цитата (Demjan @ 18.02.2011 - 10:10) |
Чтобы было яснее добавлю что это нужно для счётчика посещений по страницам. Код счётчика включается в страницу блоком через require и идентификация этой страницы происходит по её адресу (url). |
Перед подключением этой страницы (перед require) пропиши переменную, например $info_for_stat. Для каждой страницы она будет уникальная. А внутри кода счетчика смотри, чему равна эта переменная. И используй это ЗНАНИЕ
![biggrin.gif](http://phpforum.ru/html/emoticons/biggrin.gif)
Спустя 12 минут, 33 секунды (18.02.2011 - 12:30) twin написал(а):
sergeiss
Цитата |
Какие хедеры, какие курлы? |
Да это понятно. Я просто показал, как заголовки смотреть.
Evilsoul
Цитата |
У гугла ETag: нету, это я в твоем справочнике вычитал |
тем более фз..
Цитата |
Где вот это: <title> КиноПоиск.ru. Все фильмы планеты </title> |
а что, курлом есть? в твоем варианте?
Спустя 5 часов, 10 минут, 31 секунда (18.02.2011 - 17:41) Demjan написал(а):
Работает! get_headers запрещён хостером, curl получает содержимое в переменную, режу, достаю. Жалко только что приходится всю страницу в переменную загонять, думал это можно сделать поаккуратнее без скачивания и обработки лишнего кода. А раз нет - значит нет, хорошо что вообще работает
Всем всем спасибо!
![biggrin.gif](http://phpforum.ru/html/emoticons/biggrin.gif)
Спустя 2 часа, 50 минут, 18 секунд (18.02.2011 - 20:31) sergeiss написал(а):
Цитата (Demjan @ 18.02.2011 - 18:41) |
Жалко только что приходится всю страницу в переменную загонять |
Вот эту фразу не понял... Зачем всю страницу в переменную загонять? И какую страницу?
Спустя 11 минут, 15 секунд (18.02.2011 - 20:42) Demjan написал(а):
Мне нужно именно значение <title>, получаю всю страницу (правда я запутался и сейчас не могу разобраться), потом обрезаю её сначала explode("</title>",$res), потом explode("<title>",$res).
Но тут засада: сервер перегружается, выдаёт ошибку 500, не могу сообразить где ошибка. Может быть из-за того что страница запрашивает саму себя... ?
Но тут засада: сервер перегружается, выдаёт ошибку 500, не могу сообразить где ошибка. Может быть из-за того что страница запрашивает саму себя... ?
$link = "http://xn----9sbbbpdzlcgrijz7i4b.xn--p1ai".$_SERVER['REQUEST_URI'];
Спустя 29 минут, 3 секунды (18.02.2011 - 21:11) sergeiss написал(а):
Я чего-то вообще не понял... Зачем грузить всю страницу куда-то??? Я не понял, как ты ее грузишь... Возможно, ты просто устраиваешь бесконечный цикл загрузки страницей саму себя, что просто тупо приводит к достижению лимита памяти. После чего скрипт "благополучно" падает.
Кто (или что) тебе мешает сделать примерно так, как я уже писал в этой теме:
на другой странице делаешь
и так далее...
А в коде счетчика только учитываешь, что прописано в переменной $info_for_stat.
Я не пойму - или я тебя совсем не понимаю, или ты упёрся с поиском тайтла и не хочешь глянуть на другой подход.
Кто (или что) тебе мешает сделать примерно так, как я уже писал в этой теме:
$info_for_stat='page001';
require( 'counter_code.php' );
на другой странице делаешь
$info_for_stat='page002';
require( 'counter_code.php' );
и так далее...
А в коде счетчика только учитываешь, что прописано в переменной $info_for_stat.
Я не пойму - или я тебя совсем не понимаю, или ты упёрся с поиском тайтла и не хочешь глянуть на другой подход.
Спустя 1 час, 37 минут, 31 секунда (18.02.2011 - 22:49) Demjan написал(а):
Достал:
$link = "http://волшебный-брелок.рф"; // адрес страницы
$ch = curl_init($link); // инициализируем сеанс CURL
curl_setopt($ch, CURLOPT_HEADER, 0); // не загружаем заголовок
curl_setopt($ch, CURLOPT_NOBODY, 0); // тело страницы загружаем
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвращаем результат
$result = curl_exec($ch); // записываем его в переменную
curl_close($ch); // завершаем сеанс и освобождаем ресурсы
$res2=explode("title>",$result);
$res3=str_replace("</","",$res2[1]);
echo $res3 ;