kostenloser Webspace werbefrei: lima-city


Problem mit WebCrawler

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    d************h

    Hi!

    Hab ein Problem: Wenn ich folgenden Code ausführe

    <?php
    
    function db_conn()
    {
        if($db_link = mysql_connect('localhost', 'root', ''))
    	{
            if(mysql_select_db('suchmaschine'))
    		{
    			return true;
    		}
    	}
    }
    
    function delete_tags($source)
    {
    	preg_match("/<script(.*)>(.*)<\/script>/", $source, $script);
    	$str = strip_tags($source);
    	$str = str_replace($script, "", $str);
    	return $str;
    }
    
    // Titel auslesen
    function read_title($source)
    {
    	preg_match_all('~<title>(.*)</title>~Uis', $source, $output_title);
    	$title = $output_title[1];
    	return $title;
    }
    
    function get_links($source)
    {
    	$pattern = '=^(.*)<a(.*)href\="?(\S+)"([^>]*)>(.*)</a>(.*)$=msi';
    	$count = 0;
    	$links = array();
    	while (preg_match($pattern, $source, $txt))
    	{
    	  $links[$count] = $txt[3];
    	  $count++;
    	}
    }
    
    function save_links($links)
    {
    	foreach ($links as $link)
    	{
    		$sql = "INSERT INTO seiten_bevorstehend (url) VALUES ('". $link. "');";
    		mysql_query($sql) or die(mysql_error(). "<br>1<br>". $sql);
    	}
    }
    
    
    function is_site_toread()
    {
    	$sql = "SELECT
    		*
                FROM
                    seiten_bevorstehend
                ORDER BY
                    id ASC
                LIMIT
                    1;";
        $result = mysql_query($sql);
    	if ($result)
    	{
    		if ($item = mysql_fetch_object($result))
    		{
    			return $item;
    		}
    	}
    }
    
    
    function del_old_site($id)
    {
    	mysql_query("DELETE FROM seiten_bevorstehend WHERE id = ".$id." LIMIT 1") OR die(mysql_error(). "<br>3");
    }
    
    
    function check_stop()
    {
    	$fp = fopen("control.txt", "r");
    	if ($fp)
    	{
    		$zeile = fgets($fp, 1050);
    		fclose($fp);
    	}
    
    	if($zeile=='stop')
    	{
    		echo 'Das Script wurde mit der Kontrolldatei abgebrochen, das Fenster kann jetzt geschlossen werden.';
    		return false;
    	}
    	else
    	{
    		return true;
    	}
    	
    }
    
    function isset_site($url)
    {
    	$sql = "SELECT * FROM seiten WHERE url = '". $url. "';";
    
        $result = mysql_query($sql);
        if ($item = mysql_fetch_object($result))
    	{
    		if(empty($item->id))
    		{
    			return false;
    		}
    		else
    		{
    			return true;
    		}
    	}
    }
    
    
    function save_content($title, $url, $text, $pritority)
    {
        mysql_query("INSERT INTO seiten (titel, url, inhalt, priority) VALUES ('".$title."', '".$url."', '".htmlentities(str_replace("'", "\'", $text))."', '".$pritority."');") or die(mysql_error(). "<br>5");
    }
    
    
    function take_links($source)
    {
    	preg_match_all("!<a.*?href=\"([^\"]*)\"[^>]*>(.*?)</a>!", $source, $links);
    	return $links;
    }
    
    
    function update_priority($url) {
    mysql_query("UPDATE
        seiten
    SET
        priority = priority + 1
    WHERE
        url = '".$url."'
    LIMIT
        1;") OR die(mysql_error());
    
    } // funktionsende
    
    
    
    
    
    // hier geht die Verarbeitung los
    function start()
    {
    	$count = 0;
    	if (db_conn() == true)
    	{
    		$site = is_site_toread();
    		if ($site != NULL)
    		{
    			if (!isset_site($site->url))
    			{
    				$code = implode("", file($site->url));
    				$title = read_title($code[0]);
    				$url = $site->url;
    				$text = delete_tags($code);
    				save_content($title, $url, $text, 1);
    				save_links(get_links($code));
    				del_old_site($site->id);
    				$count++;
    			}
    			else
    			{
    			del_old_site($site->id);
    			update_priority($site->url);
    			}
    		}
    		else
    		{
    			echo 'Fehler! Keine Seiten mehr in der Vorratstabelle! ';
    			$ERROR = true;
    		}
    		if (is_site_toread() == true)
    		{
    			if ($count < 100)
    			{
    				start();
    			}
    			elseif (check_stop() == true)
    			{
    				echo "Script wurde durch Kontroldatei beendet. ";
    				$ERROR = true;
    				return false;
    			}
    		}
    	}
    	else
    	{
    		echo 'DB-Verbindung nicht erfolgreich. ';
    		$ERROR = true;
    	}
    
    
        if($ERROR==false)
        start();
        else
        echo 'Script abgebrochen.';
    }
    start();
    
    ?>


    bekomme ich diese Fehlermeldung:
    Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 1033 bytes) in F:\server_default\robot.php on line 35

    Kann mir jemand sagen, was da falsch ist?

    Grüße, dynamic-search
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. e********l

    Sagt die Fehlermeldung doch mehr als eindeutig. Wer seinen Speicher nicht freigibt, der lässt ihn zwangsläufig überlaufen. Bei Fileoperationen mus sman in aller Regel den Speicher vorsichtshalber selbst freigeben, das macht PHP nicht für einen. Erst am Ende der Ausführung gibt PHP den verwendeten Speicher wieder frei. Alles was von Start bis Ende an Speicher angefragt wird, wird nicht selbst freigegeben!
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!