2010-09-14 23 views
0

J'ai un répertoire plein de fichiers XML. Pour chacun de ces fichiers, je fais une recherche au RIPE. Pour chaque recherche, je fais quelques recherches RegEx à travers le code HTML retourné. Mais après quelques boucles, file_get_contents arrête de retourner des données, et toutes mes opérations après sont faites sur une chaîne vide.PHP expire-t-il, ou est-ce quelque chose qui fait varier les résultats de mon script après chaque exécution?

Je me suis dit que PHP peut être expiré parce que ces pages prennent du temps à charger. Mais l'exécution du script ne s'arrêterait-elle pas complètement alors? Au lieu de cela, toutes les boucles finissent et sortent leur code HTML, mais sans contenu.

Je pense également qu'il pourrait y avoir une sorte de maximum de demandes pr second deal avec PHP.

Quelqu'un pourrait-il nous éclairer là-dessus?

Merci


Edit: Pour expliquer mon titre, un de mes amis et moi-même étaient en cours d'exécution le script en même temps. C'est pourquoi je suppose que PHP fixe une limite au nombre de requêtes qu'il peut envoyer pr minute ou quelque chose, car il semble que PHP gère un nombre variable de boucles avant d'arrêter de retourner les données.


Edit: ajout de code: (je me suis dit qu'il n'a pas été nécessaire, en raison de mon explication du problème)

<?php 
set_time_limit(0); 

include "pagebase.php"; 

$page = new pagebase(); 
$page->jQuery = true; 
$page->formatDoc = false; 
$page->addScript("javascript.js"); 
$page->addStylesheet("../codeclean.css"); 
$page->addStylesheet("stylesheet.css"); 
$page->title = "..."; 

$directory_path = "xml_documents"; 

$directory = scandir($directory_path); 
$files = array(); 

foreach($directory as $string) 
{ 
    if(preg_match("/.*\.xml/", $string, $result) > 0) 
     array_push($files, $result[0]); 
} 

$content = 
    " 
     <table cellpadding=\"0\" cellspacing=\"0\"> 
      <tr> 
       <td colspan=\"7\"> 
        <center><h2>...</h2></center> 
       </td> 
      </tr> 
      <tr> 
       <td class=\"header_cell\">Case ID</td> 
       <td class=\"header_cell\">Description (From RIPE)</td> 
       <td class=\"header_cell\">IP</td> 
       <td class=\"header_cell\">Fil</td> 
       <td class=\"header_cell\">Time</td> 
       <td class=\"header_cell\">Type</td> 
      </tr> 
    "; 

foreach($files as $index => $file) 
{ 
    $xml = simplexml_load_file("$directory_path/$file"); 
    $id = trim($xml->Case->ID); 
    $ip = trim($xml->Source->IP_Address); 
    $title = trim($xml->Content->Item->Title); 
    $time = trim($xml->Source->TimeStamp); 
    $type = trim($xml->Source->Type); 

    $desc_result = array(); 
    $info_result = array(); 

    $RIPE_result = file_get_contents("http://www.db.ripe.net/whois?searchtext=$ip"); 
    preg_match("/(?<=descr:)(\s*)(.*)/", $RIPE_result, $desc_result); 
    preg_match_all("/<pre>.*<\/pre>/sm", $RIPE_result, $info_result); 

    $info_result[0] = implode("", $info_result[0]); 

    if(count($desc_result) < 1) $desc_result[0] = "<font style=\"color:red\">No description found</font>"; 
    else $desc_result[0] = trim($desc_result[0]); 

    $content .= 
     " 
      <tr id=\"info_row_$index\"> 
       <td class=\"info_cell\">$id</td> 
       <td class=\"info_cell\">$desc_result[0]</td> 
       <td class=\"info_cell\">$ip</td> 
       <td class=\"info_cell\">$title</td> 
       <td class=\"info_cell\">$time</td> 
       <td class=\"info_cell\">$type</td> 
      </tr> 
      <tr id=\"expanded_row_$index\"> 
       <td class=\"expanded_cell\" colspan=\"7\"> 
        <div id=\"content_container_$index\"> 
         <input type=\"button\" class=\"pastey_button\" rel=\"$index\" value=\"Get info\" /> 
<div id=\"RIPE_$index\">$info_result[0]</div> 
        </div> 
       </td> 
      </tr> 
     "; 
} 

$content .= 
    " 
      <tr> 
       <td colspan=\"6\">Vi har totalt ".count($files)." henvendelser.</td> 
      </tr> 
     </table> 
    "; 

$page->body = $content; 
$page->drawPage(); 
?> 

Test en ligne code blocs

+1

s'il vous plaît partager du code ... – Frankie

+0

@Frankie Code ajouté – Hubro

Répondre

0

Je pense que RIPE a des limites d'utilisation - vous pouvez être en lock-out si vous effectuez trop de requêtes dans un certain laps de temps.

+0

C'est l'un de mes autres soucis. Espérons que quelqu'un ici sera en mesure de dire avec certitude. – Hubro

+0

Malheureusement, après d'autres tests, il s'est avéré que c'était le cas. Merci pour votre contribution – Hubro

0

Si par le temps que vous expirez signifie que vous voulez dire file_get_contents Je suis sûr que ça va jeter une erreur (ou au moins retourner faux). Autant que je sache, PHP n'a pas un certain nombre de requêtes HTTP qu'il peut remplir par exécution.

De combien d'articles parlez-vous ici? Avez-vous vérifié les valeurs de ces éléments?

Vous pouvez essayer d'utiliser set_time_limit(0) mais PHP devrait lancer une erreur si PHP atteint un temps d'exécution maximal, vous n'aurez peut-être pas besoin de cela.

+0

Pas d'erreur. Je suis en train de tester mon script avec 10 fichiers XML, et il récupère entre 1 et 4 éléments dans la liste avant qu'il arrête de renvoyer des informations. set_time_limit (0) n'a eu aucun effet d'ailleurs – Hubro