Я пытаюсь создать своего рода монитор с использованием cURL, чтобы отслеживать различные панели. Идея состоит в том, что я загружаю кучу URL-адресов, которые я хочу видеть из базы данных, и после запуска этого кода в окне браузера мне показывают эти URL-адреса в течение ограниченного времени (например, мне показывают 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 в целом, есть ли лучший способ сделать это? Я читал, что есть многофункциональная функция, которая позволяет мне асинхронно загружать несколько URL-адресов, но я не уверен, что это послужит мне тем, что я хочу.
Причина, по которой скрипт заканчивается после загрузки страницы, заключается в том, что в PHP, когда вы используете return
вне функции, он завершает выполнение скрипта, и у вас есть return
в конце вашего цикла цикла.
(Увидеть http://php.net/manual/en/function.return.php для документации return
.)
Вы не можете сделать все то, что вы хотите сделать с PHP. PHP работает на сервере, и сервер не может просто отправить инструкцию браузеру, чтобы сделать что-то, если все, что браузер делает, это отправляет запрос, получает ответ и завершает соединение (что обычно и происходит). Вам нужно что-то на стороне клиента, чтобы браузер начал действовать.
Как сказал Кейлин, Javascript — это, вероятно, путь. Я уверен, что вы могли бы использовать Javascript, чтобы каким-то образом постоянно получать больше информации с вашего сервера, и просто настроить свой сервер так, чтобы он реагировал на эти запросы из Javascript. С другой стороны, если все, что вы хотите сделать с помощью PHP, это искать контент из других мест в Интернете и передавать его непосредственно в браузер, как вы это делаете сейчас, вы, вероятно, с такой же легкостью могли бы добавить на свою страницу скрипт Javascript. который получает доступ к инструментальным панелям, на которые вы хотите посмотреть напрямую.
РЕДАКТИРОВАТЬ: Если вы действительно хотите просто использовать PHP для этого, вы можете отправить ему заголовок, который заставляет страницу обновляться (перенаправлять на себя) через определенное время. Затем вы можете использовать параметры URL с GET или переменную сеанса, чтобы определить, какую страницу должен отправить ваш PHP-скрипт, и сделать это.
(Увидеть Перенаправление страницы через определенное время PHP)
По сути, вы бы добавить строку, как
header("refresh:30;url=this.php");
перед отправкой какого-либо контента, где URL является URL-адресом страницы вашего монитора, а не this.php
, Затем вы отправите страницу для отображения. Затем, через тридцать секунд, браузер снова запросит вашу страницу, и вы сможете отправить назад другую страницу с тем же заголовком. Конечно, вы также хотели бы иметь некоторый механизм, который позволяет серверу отслеживать, какую страницу он должен отправить. Следует помнить, что этот заголовок не является стандартным, поэтому более вероятно, что некоторые браузеры его проигнорируют, что может стать проблемой.
Других решений пока нет …