我通过这样的短信gatway发送带有php API的批量短信:
http://smsserviceprovider.com/sendsms.php?apikey=xxxx&text=testsms&mobiles=11111,22222,33333,44444,55555,66666....
(最多1800个移动号码,存储在mysqldb
中)。但服务提供商只允许我一次只发送50部手机。所以我必须多次发送短信。我怎样才能split the parameter
手机这样
http://smsserviceprovider.com/sendsms.php?apikey=xxxx&text=testsms&mobiles=11111,22222
http://smsserviceprovider.com/sendsms.php?apikey=xxxx&text=testsms&mobiles=33333,44444
http://smsserviceprovider.com/sendsms.php?apikey=xxxx&text=testsms&mobiles=55555,66666....
我目前在php中的功能是
function send_sms($message, $numbers) {
$apikey="xxxxx";
$message=urlencode($message);
$var = "apikey=".$apikey."&text=".$message."&mobiles=".$numbers";
$curl=curl_init('http://smsserviceprovider.com/sendsms.php?'.$var);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
$response=curl_exec($curl);
curl_close($curl);
return $response;
}
答案 0 :(得分:0)
诀窍是使用逗号分隔的电话号码列表构建一个数组,使用类似explode()
的内容,然后使用类似array_chunk()
的内容将它们分组为50个数据块。但是,这确实意味着由于此约束,您的函数现在必须发出多个请求而不是一个请求。因此,在下面的示例中,我返回一组响应,而不是仅返回一个响应。
function send_sms($message, $numbers) {
$responses = [];
$params = [
'text' => $message,
'mobiles' => '',
'apikey' => 'xxxxx',
];
$numbers = explode(',', $numbers);
foreach(array_chunk($numbers, 50) as $numlist) {
$params["mobiles"] = $numlist;
$queryString = http_build_query($params);
$responses[] = file_get_contents($url . $queryString);
}
return $responses;
}
答案 1 :(得分:0)
我不确定你到底想要什么。 但是如果你需要mysql解决方案那么你应该在查询中使用LIMT语句。 例如:
$sqlstr = "SELECT * FROM Mobiles LIMIT 50 OFFSET 0";
or
$sqlstr = "SELECT * FROM Mobiles LIMIT 0, 50";//offset, limit
使用以下方法可以在1800移动的检索数组中完成类似的功能:
$sliced = array_slice($mobileArray, 0, 50)//array_slice($mobileArray, OFFSET, LIMIT);
您可以递归地继续更改两个实现中的偏移量。 我希望可以开始使用PHP扩展它。