I have a custom function that uses cURL to make a request and then handle the response. I use it in a loop and the function itself works fine. But, when used inside of a loop, the function that is supposed to be executed first often doesn't. Seems like the sequence in which the posts are supposed to occur are totally neglected.
function InitializeCurl($url, $post, $post_data, $token, $form, $request) {
if($post) {
if($form) {
$default = array('Content-Type: multipart/form-data;');
} else {
$default = array('Content-Type: application/x-www-form-urlencoded; charset=utf-8');
}
} else {
$default = array('Content-Type: application/json; charset=utf-8');
}
// Add the authorization in the header if needed
if($token) {
$push = 'Authorization: Bearer '.$token;
array_push($default, $push);
}
$headers = array_merge($GLOBALS['basics'], $default);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.test.com/'.$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, 0);
if($request) {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $request);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if($post) {
if($form === false) {
$post_data = http_build_query($post_data);
}
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}
$response = curl_exec($ch);
return $response;
}
// Define the token
$token = "sample_token";
$msg = array('msg_1', 'msg_2', 'msg_3', 'msg_4', 'msg_5', 'msg_6', 'msg_7', 'msg_8', 'msg_9', 'msg_10');
for($i=0;$i<count($msg);$i++) {
$post_data = array("content_type" => "text",
"body" => $msg[$i]);
$info = InitializeCurl("send_message/", true, $post_data, $token, false, false);
$decode = @json_decode($info, true);
}
The loop should make it so that each message is posted after one another in order. But, it's totally not. Would adding CURLOPT_TIMEOUT
fix this?
Seems you are missing some code, but anyway, you would probably be better off using this CURL class, or rather classes:
http://semlabs.co.uk/journal/multi-threaded-stack-class-for-php
See examples. You will be returned a result with all the URLs. You can loop through to get details of the URL etc. like this:
$urls = array(
1 => 'http://seobook.com/',
2 => 'http://semlabs.co.uk/',
64 => 'http://yahoo.com/',
3 => 'http://usereffect.com/',
4 => 'http://seobythesea.com/',
5 => 'http://darkseoprogramming.com/',
6 => 'http://visitwales.co.uk/',
77 => 'http://saints-alive.co.uk/',
7 => 'http://iluvsa.blogspot.com/',
8 => 'http://sitelogic.co.uk/',
9 => 'http://tidybag.co.uk/',
10 => 'http://felaproject.net/',
99 => 'http://billhicks.com/'
);
$opts = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true
);
$hs = new CURLRequest();
$res = $hs->getThreaded( $urls, $opts, 5 );
foreach( $res as $r )
{
print_r( $r['info'] ); # prints out verbose info and data of URL etc.
print_r( $r['content'] ); # prints out the HTML response
}
But the result will be returned in sequence, so you can also identify the response by index.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.