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
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