linux - Masalah dengan mensimulasikan pemasa crontab dan melaksanakan baris gilir mesej dengan PHP dan MySQL? ?
巴扎黑
巴扎黑 2017-05-19 10:07:28
0
4
693

Sebagai contoh, jika anda perlu mencipta fungsi untuk menghantar mesej teks telefon mudah alih secara berkelompok, jika anda menggunakan gelung for untuk melakukannya, apabila bilangan mesej teks adalah besar, ia bukan sahaja akan memakan masa, tetapi juga mempunyai kadar kejayaan yang sangat rendah.

Jadi saya terfikir untuk menggunakan PHP dan MySQL untuk melaksanakan baris gilir mesej dan menghantar mesej teks satu demi satu.

Pertama, buat jadual data sms, termasuk medan berikut:
id,
telefon, //Nombor telefon bimbit
kandungan //Kandungan SMS
Simpan mesej teks dan nombor telefon bimbit yang perlu dihantar ke dalam jadual sms.

Kod yang dilaksanakan adalah seperti berikut:
<?php
while(true){

 $item = $db->getFirstRecord(); //获取数据表第一条记录
 if(!$item){//如果队列中没有数据,则结束定时器
 break;
 }
$res = $sms->send($item['phone'],$item['content']); //发送短信
if($res){
    $db->deleteFristRecord(); //删除发送成功的记录
    echo $item['phone'].'发送成功';
}else{
    echo $item['phone'].'发送失败,稍后继续尝试';
}
sleep(10); //每隔十秒循环一次            

}

echo 'Hantar selesai! ';
?>

Sebagai contoh, terdapat butang hantar di latar belakang Mengkliknya mencetuskan pelaksanaan program di atas. Anggapkan setiap 10 saat sekeping data diambil daripada pangkalan data untuk menghantar mesej teks.

Masalah: Jika saya klik butang hantar dan kemudian terus klik pada halaman lain untuk melakukan perkara lain, daripada terus klik pada halaman dan menunggu sehingga penghantaran selesai sebelum keluar, program di atas akan terus dilaksanakan. Atau jika saya pergi ke halaman lain, gelung akan melompat keluar dan mesej teks tidak akan dihantar

巴扎黑
巴扎黑

membalas semua(4)
淡淡烟草味

PHP adalah satu-benang, iaitu, apabila anda memulakan pelaksanaan, anda mesti sama ada menunggu untuk ia dilaksanakan sepenuhnya atau mengganggunya terlebih dahulu. Anda tidak boleh melakukan dua akses pada masa yang sama. Jika anda perlu memproses secara tak segerak selepas mengklik butang dan melompat terus untuk melakukan perkara lain, maka anda memerlukan perkhidmatan swoole untuk mengendalikan perkara yang anda mahu proses secara tak segerak.

给我你的怀抱

Dalam kes ini, jalankan terus dalam mod baris arahan tanpa meletakkannya pada halaman web latar belakang. Kemudian kod teratas yang keluar apabila tiada data ditukar kepada tidur untuk satu tempoh masa.

世界只因有你

Anda boleh melihat mod PHP-Cli. Terdapat video di MOOC.com, MySQL mensimulasikan penghantaran e-mel melalui baris gilir, dan kesannya serupa dengan soalan utama.

给我你的怀抱

Saya rasa php+mysql poster asal adalah betul, tetapi tugas cron masih perlu digunakan. Tugas cron adalah untuk menetapkan skrip untuk dilaksanakan setiap XX saat.

Jika anda terpaksa melepaskan crontab. Kemudian syorkan kod berikut

ignore_user_abort() //关掉浏览器,php脚本可以继续执行
set_time_limit(0)   // 一直执行下去

$item = $db->getFirstRecord(); //获取数据表第一条记录
 if(!$item){//如果队列中没有数据,则结束定时器
 break;
 }
$res = $sms->send($item['phone'],$item['content']); //发送短信
if($res){
    $db->deleteFristRecord(); //删除发送成功的记录
    echo $item['phone'].'发送成功';
}else{
    echo $item['phone'].'发送失败,稍后继续尝试';
}
sleep(10); //每隔十秒循环一次  
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan