Функция
<code>function curlPost($url, $postArray = NULL, $timeout=2, $errorReport=FALSE) {
# PREPARE THE POST STRING
if ($postArray != NULL) {
$postString = '';
foreach ($postArray as $key => $val) {
$postString .= urlencode($key) . '=' . urlencode($val) . '&';
}
$postString = rtrim($postString, '&');
}
# PREPARE THE CURL CALL
$curl = curl_init();
curl_setopt( $curl, CURLOPT_URL, $url );
curl_setopt( $curl, CURLOPT_HEADER, FALSE );
curl_setopt( $curl, CURLOPT_POST, TRUE );
($postArray != NULL) ? curl_setopt( $curl, CURLOPT_POSTFIELDS, $postString ) : '';
curl_setopt( $curl, CURLOPT_TIMEOUT, $timeout );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, TRUE );
# EXECUTE THE CURL CALL
$htm = curl_exec($curl);
$err = curl_errno($curl);
$inf = curl_getinfo($curl);
# ON FAILURE
if (!$htm) {
# PROCESS ERRORS HERE
if ($errorReport) {
echo "CURL FAIL: {$url} TIMEOUT={$timeout}, CURL_ERRNO={$err}";
echo "<pre>\n";
var_dump($inf);
echo "
\ n "; createLog (" CURL FAIL: {$ url} TIMEOUT = {$ timeout}, CURL_ERRNO = {$ err} ");} curl_close ($curl); вернуть FALSE;} # ON SUCCESS curl_close ($ curl); вернуть $ htm;}
Задача
Я использую cURL для того, чтобыдля выполнения некоторых ботов. Например;
$url = 'http://siteurl.com/crons/transfer_members.php';
$response = curlPost($url, NULL, 10);
echo ($response) ? "{$url} executed" : "Couldn't execute {$url}";
Он работает, как и ожидалось, но у меня есть тонны членов, поэтому мне пришлось использовать нумерацию страниц, например;
http://siteurl.com/crons/transfer_members.php?page=1
http://siteurl.com/crons/transfer_members.php?page=2 и т. Д.
Он просто передает первый набор результатов и не переносится на другие страницы. Если я выполняю его вручную, он перенаправляет на следующую страницу (если есть записи).
Что мне делать в этот момент? Я довольно застрял и у меня сейчас нет идей. Я буду рад, если кто-нибудь сможет мне помочь с этой проблемой.
Примечание:
Все находится в одном домене. Никакого отслеживания ни одного реферера, ни проверки куки. Вызываются только чистые страницы PHP. Если на странице есть какая-либо нумерация страниц,как вызвано cURL, я использую мета-перенаправления для перенаправления на следующую страницу.
Я не хочу использовать cURL внутри цикла.Если вызываемой странице php требуется разбиение на страницы, я добавляю следующий код внутри вызываемой страницы php:
# REDIRECT
echo '<meta http-equiv="refresh" content="' . $timer . ';url=' . $url . '">';
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
У меня есть таблица crons в моей базе данных, и я определяю $url
с записями таблицы циклических крон.Некоторые страницы PHP могут иметь нумерацию страниц, некоторые не имеют нумерации страниц.Вот почему я действительно хотел бы избегать использования вызовов cURL внутри цикла для разбивки на страницы.
Если необходимо разбиение на страницы, в вызываемой странице PHP есть разбиение на страницы.Если я захожу на вызываемую страницу в браузере, она перенаправляет меня на следующую страницу.Я ожидал того же, когда позвоню на страницу с помощью cURL.
Значение;если я захожу на http://siteurl.com/crons/transfer_members.php в моем браузере, он перенаправляет меня на следующую страницу с мета-перенаправлением (пример: http://siteurl.com/crons/transfer_members.php?page=x)
Я ожидал того же с cURL. Когда cURL будет вызывать http://siteurl.com/crons/transfer_members.php он должен пройти по следующим страницам, пока все страницы не будут завершены. Он просто посещает первую страницу и останавливается там.