Необходимо нагенерировать ссылки в HTML

Статус
В этой теме нельзя размещать новые ответы.
Попробовал. Он мне выдал: >>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!
>>>Success!

Fatal error: Maximum execution time of 30 seconds exceeded in ****\sitemap\check.php on line 24

Что странно, т.к. третья ссылка в моём списке (showtopic=7) точно не рабочая.

1. куда он пишет результат своей жизнедеятельности
2. как разбить процесс на итерации (чтобы не схлапывались после 30 секунд)
3. как заставить искать строчку в титле странице

Это основные вопросы :)

А нужен, чтобы сделать собственную карту сайта, т.к. генераторы сайтмэпов отчего-то видят на всём сайте всего около 250 страниц (и не только showtopic).
 
здесь рабочий код по твоим трём пунктам.

PHP:
<?php   
$site = "www.neowin.net"; // начало урл
$urlend = "/forum/index.php?showtopic="; //конец урл
$sstr = "Sorry, an error occurred";

$countfrom = 767994; // со скольки считать
$countto = 767998; // до скольки считать
$rezak = 150; // по сколько резать
$filename = "links"; // имя файла
$fileex = ".html"; // формат файла
	
set_time_limit(0);
ini_set("max_execution_time",0);
ini_set("default_socket_timeout",5);

$d = 0;
$z = 0;
for ($i = $countfrom; $i <= $countto; $i++) 
{
    $page = $urlend.$i;   
    $out = "GET ".$page." HTTP/1.1\r\n";   
    $out .= "Host: $site\r\n";   
    $out .= "Connection: close\r\n\r\n";   
               
	$fp = fsockopen($site, 80, $errno, $errstr, 30);
	$attempt = 0;
	while (!$fp and $attempt < 10)
	{
		$attempt++;
		print "\n[-] No response from {$site}:80 Trying again...\n";
		$fp = fsockopen($site, 80, $errno, $errstr, 30);
	}
       
	if(!$fp)
	{ 
		echo "$errstr ($errno)<br />\n"; 
		} 
	else 
	{   
		fputs($fp, $out);   

		$data = "";
		while (!feof($fp)) $data.=fgets($fp, 1024); 

		if(substr_count($data, $sstr) == 0)   
		{   
			if($z % $rezak == 0)
			{
				$d++;
				echo "<h1>Новая страница</h1>";
			}

			$file = "$filename".$d."$fileex";
			$f =fopen($file, "a+");

			fputs($f,"<a href="."$site"."$urlend"."$i".'">'."$site"."$urlend"."$i"."</a><br>\r\n"); // здесь в файл пишется строка - URL
			echo "<a href="."$site"."$urlend"."$i".'">'."$site"."$urlend"."$i"."</a><br>\r\n";
			$z++;
			fclose($f);
			}
	}
	fclose($fp);
}
	
?>

в строке где комментарий "// здесь в файл пишется строка - URL"
можешь задавать форма вывода URL в файл.
 
Вау! Мегаспасибо! Когда вбивал данные даже не ожидал, что заработает :)
А заработало!

Ещё бы для полного счастья, чтобы в страницу как анкор не адрес ссылки вставлялся, а название страницы (title), и как я уже писал выше не уверен, что поисковик адекватно поймёт страницу без тегов header, body, html ... (но это я уже наглею :))

PS баг идущий ещё с самого начала:
Код:
            fputs($f,"<a href="."$site"."$urlend"."$i".'">'."$site"."$urlend"."$i"."</a><br>\r\n"); // здесь в файл пишется строка - URL 
            echo "<a href="."$site"."$urlend"."$i".'">'."$site"."$urlend"."$i"."</a><br>\r\n";
должно быть:
Код:
            fputs($f,"<a href="."$site"."$urlend"."$i".'>'."$site"."$urlend"."$i"."</a><br>\r\n"); // здесь в файл пишется строка - URL 
            echo "<a href="."$site"."$urlend"."$i".'>'."$site"."$urlend"."$i"."</a><br>\r\n";
 
Забирай.
Все пожелания учтены, всё поправлено.
Все настройки в начале скрипта.

PHP:
<?php    
$site = "www.neowin.net"; // начало урл 
$urlend = "/forum/index.php?showtopic="; //конец урл 
$sstr = "Sorry, an error occurred"; 

$countfrom = 767994; // со скольки считать 
$countto = 767998; // до скольки считать 
$rezak = 150; // по сколько резать 
$filename = "links"; // имя файла 
$fileex = ".html"; // формат файла 
// текст в начале файла
$file_beg = "<html>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\" />
<title>Карта сайта</title>
</head>
<body>
";
// текст в конце файла
$file_end = "
</body>
</html>";
     
set_time_limit(0); 
ini_set("max_execution_time",0); 
ini_set("default_socket_timeout",5); 

$d = 0; 
$z = 0;
for ($i = $countfrom; $i <= $countto; $i++)  
{ 
    $page = $urlend.$i;    
    $out = "GET ".$page." HTTP/1.1\r\n";    
    $out .= "Host: $site\r\n";    
    $out .= "Connection: close\r\n\r\n";    
                
    $fp = fsockopen($site, 80, $errno, $errstr, 30); 
    $attempt = 0; 
    while (!$fp and $attempt < 10) 
    { 
        $attempt++; 
        print "\n[-] No response from {$site}:80 Trying again...\n"; 
        $fp = fsockopen($site, 80, $errno, $errstr, 30); 
    } 
        
    if(!$fp) 
    {  
        echo "$errstr ($errno)<br />\n";  
        }  
    else  
    {    
        fputs($fp, $out);    

        $data = ""; 
        while (!feof($fp)) $data.=fgets($fp, 1024);  

        if(substr_count($data, $sstr) == 0)    
        {    
            if($z % $rezak == 0) 
            { 
				if($d > 0)
				{
					$file = "$filename".$d."$fileex";
					$f =fopen($file, "a+");
					fwrite($f,$file_end);
					fclose($f);
					}
                
				$d++; 
                echo "<h1>Новая страница</h1>\r\n"; 
				$file = "$filename".$d."$fileex";
				$f =fopen($file, "w");
				fwrite($f,$file_beg);
				fclose($f);
				} 

            $file = "$filename".$d."$fileex"; 
            $f =fopen($file, "a+"); 

			$title = "";
			preg_match("%<title.*?>(.*?)</title.*?>%sim",$data,$title);
            fputs($f,"  <a href=\"http://".$site.$urlend.$i."\">".$title[1]."</a><br>\r\n");
            echo "<a href=\"http://".$site.$urlend.$i."\">".$title[1]."</a><br>\r\n"; 
            $z++; 
            fclose($f); 
            } 
    } 
    fclose($fp); 
}

if($d > 0)
{
	$file = "$filename".$d."$fileex";
	$f =fopen($file, "a+");
	fwrite($f,$file_end);
	fclose($f);
	}
     
?>
 
Огромное человеческое спасибо! Мне это очень помогло. :yahoo:
Надеюсь кому-нибудь пригодится тоже.
 
krobol
а можешь ещё немного свой скрипт изменить, чтобы он брал список из html файла а не сам генерил?
Просто получилось заставить один из мапогенераторов прошерстить сайт, но он выдал в конце единый файл html на 7Мб с тучей ссылок (в том числе и левых, т.к. отличать сервисные страницы, он понятное дело не умеет).
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху