ホームページ > バックエンド開発 > PHPチュートリアル > 如何处理simple_html_dom load_file 超时的问题?

如何处理simple_html_dom load_file 超时的问题?

WBOY
リリース: 2016-06-06 20:22:37
オリジナル
1308 人が閲覧しました

我用simple_html_dom 爬取网页,用的面向对象方式,但是会出现超时的情况。

<code>set_time_limit(10000);
ini_set('default_socket_timeout', 5);

$context = stream_context_create(
    array(
        'http'=>array(
            'method' => 'GET', 
            'timeout' => 5
        ),
    )
);
$shd->load_file($player_url, false, $contex);

</code>
ログイン後にコピー
ログイン後にコピー

我用上面的代码做限时处理,可是不起作用。当时间超过10000秒时会退出脚本,但是我希望一条请求超时后会终止这条请求,然后重新发起请求或进行下一条请求。大神有好的办法么?

回复内容:

我用simple_html_dom 爬取网页,用的面向对象方式,但是会出现超时的情况。

<code>set_time_limit(10000);
ini_set('default_socket_timeout', 5);

$context = stream_context_create(
    array(
        'http'=>array(
            'method' => 'GET', 
            'timeout' => 5
        ),
    )
);
$shd->load_file($player_url, false, $contex);

</code>
ログイン後にコピー
ログイン後にコピー

我用上面的代码做限时处理,可是不起作用。当时间超过10000秒时会退出脚本,但是我希望一条请求超时后会终止这条请求,然后重新发起请求或进行下一条请求。大神有好的办法么?

不要直接使用它提供的接口获取网络上的内容,虽然它具备这个能力,但这也只是给你调试的时候使用的。在真实情况下很容易碰到如你问题中所述的超时情况,所以你最好先用curl接口来获取内容,然后再用simple_html_dom 来处理这个内容,前者可以很方便地处理各种网络错误

<code class="php">function get_html_by_url($url, $timeout = 5) {
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    // 自动识别301跳转
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    
    // 设置各种超时限制
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    
    $html = curl_exec($ch);
    
    // 处理各种错误
    if (false === $html) {
        return false;
    }
    
    // 处理http错误
    if (200 != curl_getinfo($ch, CURLINFO_HTTP_CODE)) {
        return false;
    }
    
    return $html;
}

// 直接使用
$html = get_html_by_url('http://www.sina.com.cn', 5);

// 用simple_html_dom加载
if (false !== $html) {
    $shd->load($html);
}</code>
ログイン後にコピー

配合set_time_limit(0);,必要时,适当增大default_socket_timeout

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート