2010-04-23 4 views
1

J'ai écrit un script pour les captures d'écran à partir de notre softphone qui localise une liste de répertoires pour l'appelant, mais parfois ils ne peuvent pas lire le flux d'entrée et le reste du script.réprimer l'erreur en utilisant fread()

Est-ce que quelqu'un a des suggestions sur la façon de supprimer le message d'erreur et d'autoriser l'exécution du reste du script? Merci!

$i=0; 

    $open = fopen("http://www.411.ca/whitepages/?n=".$_GET['phone'], "r"); 
    $read = fread($open, 9024); 
    fclose($open); 
    eregi("'/(.*)';",$read,$got); 
    $tv = ereg_replace('[[:blank:]]',' ',$got[1]); 
    $url = "http://www.411.ca/".$tv; 
    while ($name=="unknown" && $i < 15) { ## try 15 times before giving up 
    $file = @ fopen($fn=$url,"r") or die ("Can't read input stream"); 
    $text = fread($file,16384); 
    if (preg_match('/"name">(.*?)<\/div>/is',$text,$found)) { 
      $name = $found[1]; 
    } 
    if (preg_match('/"phone">(.*?)<\/div>/is',$text,$found)) { 
      $phone = $found[1]; 
    } 
    if (preg_match('/"address">(.*?)<\/div>/is',$text,$found)) { 
      $address = $found[1]; 
    } 
    fclose($file); 
    $i++; 
    } 
+0

N'utilisez pas les fonctions ereg_, utilisez les fonctions preg_. Les fonctions Ereg sont obsolètes. – ryeguy

+0

J'ai écrit ceci il y a longtemps, car je me souviens que j'ai eu beaucoup de mal avec la syntaxe puisque j'avais besoin de sélectionner une chaîne entre/'; Honnêtement, la syntaxe preg est chinoise pour moi..lol! – Mikey1980

+1

La syntaxe Preg est la même que la syntaxe ereg, mais elle est étendue. La seule différence est que vous devez envelopper l'expression rationnelle dans deux/s. – ryeguy

Répondre

0

Vous devez vérifier vos valeurs de retour, spécifiquement pour fopen.

Quelque chose comme ceci:

$file = fopen($fn=$url,"r"); 
if ($file === false) { 
    // Unable to open stream, handle error 
} 

Ensuite, vous devez décider comment gérer l'erreur qui se produit lorsque fopen ne peut pas lire à partir de l'URL que vous le donnez. Je doute que vous vouliez simplement supprimer l'erreur et permettre au script de continuer sans les données dont il a besoin pour faire quelque chose de significatif. Vous pouvez faire une courte pause et tenter de rouvrir le fichier, ou diriger l'utilisateur vers une page d'erreur plus conviviale au lieu de mourir avec un simple message "Impossible d'ouvrir le fichier".

+0

merci, je peux faire le contraire, si ($ file === true) {... faire le reste de la recherche} Ces variables sont juste écho plus bas dans la partie html de mon script. Pensez-vous que cela fonctionnera? – Mikey1980

+1

'if ($ file === true)' ne réussira jamais, car fopen ne renvoie jamais de valeur booléenne true. Utilisez à la place 'if ($ file)' et lisez l'opérateur [===] (http://php.net/manual/fr/language.operators.comparison.php) – meagar

Questions connexes