2010-04-23 101 views
1

我为我们的软电话中的屏幕弹出窗口编写了一个脚本,该脚本为调用者定位目录列表,但偶尔他们会得到“无法读取输入流”,脚本的其余部分退出。使用fread抑制错误

有没有人有任何建议如何抑制错误的错误信息,并允许脚本的其余部分运行?谢谢!

$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

不要使用ereg_函数,请使用preg_函数。 Ereg函数已弃用。 – ryeguy 2010-04-23 18:46:52

+0

我之前写过这篇文章,因为我记得我在语法上遇到了很多困难,因为我需要在/'之间选择字符串。 老实说,preg语法对我来说是中国语。 – Mikey1980 2010-04-23 19:22:43

+1

Preg语法与ereg语法相同,但是它的扩展。唯一的区别是你必须将正则表达式换成两个。 – ryeguy 2010-04-23 20:24:02

回答

0

您需要检查您的返回值,具体为fopen

事情是这样的:

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

然后你需要决定如何处理时fopen不能从你给它的URL读取时出现的错误。我怀疑你实际上是想简单地压制这个错误,并允许脚本继续,而不需要做一些有意义的事情。您可以暂时暂停并尝试重新打开该文件,或者将用户指向更友好的错误页面,而不是使用裸露的“无法打开文件”消息而死。

+0

谢谢,我可能会做相反的,如果($ file === true){...做其余的查找}这些变量只是在脚本的html部分进一步回应。你认为这会起作用吗? – Mikey1980 2010-04-23 19:07:13

+1

'if($ file === true)'永远不会成功,因为fopen永远不会返回布尔值true。使用'if($ file)'而不是[===运算符](http://php.net/manual/en/language.operators.comparison.php) – meagar 2010-04-23 20:03:51