Script braucht zu lange - Optimierung möglich?

cameeel

Erfahrenes Mitglied
Hi all.
Hab mit nem Freund ein Script geschrieben. Funktioniert auch wunderbar - eigentlich.
Das Problem ist das es manchmal abbricht weil es zu lange braucht.

Der Teil der so viel Zeit braucht dürfte hier liegen:
PHP:
     $extension = get_headers($source[$i]); 
     foreach($extension as $wert) 
     { 
      if(eregi('Content-Type: text/html', $wert)) 
      {
       $sql = mysql_query("SELECT `links_URI` FROM `table1` WHERE `links_URI` = '".$source[$i]."' LIMIT 1"); 
       $ask = mysql_fetch_array($sql);
       if($ask['links_URI'] != $source[$i]){
        mysql_query("INSERT INTO `table2` (`list_URI`, `list_Timestamp`) VALUES ('".$source[$i]."', '".time()."')"); 
       }
      } 
     }
Wir schätzen es liegt an dem foreach()... sind uns da aber net so ganz sicher.
Habt ihr ne Idee wie man das optimieren könnte?

Danke,
cAm3eel.
 
Hi,

kannst du noch etwas mehr von dem Script zeigen?
Da müsste ja noch irgendwo eine for Schleife sein. Und zeige mal noch die Ausgabe von get_headers() und die Funktion an sich. Vielleicht stimmt da schon etwas nicht.

mb fanste
 
Das Script selbst klappt ja, es dauert nur zu lange. get_headers() erzeugt immer eine andere Ausgabe, je nach dem, was $source[$i] gerade ist. $i gehört zu einer for-Schleife, welche um den bereits geposteten Teil ist. get_headers(); ist die einzige Möglichkeit, die wir gefunden haben, um den Content-Type eines URLs herauszufinden. $extension ist ein Array, an einer Stelle ist der Content-Type gespeichert, manchmal [3], mal [5], usw.. Deshalb die foreach-Schleife, die solange Sucht, bis der Content-Type gefunden wurde. Wir gehen davon aus, dass dies der Teil ist, der so lange brauch.
 
Hehe, jetzt wo du es sagst, fällt es mir auch wieder ein, dass get_headers() ja eine vordefinierte Funktion ist.

Wenn du jetzt aber mal auf http://de.php.net/get_headers schaust, steht dort, dass man dort noch das Ausgabeformat angeben kann.

PHP:
#Aus dem
print_r(get_headers($url, 1));

#Wird das
/*Array
(
    [0] => HTTP/1.1 200 OK
    [Date] => Sat, 29 May 2004 12:28:14 GMT
    [Server] => Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT
    [ETag] => "3f80f-1b6-3e1cb03b"
    [Accept-Ranges] => bytes
    [Content-Length] => 438
    [Connection] => close
    [Content-Type] => text/html
)*/

Demnach kann man sich doch sicherlich die foreach-Schleife sparen.
 
Zuletzt bearbeitet:
Was versuchst du denn zu realisieren? Möglicherweise ist das gesamte Skript komplizierter als es ein müsste.
 
Und jetzt, wo du das sagst, hab ich eine Lösung gefunden, denn mit get_headers() ist es auch möglich, den Content-Type auszugeben, ohne eine foreach-Schleife:
PHP:
[...]
$extension = get_headers($source[$i], 1);  
if($extension['Content-Type'] == 'text/html')    
[...]
Edit: Tja, da war ich zu langsam...
 
Soweit ich das verstanden habe, setzt [phpf]get_headers[/phpf] bei jedem Aufruf eine Anfrage an den jeweiligen Webserver ab, um die zurückgelieferten Kopfdaten zu ermitteln. Dies kann natürlich in Abhängigkeit von der Serverauslastung, der Netzwerkanbindung etc. der entfernten Webserver unterschiedlich lange dauern. Die Schleife war also meines Erachtens nach nicht der Flaschenhals.
 
Sorry musste gestern weg.... Danke an alle und vor allem an Alexander, funktioniert ja nun alles super!

cAm3eel.
 
Zurück