我正在使用 CURL 并遇到了一个奇怪的行为。
$url = 'https://makesif.com/sms/bulksms_m.php';
foreach($msg as $v) {
$smsparam=array('number' => '+974'.$v[1],'message' => $v[2]);
$url = $url . "?" . http_build_query($smsparam, '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_exec($ch);
curl_close($ch);
}
在此用法中,每次curl请求时,curl都会以变量'number'
的相同值发送。但是当我将URL var定义放在每个命令中时,它工作正常。怎么会发生这种情况?
答案 0 :(得分:1)
问题是你在每次迭代时使用以前的URL连接新的查询参数:
...
$url = $url . "?" . http_build_query($smsparam, '&'); // <----
...
因此,在某些迭代中,您的$url
可能如下所示:
"https://makesif.com/sms/bulksms_m.php?number=%2B974&message=0?number=%2B974&message=1?number=%2B974&message=2?number=%2B974&message=3?number=%2B974&message=4?number=%2B974&message=5"
正确的方法是将新查询参数添加到初始$url
,如下所示:
$url = 'https://makesif.com/sms/bulksms_m.php';
foreach ($msg as $v) {
$smsparam = array('number' => '+974'.$v[1],'message' => $v[2]);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url . "?" . http_build_query($smsparam));
....