| |
|
|
| | Пожалуйста, помогите!
Надо: Определить и вывести суммарный размер всех страниц www- сайта и их количество. Вывести адреса страниц, имеющих наибольший и наименьший размер.
ЭТО МЕГАСРОЧНО!
Кто реально поможет, подарю номер аськи: 5566744
Заранее спасибо!
P.S. Нужно использовать сокеты (обязательное условие). | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 12:02)
| | | страницы статические?
Сайт Ваш? | |
| |
|
|
| |
|
|
| |
для: Trianon
(27.10.2006 в 12:03)
| | | да. урл на страницах сайта вида <a href="../feedback/">anytext</a>
вот регулярное выражение для урлов:
preg_match("/([\<])(a href=)([\"])*([\.][\.][\/])*(\S+)*([\/])([\"])([\>])*(.*)?([\<])([\/])([a])([\>])/i", $cc, $regs)
|
сайт не мой. скрипт анализа нах-ся на лок-ной машине, а я коннекчусь к чужому сайту | |
| |
|
|
| |
|
|
| |
для: Trianon
(27.10.2006 в 12:03)
| | | Пока наваял вот это:
<?php
//Отображаем верхнюю часть страницы
require_once("top.php");
//Определяем адрес сервера
$content = getpage("www.josiefans.com","/");
//Вспомогательныя функция вывода полученного кода страницы
$contents = explode("\n",$content);
/*
foreach ($contents as $cc) {
if (preg_match("/([\<])(a href=)([\"])*([\.][\.][\/])*(\S+)*([\/])([\"])([\>])*(.*)?([\<])([\/])([a])([\>])/i", $cc, $regs))
{
echo "найдена страница: $regs[4]$regs[5]$regs[6]<br>\n";
}
else
{
echo " ";
}
}
$hostname = "www.josiefans.com";
$uri = "/"; */
//Выводим код страницы на экран
foreach ($contents as $cc) {
$cr = ereg_replace("<","<",$cc);
echo $cr."<br>\n";
}
//Показываем длину файла в байтах
foreach ($contents as $cc1) {
if (preg_match("/Content-Length: ([0-9]+)/i",$cc1,$size))
{
echo "<br>Размер файла равен <b>$size[1] байт</b><br><br><br><br>";
}
else
{
echo " ";
}
}
//Функция запроса к заданному серверу
function getpage($hostname,$uri)
{
// Устанавливаем соединение
$fs = fsockopen($hostname, 80, $errno, $errstr, 60);
// Проверяем успешность соеднинения
if (!$fs) // Если соединения нет, выдаем сообщение и ошибку
{
echo "<font color=red>Соединение c ".$hostname." не установлено!</font><br>";
echo "$errstr ($errno)<br>\n";
}
else // В случае успешного соеднинения:
{
echo "<font color=green>Cоединение с ".$hostname." установлено!</font><br>";
// формируем HTTP-запрос для передачи его серверу
$headers = "GET $uri HTTP/1.0\r\n"; // Первая часть заголовка с указанием пути к файлу
//$headers .= "Server: $s\r\n";
//$headers .= "Expires: $e\r\n";
//$headers .= "Last-Modified: $l\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n"; //Тип
$headers .= "Content-Length: $s\r\n"; //Запрашиваем размер страницы
$headers .= "Host: $hostname\r\n"; // Приращиваем вторую часть с указанием хоста к первой
$headers .= "Connection: Close\r\n\r\n"; // Приращиваем третью часть
}
//Записываем содержимое буфера вывода в файл
fputs($fs,$headers);
while(!feof($fs)) {
$data.=fgets($fs,4096);
}
//Закрываем файл
fclose($fs);
//Возвращаем код страницы в текстовом виде
return $data;
}
//Отображаем нижнюю часть страницы
require_once("bottom.php");
?>
|
Фактически как я понял надо по сокету заходить на страницу, анализировать ее на наличие ссылок и по ссылкам двигаться дальше на другие страницы, т.е. чтото типа паука. Просмотрели все страницы сайта, определили их объем, и отобразили минимальную и максимальную по объему страницу + суммарный объем всех страниц сайта.
А как вот это реализовать??? Я хз... | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 12:10)
| | | Алгоритм такой:
1. идём на главную страницу сайта.
2. Парсим её.
3. Определяем размер страницы и сохраняем его.
3. Достаём все ссылки.
4. Проверяем ссылки на принадлежность именно этому сайту. Лишние выкидываем.
5. Записываем ссылки в массив (или файл).
6. Идём на первую ссылку из файла (одновременно удаляем её из массива несделанных и записываем в массив сделанных).
повторяем пункты 1-6 только добавляется ещё одно действие:
1.5 проверяем URL навхождение в массив сделанных ссылок. Если true , то continue.
Выбор где сохранять в файле или массиве завивит от объёма сайта. В массиве хранить быстрее получиться, но может просто не хватить памяти.
Судя по тому что вы написали у вас достаточно знаний чтобы это реализовать. Поэтому вперёд :) Если будут конкретные вопросы, задавайте ;) | |
| |
|
|
| |
|
|
| |
для: Axxil
(27.10.2006 в 12:46)
| | | В том то и дело, что мне это НЕКОГДА писать. Хотя за такое подробное объяснение большое спасибо!!! Пока я сам все это напишу и отлажу, уйдет драгоценное время!
Я готов даже заплатить 10 WMZ за эту работу!!! | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 12:02)
| | | Ну что, не ужели не найдется гуру, который сможет это реализовать в самом простом виде??? Люди добрые, помогите! | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 12:31)
| | | Конечно найдётся когда-нибудь.
Скажи, можно ли для реализации этого паучка использовать tidy и я попробую. | |
| |
|
|
| |
|
|
| |
для: ЯR
(27.10.2006 в 12:38)
| | | а что это такое??? tidy | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 12:39)
| | | Одно из доп. расширений PHP для работы с html. | |
| |
|
|
| |
|
|
| |
для: ЯR
(27.10.2006 в 12:41)
| | | денвера для отладки скрипта хватит? (пхп 5 не установлен) | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 12:44)
| | | в денвере нету tidy, ну да ладно
ща попробую сделать (без tidy, если нету. ч/з несколько часов выложу, ок?) | |
| |
|
|
| |
|
|
| |
для: ЯR
(27.10.2006 в 12:47)
| | | БУДУ БЛАГОДАРЕН!!! | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 12:52)
| | | Кстати, размер будет не совсем точный (без изображений), ок?
или их тоже счетать? | |
| |
|
|
| |
|
|
| |
для: ЯR
(27.10.2006 в 12:58)
| | | На ваше усмотрение. я думаю можно и без учета картинок. Главное, чтоб реализовать поставленную задачу!
Сокеты использовать надо обязательно. это основное требование. хотя может и без них бы можно было обойтись, но надо сними... | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 13:00)
| | | ок, уже начал | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 12:44)
| | | В стандартную поставку денвера входит только два модутя. Tidy среди них нет.
скачайте пакет расширений
http://www.denwer.ru/packages/ | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 12:02)
| | | Жду. Все свои обещания помогающим выполню! | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 13:07)
| | | А тебе вообще когда надо?
(что-то мой робот не все ссылки видит, буду отлаживать) | |
| |
|
|
| |
|
|
| |
для: ЯR
(27.10.2006 в 14:41)
| | | Почти сделал, ща отдохну (поем) и доделаю | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 12:02)
| | | Вот и паучёк:
<?php
//Отображаем верхнюю часть страницы
require_once("top.php");
error_reporting(0);
$site = "http://www.josiefans.com/"; // сайт
$links[] = '';
$sizes = array();
//Определяем адрес сервера
$content = getpage($site);
preg_match("/Content-Length: ([0-9]+)/i", $content, $size);
$sizes[$links[0]] = $size[1];
getlinks($content);
$i=1;
while (!empty($links[$i])) {
$content = getpage($site.$links[$i]);
getlinks($content, $links[$i]);
preg_match("/Content-Length: ([0-9]+)/i", $content, $size);
$sizes[$links[$i]] = $size[1];
$i++;
}
$total_size = 0;
foreach ($sizes as $val) $total_size += $val;
$total_pages = count($sizes);
print "Всего:<br>
размер: $total_size байт<br>
страницы: $total_pages<br>\n";
arsort($sizes);
print "<br>Наибольшие страницы:<br>\n";
$i = 1;
foreach ($sizes as $key => $val) {
print "$i. <a href='$site$key' target='_blank'>$site$key</a> -- $val байт<br>\n";
if ($i >= 5) break;
$i++;
}
asort($sizes);
print "<br>Наименьшие страницы:<br>\n";
$i = 1;
foreach ($sizes as $key => $val) {
print "$i. <a href='$site$key' target='_blank'>$site$key</a> -- $val байт<br>\n";
if ($i >= 5) break;
$i++;
}
/////////////////////////////////////////
// Ф У Н К Ц И И
/////////////////////////////////////////
//Функция запроса к заданному серверу
function getpage($link)
{
$link = parse_url($link);
$link['port'] = (empty($link['port'])) ? 80 : $link['port'];
$fp = fsockopen($link['host'], $link['port'], $sock_errno, $sock_errstr, 60);
if (!$fp) {
print "$sock_errstr ($sock_errno)<br>\n";
} else {
$out = "GET {$link['path']}?{$link['query']} HTTP/1.1\r\n";
$out .= "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*\r\n";
$out .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; DigExt)\r\n"; // маскировка под IE 5
$out .= "Host: {$link['host']}\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
$text = '';
while (!feof($fp)) {
$text .= fgets($fp, 4096);
}
fclose($fp);
}
return ($text);
}
// вывод ссылок с страницы
function getlinks($content, $pre){
preg_match_all("/\<a href=\"([\.][\.][\/])*(\w+)\/\"\>(.*)\<\/a\>/isU", $content, $regs);
foreach ($regs[1] as $key=>$value){
$count = substr_count($value, '../');
for ($i=1; $i <= $count && $pre != ''; $i++){
if (substr_count($pre, '/') > 1) $pre = substr($pre, 0, strrpos($pre, '/'));
else $pre = '';
}
$link = $pre.$regs[2][$key].'/';
if (!in_array($link, $GLOBALS['links']) && $link!='../') $GLOBALS['links'][] = $link;
}
}
//Отображаем нижнюю часть страницы
require_once("bottom.php");
?>
|
Только, скорее всего, надо выставить время выполнения скрипта побольше | |
| |
|
|
| |
|
|
| |
для: ЯR
(27.10.2006 в 16:30)
| | | Если будет выдаваться ошибка, что скрипт слишком долго выполняется, допиши вначале скрипта:
Жду обещанного (пиши на почту - yar.phpster@gmail.com) | |
| |
|
|
| |
|
|
| |
для: ЯR
(27.10.2006 в 16:30)
| | | Е-мое!!!! Это ж то, что надо!!! Блин супер!!!!! РЕСПЕКТ ОГРОМНЫЙ!
Выслал на мыло пароль к аське 5566744, как и обещал!
Вопрос в догонку. А как сделать еще и такой вариант: составить и вывести список всех рисунков, используемых страницами www- сайта. Вывод разделить на две части: рисунки, расположенные на сайте и рисунки, расположенные на других сайтах. За это тоже могу подарить еще один номерок аськи тому, кто поможет: 7557111 (красивая аська никогда не бывает лишней, поверьте мне...). заранее спасибо! | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 19:29)
| | | ну так я её и попробую заполучить | |
| |
|
|
| |
|
|
| |
для: ЯR
(27.10.2006 в 19:32)
| | | Давай! Жду! С удовольствием поделюсь! | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 12:02)
| | | Тестируй (вроде работает):
<?php
//Отображаем верхнюю часть страницы
require_once("top.php");
error_reporting(0);
$site = "http://www.josiefans.com/"; // сайт
$links[] = '';
$siteimg = array();
$otherimg = array();
$sizes = array();
//Определяем адрес сервера
$content = getpage($site);
preg_match("/Content-Length: ([0-9]+)/i", $content, $size);
$sizes[$links[0]] = $size[1];
getlinks($content, '');
getsiteimg($content, $links[$i]);
$i=1;
while (!empty($links[$i])) {
$content = getpage($site.$links[$i]);
getlinks($content, $links[$i]);
getsiteimg($content, $links[$i]);
preg_match("/Content-Length: ([0-9]+)/i", $content, $size);
$sizes[$links[$i]] = $size[1];
$i++;
}
$total_size = 0;
foreach ($sizes as $val) $total_size += $val;
$total_pages = count($sizes);
$total_images = count($siteimg) + count($otherimg);
print "Всего:<br>
размер: $total_size байт<br>
страницы: $total_pages<br>
изображения: $total_images<br>
";
arsort($sizes);
print "<br>Наибольшие страницы:<br>\n";
$i = 1;
foreach ($sizes as $key => $val) {
print "$i. <a href='$site$key' target='_blank'>$site$key</a> -- $val байт<br>\n";
if ($i >= 5) break;
$i++;
}
asort($sizes);
print "<br>Наименьшие страницы:<br>\n";
$i = 1;
foreach ($sizes as $key => $val) {
print "$i. <a href='$site$key' target='_blank'>$site$key</a> -- $val байт<br>\n";
if ($i >= 5) break;
$i++;
}
asort($siteimg);
print "<br>Изображения с сайта:<br>\n";
$i = 1;
foreach ($siteimg as $val) {
print "$i. <a href='$site$val' target='_blank'>$site$val</a><br>\n";
$i++;
}
asort($otherimg);
print "<br>Изображения с других сайтов:<br>\n";
$i = 1;
foreach ($otherimg as $val) {
print "$i. <a href='$val' target='_blank'>$val</a><br>\n";
$i++;
}
/////////////////////////////////////////
// Ф У Н К Ц И И
/////////////////////////////////////////
//Функция запроса к заданному серверу
function getpage($link)
{
$link = parse_url($link);
$link['port'] = (empty($link['port'])) ? 80 : $link['port'];
$fp = fsockopen($link['host'], $link['port'], $sock_errno, $sock_errstr, 60);
if (!$fp) {
print "$sock_errstr ($sock_errno)<br>\n";
} else {
$out = "GET {$link['path']}?{$link['query']} HTTP/1.1\r\n";
$out .= "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*\r\n";
$out .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; DigExt)\r\n"; // маскировка под IE 5
$out .= "Host: {$link['host']}\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
$text = '';
while (!feof($fp)) {
$text .= fgets($fp, 4096);
}
fclose($fp);
}
return ($text);
}
// вывод ссылок с страницы
function getlinks($content, $pre){
preg_match_all("/\<a href=\"([\.][\.][\/])*(\S+)\/\"\>(.*)\<\/a\>/isU", $content, $regs);
foreach ($regs[1] as $key=>$value){
$count = substr_count($value, '../');
for ($i=1; $i <= $count && $pre != ''; $i++){
if (substr_count($pre, '/') > 1) $pre = substr($pre, 0, strrpos($pre, '/'));
else $pre = '';
}
$link = $pre.$regs[2][$key].'/';
if (!in_array($link, $GLOBALS['links']) && $link!='../') $GLOBALS['links'][] = $link;
}
}
// вывод изображений со страницы сайта и других сайтов
function getsiteimg($content, $pre){
preg_match_all("/<img src=\"(\S+)\"/isU", $content, $regs);
foreach ($regs[1] as $value){
if (substr($value, 0, 7) != 'http://'){
$count = substr_count($value, '../');
for ($i=1; $i <= $count && $pre != ''; $i++){
if (substr_count($pre, '/') > 1) $pre = substr($pre, 0, strrpos($pre, '/'));
else $pre = '';
}
$siteimg = str_replace('../', '', $pre.$value);
if (!in_array($siteimg, $GLOBALS['siteimg'])) $GLOBALS['siteimg'][] = $siteimg;
}else{
if (!in_array($value, $GLOBALS['otherimg'])) $GLOBALS['otherimg'][] = $value;
}
}
}
//Отображаем нижнюю часть страницы
require_once("bottom.php");
?>
|
| |
| |
|
|
| |
|
|
| |
для: ЯR
(27.10.2006 в 20:22)
| | | .... хм... ничего не выдает... пусто... | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 20:27)
| | | ща посмотрю | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 12:02)
| | | Попробуй так (у меня работает):
<?php
//Отображаем верхнюю часть страницы
require_once("top.php");
error_reporting(0);
set_time_limit(300);
$site = "http://www.josiefans.com/"; // сайт
$links[] = '';
$siteimg = array();
$otherimg = array();
$sizes = array();
//Определяем адрес сервера
$content = getpage($site);
preg_match("/Content-Length: ([0-9]+)/i", $content, $size);
$sizes[$links[0]] = $size[1];
getlinks($content, '');
getsiteimg($content, $links[$i]);
$i=1;
while (!empty($links[$i])) {
$content = getpage($site.$links[$i]);
getlinks($content, $links[$i]);
getsiteimg($content, $links[$i]);
preg_match("/Content-Length: ([0-9]+)/i", $content, $size);
$sizes[$links[$i]] = $size[1];
$i++;
}
$total_size = 0;
foreach ($sizes as $val) $total_size += $val;
$total_pages = count($sizes);
$total_images = count($siteimg) + count($otherimg);
print "Всего:<br>
размер: $total_size байт<br>
страницы: $total_pages<br>
изображения: $total_images<br>
";
arsort($sizes);
print "<br>Наибольшие страницы:<br>\n";
$i = 1;
foreach ($sizes as $key => $val) {
print "$i. <a href='$site$key' target='_blank'>$site$key</a> -- $val байт<br>\n";
if ($i >= 5) break;
$i++;
}
asort($sizes);
print "<br>Наименьшие страницы:<br>\n";
$i = 1;
foreach ($sizes as $key => $val) {
print "$i. <a href='$site$key' target='_blank'>$site$key</a> -- $val байт<br>\n";
if ($i >= 5) break;
$i++;
}
asort($siteimg);
print "<br>Изображения с сайта:<br>\n";
$i = 1;
foreach ($siteimg as $val) {
print "$i. <a href='$site$val' target='_blank'>$site$val</a><br>\n";
$i++;
}
asort($otherimg);
print "<br>Изображения с других сайтов:<br>\n";
$i = 1;
foreach ($otherimg as $val) {
print "$i. <a href='$val' target='_blank'>$val</a><br>\n";
$i++;
}
/////////////////////////////////////////
// Ф У Н К Ц И И
/////////////////////////////////////////
//Функция запроса к заданному серверу
function getpage($link)
{
$link = parse_url($link);
$link['port'] = (empty($link['port'])) ? 80 : $link['port'];
$fp = fsockopen($link['host'], $link['port'], $sock_errno, $sock_errstr, 60);
if (!$fp) {
print "$sock_errstr ($sock_errno)<br>\n";
} else {
$out = "GET {$link['path']}?{$link['query']} HTTP/1.1\r\n";
$out .= "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*\r\n";
$out .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; DigExt)\r\n"; // маскировка под IE 5
$out .= "Host: {$link['host']}\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
$text = '';
while (!feof($fp)) {
$text .= fgets($fp, 4096);
}
fclose($fp);
}
return ($text);
}
// вывод ссылок с страницы
function getlinks($content, $pre){
preg_match_all("/\<a href=\"(\S+)\/\"\>(.*)\<\/a\>/isU", $content, $regs);
foreach ($regs[1] as $value){
if (substr($value, 0, 7) != 'http://'){
$count = substr_count($value, '../');
for ($i=1; $i <= $count && $pre != ''; $i++){
if (substr_count($pre, '/') > 1) $pre = substr($pre, 0, strrpos($pre, '/'));
else $pre = '';
}
$link = str_replace('../', '', $pre.$value.'/');
if (!in_array($link, $GLOBALS['links']) && $link!='../') $GLOBALS['links'][] = $link;
}
}
}
// вывод изображений со страницы сайта и других сайтов
function getsiteimg($content, $pre){
preg_match_all("/<img src=\"(\S+)\"/isU", $content, $regs);
foreach ($regs[1] as $value){
if (substr($value, 0, 7) != 'http://'){
$count = substr_count($value, '../');
for ($i=1; $i <= $count && $pre != ''; $i++){
if (substr_count($pre, '/') > 1) $pre = substr($pre, 0, strrpos($pre, '/'));
else $pre = '';
}
$siteimg = str_replace('../', '', $pre.$value);
if (!in_array($siteimg, $GLOBALS['siteimg'])) $GLOBALS['siteimg'][] = $siteimg;
}else{
if (!in_array($value, $GLOBALS['otherimg'])) $GLOBALS['otherimg'][] = $value;
}
}
}
//Отображаем нижнюю часть страницы
require_once("bottom.php");
?>
|
| |
| |
|
|
| |
|
|
| |
для: ЯR
(27.10.2006 в 20:56)
| | | УРА! Другое дело! А можешь прям щас быстро еще подправить, чтоб не выводил http://josiefans.com/blablabla в списке с других, а выводил в списке с исходного сайта.... А так, респект!!!! Сразу же и номерок пришлю с паролем!!! | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 21:01)
| | | ок, ща (вышлю на мыло) | |
| |
|
|
| |
|
|
| |
для: ЯR
(27.10.2006 в 21:27)
| | | жду | |
| |
|
|
| |
|
|
| |
для: Nicole Neumann
(27.10.2006 в 21:01)
| | | СПАСИБО! Получил на почту! Пароль к номеру 7557111 отправил! Респект! | |
| |
|
|