Forum Webscript.Ru
Программирование => PHP => Тема начата: Lutik от 28 Января 2005, 11:52:43
-
Проблема следущего характера!
Написал рекурсивную функцию, которая просматривает все страницы и соберает ссылки, потом в цикле открываю ссылку удаляю весь хтмл и сую его в базу, но скрипт обрабатывает в среднем 22 ссылки а потом просто виснет!
Предложите альтернативный вариант паучка :rolleyes:
Или помогите довести до ума этот! :rolleyes:
Вот скрипт:
include(\'config_inc.php\');
function index($dir)
{
if(is_readable($dir2=$dir))
{
$OpenDir=opendir($dir);
while(($file=readdir($OpenDir))!==false)
{
if($file!="."&&$file!=".." && $file!="admin" && $file!="map" && $file!="forum" && $file!="desk")
{
if(is_dir($dir.chr(47).$file))
index($dir.chr(47).$file);
else
{
if (substr($file,-4) == ".php" || substr($file,-4) == ".html" || substr($file,-4) == ".htm" || substr($file,-4) == ".shtml" ){
if ($file!="indexing.php" && $file!="main1.php" && $file!="connect.php" && $file!="sch.php" && $file!="vv.php"){
$OpenFile=fopen($dir.chr(47).$file,\'r\');
$content=fread($OpenFile,filesize($dir.chr(47).$file));
$content=preg_replace("/ +/s"," ",$content);
$dir2=str_replace(".","",$dir2);
preg_match_all("/<[Aa][ \\r\\n\\t]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ \'\\"\\n\\r\\t]*([^ \\"\'>\\r\\n\\t#]+)[^>]*>/",$content,$uri);
$content=null;
foreach($uri[1] as $uri){
$uri=preg_replace("/PHP_SELF/", "$file", $uri);
$uri=str_replace("$", "", $uri);
$uri=str_replace("mailto:iapp@ua.fm", "index.php", $uri);
$uri=str_replace("mailto:2Spro@ua.fm", "index.php", $uri);
$uri=str_replace("http://www.dmeti.dp.ua/index.html", "index.php", $uri);
$uri=str_replace("../", "", $uri);
$url="http://".$_SERVER["SERVER_NAME"].$dir2.chr(47).$uri;
$res=mysql_query("Select link from search where link=\'$url\'") or die (mysql_error());
$num=mysql_num_rows($res);
echo $num."
";
if($num==0){
$cont=file_get_contents($url);
mysql_query("insert into search (word, link) values(\'".addslashes($cont)."\', \'$url\')") or die(mysql_error());
}
}
fclose($OpenFile);
}
}
}
}
}
}
}
$dir=".";
index($dir);
echo "Назад";
-
Lutik:
Предложите альтернативный вариант паучка
C
-
это выполняется в mod_php или php-cli ?
-
это выполняется в mod_php или php-cli ?
выполняется в mod_php
-
такие скрипты от сервера не запускают.
mod_php здесь использовать нельзя.
-
А если у хостинга нет возможности пускать php-cli?(я просто не очень силен в настройках серверов!)
Как быть тогда?
-
Lutik:
А если у хостинга нет возможности пускать php-cli?(я просто не очень силен в настройках серверов!) Как быть тогда?
Менять хостинг
-
Lutik
тебе нужен хостинг, который позволяет запускть процессы в фон.
типа :
exec(\'/usr/bin/perl /path/to/your/spider.pl ......\');
Если хостер разрешает например так использовать perl / python /ruby - то можешь паука написать на нем и запускать его чере [p]exec[/p] или похожие функции (или вообще через cron)
Или меняй хостинг.
Посмотри phpinfo(), есть ли в ключах компиляции --enable-cli
-
Макс, да проверял! нет там такого :( , а в перле я дундук вообще! хотя може и раздуплюсь :) А такой вопрос можно ли запустить сишьный скрипт, ню например как cgi скрипт или както еще?
-
Lutik:
сишьный скрипт
На С - это уже будет программа а не скрипт (ИМХО).
Можно или нельзя ее запустить - надо спросить у хостера.
И запускать ее все равно надо будет в фон (а не CGI)