使用cURL / PHP显示多个页面

时间:2017-02-01 04:01:46

标签: php curl monitor

我尝试使用cURL构建各种监视器,以跟踪各种不同的仪表板。我的想法是我加载了一堆我希望从数据库中看到的URL,并且在浏览器窗口上运行此代码后,我在有限的时间内显示了这些URL(例如,我' m显示www.dashboard.zopim.com 10秒,然后它进入另一个不同的URL 30秒,依此类推,当它结束时,它再次开始。)

<?php

include_once('connection.php');

$query = "SELECT url, time FROM $tb ORDER BY position";
$result = mysqli_query($connection_, $query);

$rowcount = mysqli_num_rows($result);

$curl_handle = curl_init();
$data = array();

//base array building
while ($row = mysqli_fetch_array($result, MYSQLI_NUM)) {
    $data_b = array();
    $data_b['curl_handle'] = $curl_handle;
    $data_b['url'] = $row[0];
    $data_b['time'] = $row[1];
    array_push($data, $data_b);
}

for ($i=0; $i < $rowcount; $i++) {
    $ch = $data[$i]['curl_handle'];
    curl_setopt($ch, CURLOPT_URL, $data[$i]['url']);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    //curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 1);

    $grab = curl_exec($ch);
    usleep($data[$i]['time']*100);
    curl_close($ch);
    return $grab;
}
?>

问题是我甚至无法让它开始运行。就像现在一样,它只是加载第一页并保留在那里。

另外,作为一个评论,因为我对整个cURL非常不熟悉,有没有更好的方法来做到这一点?我已经读过,这是一个多功能,允许我异步加载多个网址,但我不确定它是否能满足我的需求。

1 个答案:

答案 0 :(得分:0)

脚本在加载页面后结束的原因是在PHP中,当您在函数外部使用return时,它会终止脚本的执行,并且在结束时有return你的循环块。

(有关return的文档,请参阅http://php.net/manual/en/function.return.php。)

你无法真正完成你想要用PHP做的所有事情。 PHP在服务器上运行,如果所有浏览器都发送请求,接收响应并结束连接(通常发生这种情况),服务器就不能向浏览器发送指令以执行某些操作。您需要在客户端使用某些东西让浏览器采取行动。

正如Kaylined所说,Javascript可能就是这样。我确定您可以使用Javascript以某种方式不断从服务器获取更多信息,并设置您的服务器以响应来自Javascript的这些请求。另一方面,如果你想用PHP做的只是从互联网上的其他位置查找内容并将其直接传递给浏览器,就像你现在正在做的那样,你可能很容易让你的页面包含一个Javascript脚本,它可以访问您想要直接查看的仪表板。

编辑:如果你真的想只使用PHP,你可以让它发送一个标题,导致页面在给定时间后刷新(重定向到自身)。然后,您可以使用带GET的URL参数或会话变量来确定PHP脚本应发回的页面,并执行此操作。 (见Page redirect after certain time PHP

基本上,你会添加像

这样的行
header("refresh:30;url=this.php");

在您发送任何内容之前,其中网址是您的监控页面的网址,而不是this.php。然后你会发送页面显示。然后,在三十秒后,浏览器将再次请求您的页面,并且您可以使用相同的标题发送回不同的页面。当然,您还希望有一些机制让服务器跟踪它应该发送的页面。有一点需要注意的是,这个标题不是标准的,所以有些浏览器更有可能忽略它,这将是一个问题。