如何在php中拆分冗长的URI

时间:2016-09-11 10:05:25

标签: php

我通过这样的短信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; 
}

2 个答案:

答案 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扩展它。