- •Оглавление
- •Что такое интернет
- •Готовимся к созданию Web-страниц
- •Железо, железо и еще раз железо...
- •Домашняя эргономика — безопасность прежде всего!
- •Программное обеспечение для Web-мастера
- •Выбор хостинга
- •Знакомьтесь — РНР
- •История создания РНР
- •Установка РНР
- •Настройка РНР для Apache
- •Виртуальные хосты в Apache
- •Тестирование РНР
- •Установка и настройка дополнительных модулей
- •Переносимость и совместимость
- •Синтаксис РНР
- •Возможности РНР
- •Работа с базами данных
- •HTTP-аутентификация средствами РНР
- •Работа с изображениями
- •Поддержка закачки файлов
- •Поддержка HTTP-cookie
- •Использование регулярных выражений
- •Обработка ошибок
- •Управление электронными письмами
- •Вывод на экран и переменные в РНР
- •Простейшие арифметические операции
- •Простейшие логические операции
- •Циклы
- •Массивы
- •Работа со строками
- •Сессии
- •Программирование на РНР
- •Сравнение чисел
- •Вложение файлов в документ
- •Простейший счетчик посещений
- •Обработка форм
- •Отправление почты
- •Отправление письма в HTML-формате
- •Дата по-русски
- •Счетчик посещений с использованием базы данных
- •Счетчик персональной посещаемости
- •Сохраняем информацию о посещениях
- •Ах, баннеры, баннеры...
- •Счетчик посещений с выводом информации на экран
- •Счетчик сессий
- •Создание динамического меню
- •«Грабим» странички
- •Голосование на сайте
- •Гостевая книга
- •Технология создания
- •Свой чат — это просто
- •Использование специального привата
- •Интернет-магазин
- •Технология создания
- •Сервисы интернет-магазина
- •Архив рассылок
- •Совет первый: а нужно ли вам это?
- •Совет второй: забудьте все советы
- •Пример системы безопасности
- •HTTP-аутентификация в РНР
- •Защита программы
- •РНР в вопросах и ответах
- •Приложения
- •Приложение 3. Некоторые функции РНР
- •Приложение 4. Cookie
- •Приложение 5. Методы передачи данных POST и GET
- •Приложение 6. Время Unix
«Грабим» странички |
121 |
хватит места, чтобы сделать запись, он обнулит файл и ничего в него не запишет. А все ваши прежние данные будут просто утеряны.Частовобъемсайтавходятlog-файлы,почтаит.д.Это тоже надоучитывать в своей работе.
«Грабим»1странички
Не бойтесь, ничего криминального в этом нет. Речь идет о переносе информации со страницы в интернете на вашу страницу. Нам понадобится «подопытный кролик», на роль которого я предлагаю выбрать сайт http://subscribe.ru.
Там много полезной информации, и есть то, что нашим посетителям может действительно пригодиться. Я имею в виду список рассылок, недавно переведенных в категорию «серебряных».
Сделаем так, чтобы посетители нашего сайта смогли подписаться на понравившиеся им рассылки сразу на нашем сайте.
Сначала нам потребуется адрес сайта, с которого будем «грабить» информацию. Например: http://win.subscribe.ru/catalog/ latest.
ВНИМАНИЕ
Намоментнаписаниякнигивсеуказанныетутадресабылиработоспособными. Однако это не значит, что они останутся таки- миивдальнейшем,потомучто,какизвестно,интернет-адреса достаточночастоменяются.Вэтомслучаематериалможетслужитьхорошимтеоретическим пособием и все равно нетеряет своего смысла.
По указанному адресу мы находим все переведенные в категорию «серебряных» рассылки. Причем список постоянно обновляется, оставаясь таким образом актуальным всегда, и в коде мы должны будем учесть эти изменения.
Сначала приведем весь код, затем поясним его.
«Грабить» от англ. grab (хватать, захватывать). (Примеч. ред.)
122 |
Программирование |
<?php
// начало
$link = "http://win.subscribe.ru/catalog/latest"; $file = @fopen($link, "r");
if ($file) {
$rf = fread($file, 200000);
fclose ($file);
} else
{
echo "<h3 align=сеnter>Извините, запрошенная страница временно не доступна!</h3>
<center>
<IMG src=http://virtual.bresttelecom.by/banner.jpg width=468 height=60 border=0 alt=\"Виртуальный Брест\">
</A><br><br>";
}
// этап 1
$rf = trim (chop ($rf));
$s = strpos($rf, "<!-noindex-><FORM", 0) ; $rf = substr($rf, $s);
// этап 2
$s = strpos($rf, "<!-/noindex-><table") ; $rf = substr($rf, 0, $s) ;
// этап 3
$rf = str_replace ("/catalog/","http://win.subscribe.ru/ catalog/",
$rf);
$rf = str_replace ("/archive/","http://win.subscribe.ru/ archive/",
$rf);
$rf = str_replace ("ACTION=/member/
«Грабим» странички |
123 |
quick", "ACTION=http://win.subscribe.ru/member/quick", $rf) ; $rf = str_replace ("/img/money2.gif","http:// win.subscribe.ru/money2.gif", $rf);
$rf = str_replace ("/img/all4.gif","http://win.subscribe.ru/ af.gif", $rf);
$rf = str_replace ("/img/af.gif","http://win.subscribe.ru/ af.gif", $rf) ;
// этап 4 echo $rf; ?>
Теперь опишем код. В самом начале нам нужно скопировать содержимое страницы. Записываем ее адрес и открываем по нему соединение. Если соединение успешно установлено, можно считать весь файл (указываем 200 000 байтов для считывания, что явно больше размера открываемого файла). Если произошла ошибка открытия, предупреждаем об этом посетителя и выводим ему что угодно, например баннер.
Далее рассмотрим код по обозначенным этапам. Этап 1 начинается со строки:
$rf = trim (chop ($rf));
Этой комбинацией мы значительно уменьшим объем обрабатываемых данных, так как уберем повторяющиеся пробелы, а также пробелы в конце и в начале файла.
Потом нам нужно определиться с местом, из которого будем выводить информацию:
$s = strpos($rf, "<!-noindex-><FORM", 0) ;
Эта команда позволяет найти номер позиции указанной последовательности символов в строке, в которую мы считали весь код файла. Результат помещается в переменную $s.
Следующей строкой удаляем все, что находится перед этой комбинацией (в том числе и баннеры):
$rf = s u b s t r ( $ r f , $ s ) ;
124 |
Программирование на РНР |
Этап 2. Делаем почти то же самое, что и на первом этапе, но только для конца файла. Файл оказывается обрезан с начала и с конца так, как мы задаем. Обратите внимание, что в данном случае все оказалось очень просто, но иногда приходится применять другие методы для выделения кода, границы которого иногда трудно определить.
В результате этой обработки у нас уже есть почти все, что надо. Теперь можно было бы просто вывести информацию на экран нашему посетителю, но есть один нюанс, который нужно учитывать: ссылки не абсолютные, а относительные.
Однако относительных ссылок не так много, поэтому проблема решается просто.
Этап 3. Заменяем то, что есть, на то, что нам нужно. Например:
$rf = str_replace
("/catalog/","http://win.subscribe.ru/catalog/", $rf);
Так мы заменяем во всей строке $rf относительные ссылки на абсолютные. Точно так же поступаем с остальными ссылками, которые встречаются в коде страницы. Это не очень оптимальное решение, но достаточно точное.
Этап 4. Выводим результат на экран посетителю. А этот результат — нужный нам код HTML-страницы, который и будет отображен браузером.
Если вы хотите интегрировать этот код в код своей страницы, вам скорее всего придется сделать еще одно — «подогнать» ширину таблиц. Ничего сложного в этом нет: находим, какой параметр отвечает за размер страницы, и заменяем его значение на пустую строку.
Перед запуском скрипта убедитесь в том, что все указанные адреса действительно существуют и содержат необходимую информацию в нужной форме. Иначе ваши посетители будут очень недовольны вашей работой.
