И так, начнем.
К примеру будем грабить сайт http://mobfun.org/down/
Приступим.
Создаем папку в корне сайта с любым удобным названием. Так как на сайте-жертве используется мод_реврайт, то и и мы будем его использовать (не обязательно, но так удобнее)
Создаем в папке граббера файл .htaccess со следующим содержимым:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
Мы создали правило, которое будет перенаправлять все запросы на index.php.
Теперь создадим папку includes, в ней создаем файл core.php со следующим содержимым:
//Скрываем файл от левых глаз
defined ('SYSTEM') or exit;
//Функция, которая получает страницу жертвы через cURL
function getContent($url) {
$ch = curl_init(); //Запускаем сеанс cURL
curl_setopt($ch, CURLOPT_URL, $url); //Передаем адрес страницы
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); //Задаем таймаут в секундах
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); //Говорим cURL что результат нужно вернуть в переменную
curl_setopt($ch, CURLOPT_USERAGENT, 'Opera 11'); //Задаем юзерагент
curl_setopt($ch, CURLOPT_REFERER, 'http://mobfun.org/'); //Передаем реферер
$result = curl_exec($ch); //Выполняем
curl_close($ch); //Закрываем сеанс cURL
return $result; //Возвращаем результат
}
//Функция очистки кеша
function clearCache($dir) {
$read = array_diff(scandir($dir), array('.', '..', '.htaccess')); //читаем папку
foreach($read as $file) { //перебираем массив
if(is_file($dir . '/' . $file)) //если это файл
unlink($dir . '/' . $file); //то удаляем
else //иначе
continue; //продолжаем дальше
}
}
//Функция проверки даты последней чистки кэша и очистка кэша в случае необходимости
function checkCache($dir, $time = 24) {
$file = $dir . '/lastclean.dat'; //Путь к файлу, который указывает дату последней очистки
if(!file_exists($file))
file_put_contents($file, 1); //если файл очистки не существует. то создаем
if(filemtime($file) < (time() - $time * 3600)) //если кэш чистился больше $time часов назад, то чистим
clearCahce($dir); //чистим
}
//Объявляем константы и переменные
define ('DIR', dirname($_SERVER['PHP_SELF'])); //Определяем имя папки с граббером
define ('URL', 'http://mobfun.org/down/' . strtr($_SERVER['REQUEST_URI'], array(DIR => '', '//' => '/', '\\' => '/'))); //Определяем URL текущей страницы
define ('CTIME', 24); //Время жизни кеша в часах
define ('CACHE', 'cache/' . md5(URL)); //Объявляем файл кеша
checkCache('cache', CTIME); // проверяем кэш на время существования
теперь в папке с граббером создаем файл index.php
со следующим содержимым
//Задаем путь к корню
$rootpath = $_SERVER['DOCUMENT_ROOT'] . '/';
//Подключаем файл функций
define ('SYSTEM', TRUE);
require 'includes/core.php';
//Подключаем ядро джона
define ('_IN_JOHNCMS', TRUE);
require $rootpath . 'incfiles/core.php';
//Объявляем headmod
$headmod = substr(CACHE, 0, 7); //Делаем хэедмод динамическим для учета переходов в онлайне
//Объявляем титл страницы
$textl = 'Качай бесплатно';
//Проверяем, существует ли файл кеша для данной страницы
if(file_exists(CECHE)) {
$content = file_get_contents(CACHE); //если существует, то загружаем кэш
//и выводим
require $rootpath . 'incfiles/head.php'; //подключаем шапку
echo $content; //выводим результат
require $rootpath . 'incfiles/end.php'; //подключаем ноги
exit; //завершаем выполнение скрипта
}
//Создаем массив с заменами
$strtr = array(
'href="/down' => 'href="' . DIR //Заменяем имя папки в ссылках на свою
);
//Создаем массив с регулярками
$replaces = array(
'#<\?xml.*?class="phdr">#s' => '<div class="phdr">', //Вырезаем верх
'#<table class="tmn".*</html>#s' => '' //Вырезаем низ
);
//Получаем страницу
$content = getContent(URL);
//Обрабатываем регуляркой, массив с правилами $replaces
$content = preg_replace(array_keys($replaces), array_values($replaces), $content);
//Делаем замену нужных элементов, массив $strtr
$content = strtr($content, $strtr);
//Записываем результат в кэш
file_put_contents(CACHE, $content);
//Подключаем шапку
require $rootpath . 'incfiles/head.php';
//Выводим результат
echo $content;
//Подключаем ноги
require $rootpath . 'incfiles/end.php';
Осталось создать в папке с граббером папку cache и поставить на нее права 777.
---------------------------------------------------------
Ниже прикреплен файл граббера расмотренного в мануале.