卷曲的奇怪行为

时间:2017-03-06 20:38:33

标签: php curl

我正在使用 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定义放在每个命令中时,它工作正常。怎么会发生这种情况?

1 个答案:

答案 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));
    ....