2017-03-06 9 views
1

Ich machte Gebrauch von CURL und stieß auf ein seltsames Verhalten davon.Merkwürdiges Verhalten der Locke

$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); 
        }  

In dieser Verwendung wurde die Locke mit dem gleichen Wert für die Variable 'number' mit jeder Zeit curl Anfrage gesendet. Aber wenn ich die URL-Var-Definition in jeden Befehl einfüge, hat es richtig funktioniert. Wie kann das passieren?

Antwort

1

Das Problem ist, dass Sie Verkettung eine neue Abfrage params mit früheren URL bei jeder Iteration machen:

... 
$url = $url . "?" . http_build_query($smsparam, '&'); // <---- 
... 

dass also auf einige Iteration Ihre $url kann wie folgt aussehen:

"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" 

Der richtige Weg wäre das Hinzufügen neuer Abfrageparameter zur ursprünglichen $url wie unten gezeigt:

$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)); 
    .... 
+0

danke für das Licht. – Bineesh

+0

@Bineesh, du bist willkommen – RomanPerekhrest