PHP cURL执行脚本不会';I don’我没有按预期工作
功能PHP cURL执行脚本不会';I don’我没有按预期工作,php,curl,Php,Curl,功能 function curlPost($url, $postArray = NULL, $timeout=2, $errorReport=FALSE) { # PREPARE THE POST STRING if ($postArray != NULL) { $postString = ''; foreach ($postArray as $key => $val) { $postString .= urlenco
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 "</pre>\n";
createLog("CURL FAIL: {$url} TIMEOUT={$timeout}, CURL_ERRNO={$err}");
}
curl_close($curl);
return FALSE;
}
# ON SUCCESS
curl_close($curl);
return $htm;
}
它的工作如预期,但我有大量的成员,所以我不得不使用分页,如
等等
它只是传输第一个结果集,而不用于其他页面。如果我手动执行它,它将重定向到下一页(如果有记录)
现在我该怎么办?我现在完全被卡住了,没有主意了。如果有人能帮我解决这个问题,我会很高兴的
注意:
一切都在同一个领域。没有追踪任何推荐人,没有检查任何cookie。只调用纯PHP页面。如果cURL调用的页面中存在任何分页,我将使用元重定向重定向重定向到下一页
我不想在循环中使用cURL。如果被调用的php页面需要分页,我会在被调用的php页面中添加以下代码
for($i=0;$i<100;$i++){
$url = 'http://siteurl.com/crons/transfer_members.php?page='.$i;
$response = curlPost($url, NULL, 10);
echo ($response) ? "{$url} executed" : "Couldn't execute {$url}";
}
#重定向
回声';
$url = 'http://siteurl.com/crons/transfer_members.php';
$response = curlPost($url, NULL, 10);
echo ($response) ? "{$url} executed" : "Couldn't execute {$url}";
额外信息
我的数据库中有crons表,我使用循环crons表的记录定义$url
。有些php页面可能有分页,有些没有任何分页。这就是为什么我真的希望避免在循环内部使用cURL调用来分页
如果需要分页,则在被调用的PHP页面中存在分页。如果我在浏览器上访问被调用的页面,它会将我重定向到下一页。当我用cURL调用页面时,我也期望得到同样的结果
意义;
如果我在浏览器上访问,它会使用元重定向将我重定向到下一页(示例:)
我对cURL也有同样的期望。当cURL调用时,它应该遍历下一页,直到所有页面都完成。它只是访问第一个页面并在那里停留。如果您通过
脚本或meta
标记将浏览器指向连续页面,浏览器将为您处理该页面,但cURL不会。这里的一个解决方案是对您使用的代码进行快速str_pos,如果找到,再次调用cURL。在循环中执行此操作,并收集所有输出,直到在完成时找不到字符串。您需要正确模拟。可能有很多原因,
siteurl.com
可能正在跟踪推荐人李>
您也没有发送正确的请求头。它只是通过的curls默认标题
siteurl.com
可能正在使用Cookie。你也没有处理好这件事
事实上,这完全取决于siteurl.com
如何面对您的请求
另外,您似乎没有在$url>上使用任何分页http://siteurl.com/crons/transfer_members.php';代码>它应该更像
对于($i=0;$i我只是有一个不同的方法。
我返回了。如果返回的结果以http://或https://
开头,那么我再次调用cURL
,直到返回的数据完成
我仍然没有在循环中使用cURL(这会导致其他不想要的结果),但仍然设法使它工作
特别感谢@Shiplu我没有在那里使用,我在transfer\u成员中有元重定向。php
siteurl.com没有跟踪引用者、cookie或任何东西。所有内容都在同一个域中。我试图避免循环cURL调用,我想这是不可能的。@Pixeler为什么你认为这不可能?首先我不知道这是否可行,但我更新了我的问题。如果需要,我在PHP页面中有元重定向,该页面由cURL调用。我不知道如何解释我的目的。我真的不喜欢在循环中循环使用cURL。我只想执行给定的$url
$url来自数据库。一些$url值可能有分页,但有些没有,这就是为什么我不能以这种方式在循环中使用cURL。
for($i=0;$i<100;$i++){
$url = 'http://siteurl.com/crons/transfer_members.php?page='.$i;
$response = curlPost($url, NULL, 10);
echo ($response) ? "{$url} executed" : "Couldn't execute {$url}";
}