php - 在没有浏览器超时的情况下在 PHP 中处理大量数据

标签 php mysql codeigniter codeigniter-2

我有一系列手机号码,大约有 50,000 个。我正在尝试使用第三方 API 处理并向这些号码发送批量短信,但浏览器会卡住几分钟。我正在寻找更好的选择。

数据处理包括检查手机号码类型(例如 CDMA)、为所有号码分配唯一 ID 以供进一步引用、检查网络/国家/地区的唯一费用等。

我想过把数据库里的数据排队,用cron每分钟批量发送5k左右,但是消息多的话会很费时间。我还有哪些其他选择?

我在 XAMPP 服务器上使用 Codeigniter 2。

最佳答案

我会写两个脚本:

文件 index.php:

<iframe src="job.php" frameborder="0" scrolling="no" width="1" height="1"></iframe>
<script type="text/javascript">
    function progress(percent){
        document.getElementById('done').innerHTML=percent+'%';
    }
</script><div id="done">0%</div>

文件job.php:

set_time_limit(0);                   // ignore php timeout
ignore_user_abort(true);             // keep on going even if user pulls the plug*
while(ob_get_level())ob_end_clean(); // remove output buffers
ob_implicit_flush(true);             // output stuff directly
// * This absolutely depends on whether you want the user to stop the process
//   or not. For example: You might create a stop button in index.php like so:
//     <a href="javascript:window.frames[0].location='';">Stop!</a>
//     <a href="javascript:window.frames[0].location='job.php';">Start</a>
// But of course, you will need that line of code commented out for this feature to work.

function progress($percent){
    echo '<script type="text/javascript">parent.progress('.$percent.');</script>';
}

$total=count($mobiles);
echo '<!DOCTYPE html><html><head></head><body>'; // webkit hotfix
foreach($mobiles as $i=>$mobile){
    // send sms
    progress($i/$total*100);
}
progress(100);
echo '</body></html>'; // webkit hotfix

关于php - 在没有浏览器超时的情况下在 PHP 中处理大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5533076/

相关文章:

php - 在 codeIgniter 查询中使用 mysql PASSWORD

php - 通过 Controller 在数据库中多次添加数组

php - WAMP Mysqli 不工作而 Mysql 工作

laravel安装后PHP报错

php - 向下舍入到最接近的 50 或 00 的最简单方法

mysql - 如何防止从触发器或存储过程保存到数据库?

mysql - node-mysql 一个查询中的多个语句

php - 在实体中注入(inject) Symfony 实体管理器

php - 将js值分配给php变量时出现问题

mysql - 什么是 MySQL 外键?