2012-03-13 139 views
1

我使用PHP从数据库中获取URL列表。每个网址都由PHP中的Check_URL Function检查,它使用curl来检查网站是否生效。使用卷曲和PHP

function Check_URL($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_TIMEOUT, 3); 
    $page = curl_exec($ch); 
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

    curl_close($ch); 
    if ($httpcode >= 200 && $httpcode <= 301) { 
     return true; 
    } else { 
     return false; 
    } 
} 

不幸的是,页面需要永久加载。我读过curl_multi_init();可能是我的解决方案,但我不知道如何将其实现到我所拥有的。提前致谢。

+0

所以,当你在你的服务器上加载一个页面时,这个函数被调用并检查一些urls数量?这意味着不仅是你的页面加载,而且你还在等待X URL被CURL加载。您加载了多少个网址?您可能想要考虑让其他内容触发您的脚本,如您的网页上的图像。 – Aerik 2012-03-13 23:02:57

+1

这是你应该在后台真正做的事情,与为用户呈现页面的线程分开。将这些URL的任务投入到Beanstalkd中,并编写一个工作者来测试它们并将结果存储在数据库中。 – 2012-03-13 23:04:09

+0

@Aerik - 30个网址开始。 – Joe 2012-03-13 23:05:06

回答

0

在初始化curl_multi_init之后,您需要在for或foreach循环中迭代您的URL。 YOu会在这里找到一个很好的例子:http://www.fusionswift.com/examples/2011/08/php-curl_multi_exec-example/

对于你的函数,我会让它处理一个URL数组作为参数。

+1

听起来像很好的输入,节省重新初始化的开销,但他仍然会加载30 urls ...我认为他需要在他的网页上有一个图像加载PHP脚本来检查网址或使用AJAX或东西。 – Aerik 2012-03-13 23:07:31

+1

@Aerik - 你绝对是对的 - 如果页面正在等待所有这些URL加载或测试,那么对于最终用户来说这不是一个好的UI体验。另一种方法是加载初始页面,然后在AJAX调用中处理这个功能,同时给用户一些类型的信息性消息。 – SBerg413 2012-03-13 23:12:09

0

也使用CURLOPT_CONNECTTIMEOUT选项。

如果将CURLOPT_NOBODY设置为TRUE,那么您的函数可以更快地工作。

this code如果你想检查多个网址。