【问题标题】:Using Curl and PHP使用 Curl 和 PHP
【发布时间】:2012-03-13 22:58:49
【问题描述】:

我使用 PHP 从数据库中获取 url 列表。每个 url 都由 php 中的 Check_URL 函数检查,该函数使用 curl 来检查网站是否处于活动状态。

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();可能是我的解决方案,但我不确定如何将它实施到我所拥有的中。提前致谢。

【问题讨论】:

  • 所以当你在你的服务器上加载一个页面时,这个函数会被调用并检查一些url?这意味着不仅您的页面正在加载,而且您还在等待 CURL 加载 X url。您正在加载多少个网址?您可能想考虑让其他东西触发您的脚本,例如页面上的图像。
  • 这是你应该在后台真正做的事情,与为用户呈现页面的线程分开。将这些 URL 的任务扔到 beanstalkd 中,并编写一个 worker 来测试它们并将结果存储在您的数据库中。

标签: php curl


【解决方案1】:

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

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

【讨论】:

  • 听起来不错的输入,节省了重新初始化的开销,但他仍然要加载 30 个 url...我认为他需要在他的页面上有一个图像加载 php 脚本来检查网址或使用ajax或其他东西。
  • @Aerik - 你是绝对正确的 - 如果页面正在等待所有这些 URL 加载或被测试,这对最终用户来说不是一个好的 UI 体验。另一种方法是加载初始页面,然后在 AJAX 调用中处理此功能,同时为用户提供某种类型的信息性消息。
【解决方案2】:

也使用 CURLOPT_CONNECTTIMEOUT 选项。

如果您将 CURLOPT_NOBODY 设置为 TRUE,您的函数会运行得更快。

如果您想检查多个网址,请查看this code

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多