Avatar billede bilbo2 Nybegynder
28. juni 2002 - 09:40 Der er 7 kommentarer og
1 løsning

RDF/XML fetch timeout

Hej,

Jeg har følgende funktion på min hjemmeside. Men hvis den side
som jeg henter en RDF/XML strimmel fra er nede, så hænger hele min side.
Er der nogen der kan hjælpe mig med at implementere en form for timeout på
f.eks. 10 sek ?? Du får 200 points for det.

Cheers
bilbo2

Script:
function GrabNews($xml_url) {

  // read and parse
  $file = fopen($xml_url,"r");
  if (!$file) {
    print "<p>Unable to data file.\n";
    exit;
  }
  while (!feof($file)) {
    $line = fgets($file, 1024);
    if(eregi("<title>(.*)</title>", $line, $t)) $title[] = $t[1];
    if(eregi("<link>(.*)</link>", $line, $u)) $url[] = $u[1];
  }
  fclose($file);
 
  // give an output
  $i=1;
  while($i<count($title)) {
    $nuke_html .= "<li><a href=$url[$i] target=_blank>$title[$i]</a><br>\n";
    $i++;
  }

  return $nuke_html;
}
Avatar billede lequet Nybegynder
28. juni 2002 - 10:03 #1
Prøv med set_time_limit(10) men det virker IKKE hvis din server kører i safe mode
Avatar billede lequet Nybegynder
28. juni 2002 - 10:05 #2
Avatar billede lequet Nybegynder
28. juni 2002 - 10:14 #3
Altså sådan her, vil jeg tro

function GrabNews($xml_url) {
  set_time_limit(10) ; 

  // read and parse
  $file = fopen($xml_url,"r");
  if (!$file) {
    print "<p>Unable to data file.\n";
    exit;
  }
  while (!feof($file)) {
    $line = fgets($file, 1024);
    if(eregi("<title>(.*)</title>", $line, $t)) $title[] = $t[1];
    if(eregi("<link>(.*)</link>", $line, $u)) $url[] = $u[1];
  }
  fclose($file);

  // give an output
  $i=1;
  while($i<count($title)) {
    $nuke_html .= "<li><a href=$url[$i] target=_blank>$title[$i]</a><br>\n";
    $i++;
  }

  return $nuke_html;
}
Avatar billede bilbo2 Nybegynder
28. juni 2002 - 10:36 #4
Jow, jeg kender funktionen. Men min php kører i Safe Mode, så det kan jo desværre ikke lade sig gøre.

./bilbo2
Avatar billede lequet Nybegynder
28. juni 2002 - 10:47 #5
Jeg kan ikke lige komme på andre måder at løse problemet på, udover hvis du havde mulighed for at slå safe mode fra, desværre :(
Avatar billede lequet Nybegynder
28. juni 2002 - 11:15 #6
Har lige siddet og gennemsøgt php.net for info, og den eneste mulighed jeg efterhånden kan se (udover den før nævnte set_time_limit) er at du bruger fsockopen() frem for fopen(), der kan nemlig sættes en timeout, det kan man desværre ikke med fopen()

Desværre har jeg ikke så meget tid lige nu da jeg er på vej ud af døren, men hvis du ikke lige kan få det til at virke kan jeg da kigge på det senere i aften.
Avatar billede tipsen Nybegynder
28. juni 2002 - 11:28 #7
På følgende to links:

http://www.zend.com/zend/spotlight/php-link-validation3.php
http://www.zend.com/zend/spotlight/php-link-validation4.php

kan du se, hvordan man benytter fsockopen til at løse en tilsvarende problemstilling!

NB: Hvis mit svar er brugbart, så bare sænk pointtallet til 15!
Avatar billede lundsfryd Nybegynder
28. juni 2002 - 12:45 #8
Jeg tvivler på, at du ville få noget ud af at bruge set_time_limit, da det jo er *eksekveringstid* den går på - når scriptet står og venter på en forbindelse til en anden server, tæller det sandsynligvis ikke med i eksekveringstiden (på samme måde som f.eks. sleep() ikke gør det).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester