PHP简单的HTML DOM解析器:使其循环直到没有错误

时间:2012-02-14 09:10:49

标签: php html parsing dom

我有一个名为GrabUrTime的应用程序,它是一个时间表查看实用程序,可从其他网站(我大学的网站空间)获取时间表。每隔凌晨2点我运行一个脚本,使用解析器擦除所有时间表并将其转储到我的数据库中。

但今天uni的服务器运行不正常,我的脚本继续在uni的服务器上给我错误500,使得脚本无法继续运行。这是周期性的,并非总是如此。然而,我尝试了几次,它只是随机发生,根本没有模式。

因此我想让我的脚本处理错误并使其循环直到获取数据。

function grabtable($intakecode, $week) {
$html = file_get_html("http://webspace.apiit.edu.my/schedule/intakeview_intake.jsp?Intake1=".$intakecode."&Week=" . $week);
$dumb = $html->find('table[border=1] tr');
$thatarray = array();
        for ($i=1; $i < sizeof($dumb);++$i){
        $arow = $html->find('table[border=1] tr', $i);
         $date = $arow->find('td font', 0)->innertext;
         $time = $arow->find('td font', 1)->innertext;
        $room = $arow->find('td font', 2)->innertext;
        $loca = $arow->find('td font', 3)->innertext;
         $modu = $arow->find('td font', 4)->innertext;
         $lect = $arow->find('td font', 5)->innertext;
        $anarray = array($date, $time, $room, $loca, $modu, $lect);
        $thatarray[$i] = $anarray;

        //echo "arraylol";
    }
    //echo serialize($tablearray)."<br/>";
    $html->clear();
    return $thatarray;
}

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:

function getHttpCode($url)
{
    $agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
    $ch=curl_init();
    curl_setopt ($ch, CURLOPT_URL,$url );
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch,CURLOPT_VERBOSE,false);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    $page=curl_exec($ch);

    //echo curl_error($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if($httpcode>=200 && $httpcode<300) 
    {
        // YOUR CODE
    }
else
{
    // What you want to do should it fail
    // perhaps this will serve you better as while loop, e.g.
    // while($httpcode>=200 && $httpcode<300) { ... }
}

<强>使用

 getHttpCode($url);

它可能不会整齐地插入到您的代码中,但我确信它可以帮助您进行一些重新分解以适应您现有的代码结构。