2013-03-07 4 views
0

У меня есть PHP-скрипт, который использует cURL для отправки полезной информации XML поставщику услуг SMS. Проблема заключается в том, что пользователи жалуются, что получают несколько SMS-сообщений (например, иногда 50 в течение дня), и я не знаю, является ли это проблемой для моего кода или у поставщика услуг SMS. Форма, которая отправляет это, доступна только кому-то, кто не будет отправлять сообщения более одного раза.cURL - скрипт, отправляющий несколько нежелательных запросов

Это мой код, и я был бы очень признателен, если кто-то может иметь быстрый взгляд на это, чтобы увидеть, если я пропускаю важный вариант, который, если не хватает, будет отправлять несколько запросов:

<?php 
// the following code is only executed if there is no sms timestamp in the db for the user. sms timestamp is added to the db when $error != true; 
$error = false; 

define('XML_PAYLOAD', '<xml data...>'); 
define('XML_POST_URL', 'https://URLOFSERVICEPROVIDER'); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, XML_POST_URL); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
curl_setopt($ch, CURLOPT_TIMEOUT,  5); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($ch, CURLOPT_POST,   true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, XML_PAYLOAD); 
curl_setopt($ch, CURLOPT_HTTPHEADER,  array('Content-Type: text/xml; charset=utf-8', 'Content-Length: '.strlen(XML_PAYLOAD))); 
$result = curl_exec($ch); 

if (curl_errno($ch)) { 
    $error = true; 
} else { 
    $returnCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    switch($returnCode){ 
     case 200: 
      break; 
     default: 
      $error = true; 
      break; 
    } 
} 
curl_close($ch); 
if($error == false){ 
    // store that SMS was sent successfully 
} 
?> 
+0

Я думаю, что ваш тайм-аут очень низок. Вы можете проверить его, увеличившись, по крайней мере, до 30 секунд, поскольку какое-то время процесс занимает время при вычислении загрузки валидации и многих других вещах. – Vineet1982

+1

Я не вижу никаких проверок в вашем коде, где вы проверяете, отправлено ли SMS уже или не. Пользователи могут просто нажать кнопку отправки несколько раз, потому что они нетерпеливы. – hakre

+0

@hakre извините, я проверяю, но не добавил кодировку. Когда '$ error' является ложным, я сохраняю метку времени в db. Код, который я опубликовал, выполняется только в том случае, если метка времени не найдена. – SammyBlackBaron

ответ

0

, как насколько я вижу, нет кода, который будет запрашивать дважды.

Только один вопрос - я не вижу curl_exec в вашем коде, не так ли?

Что об отправке в два раза - попробуйте добавить журналы здесь

if (curl_errno($ch)) { 
    $error = true; 
} 

и здесь

if($error == false){ 
    // store that SMS was sent successfully 
} 

, который будет включать в себя текущее время, это поможет вам увидеть, сколько раз мы Уолта в эту часть сценария.

Смежные вопросы