Освежитель для сайта
Один из основных способов привлечь посетителей на сайт — почаще обновлять содержащуюся на нем информацию. Заниматься этим совсем не просто и отбирает такое занятие слишком много времени, хотя, безусловно, и вознаграждается. В этой статье мы попытаемся запрограммировать этот процесс и сделать смену информации на сайте динамической. Было бы неплохо иметь самые свежие новости с 3DNews, синхронно с сайтом mycomp.com.ua показывать у себя содержание свежего МК, да и вообще иметь у себя на сайте всю свежатину, которую вы только захотите. Реализовывать все это мы будем на уже знакомом вам PHP. Получаем содержание свежего МК
Принцип работы нашего сценария будет следующим: сначала скачивается полностью весь HTML-код на странице, после чего определяется нужный участок, и скрипт выводит его на нашей странице. Для скачивания полного содержимого страницы используется функция file_get_contents(). Она принимает в качестве аргумента адрес страницы для скачивания и возвращает полный код указанной страницы. То есть, если мы напишем такой код:
Code
$www = file_get_contents(‘http://site.net’);
echo $www;
То получим полную копию сайта site.net, только следует учитывать, что если, к примеру, стоит тэг для вывода рисунка с неполным адресом, вида <img src="1.jpg">, то он, естественно, отображаться не будет, так как поиск рисунка будет вестись по каталогу, где размещен скрипт, который скачивает страницу. Для полного отображения рисунка следует использовать ссылку такого вида: <img src="http://mycomp.com.ua/1.jpg">. Для этого можно использовать функцию замены текста, примерно так:
Code
$www = str_replace('<img src="','<img src="http://mycomp.com.ua/',$www);
То же самое происходит, если переделать ссылки, заменив относительный адрес на полный:
Code
$www = str_replace('<a href="','<a href="http://mycomp.com.ua/',$www);
Итак, наша цель — заполучить содержание свежего номера МК и без всяких хлопот производить обновление на своем сайте синхронно с МК :-). Для этого заходим на сайт МК и находим содержание номера. Следует запомнить адрес, по какому оно находится, так как нам придется передавать его функции для скачивания страницы. Адрес имеет такой вид: http://mycomp.com.ua/issuetoc/. Но на странице помимо содержания есть еще много всякой информации, которая нам вовсе не нужна. Значит, надо как-то отсеять лишнее, выделив только то, что нам нужно. Для этого открываем исходный код страницы. Нам повезло — мы имеем дело с аккуратно оформленным кодом, разделенным комментариями, все просто и понятно. Это намного упрощает задачу, более того, фактически сводит ее к нулю :-). Находим комментарий <!-- ARTICLES --> — это начало, с этого места мы начинаем брать полезную информацию, с обложкой нового номера и списком статей. Конец этого всего тоже долго не пришлось искать, так как комментарий вполне красноречив: <!-- END ARTICLES -->.
Значит, теперь все, что нам остается сделать — это вывести всю информацию, которая находится между этими двумя комментариями. Код сценария:
Code
<?php
$www2 = file_get_contents('http://mycomp.com.ua/issuetoc/'); //скачивание страницы
$begin = strpos($www2,'<!-- ARTICLES -->'); //находим начало
$endl = strpos($www2,'<!-- END ARTICLES -->'); // находим конец
//вывод в цикле всей полезной информации
for($i=$begin;$i<$endl;$i++)
echo $www2[$i];
?>
Все работает отлично, только есть небольшая проблема: функция file_get_contents(), основная в этом сценарии, работает только в PHP версии 4.3 и выше. Явно возникнут трудности при загрузке на какой-то старенький сервер, на котором по той простой причине, что все работает нормально, давно уже не обновляли ПО. Но незаменимых функций нет, и мы напишем собственный код для скачивания страницы с других сайтов, который будет работать на любых версиях PHP. Итак, перепишем существующий код таким образом:
Code
<?php
$www2 = @file("'http://mycomp.com.ua/issuetoc/");
$www = '';
for($j=0;$j<count($www2);$j++)
$www .= $www2[$j];
$begin = strpos($www, '<!-- ARTICLES -->');
$endl = strpos($www, '<!-- END ARTICLES -->');
for($i=$begin;$i<$endl;$i++)
echo $www[$i];
?>
Почти ничего не изменилось, только теперь скачивание страницы производится с помощью функции file(), которая создает массив, элементами которого являются строки страницы. Далее весь массив складывается в одну строку, на2д которой мы проводим уже знакомые нам действия.