PHP Asenkron Dosya Çalıştırma
Şimdi bildiğiniz gibi PHP’de kodların hepsi execute olduktan sonra sayfada gösterilir. Yani hepsi bitmeden işlem sonuçlanmaz. Bazı durumlar vardır ki, bunun böyle olmasını istemezsiniz. Örnek vermek gerekirse, bir e-posta bülten listeniz olsun. Ve bir konu paylaştıktan sonra atıyorum 5000 kişilik listeye e-posta göndereceksiniz.
Eğer bunu postu paylaşır paylaşmaz yaparsanız mailler gönderilene kadar sayfada bir bekleme süresi olacak. Ancak bizim istediğimiz, bunu arkaplan’da çalıştırarak göndermek. Aslında bunun için çok basit bir şey yazacağız. Öncelikle mailleri gönderecek php dosyasını oluşturalım. Örneğin send-email.php
olsun.
<?php
sleep(5); // 5 sn sonra çalış
$postId = $argv[1];
// .. mail gönderme işlemleri vs.
?>
Şimdi postu yayınladıktan sonra şu kodu çalıştırmamız yeterli olacak;
exec('php -f send-email.php -- "5" > /dev/null 2>&1 &');
Burada tabi doğru dosya yolunu vermek önemli. Bu şekilde kodumuz çalıştığında send-email.php’deki 5 saniye bekleme kısmı mevcut sayfaya yansımayacaktır. Biz konumuzu oluşturmuş ve beklemeden işlem yapmaya devam ederken arkaplanda mailler gitmeye devam edecektir. Ayrıca dikkat ettiyseniz send-email.php’ye parametre gönderdik exec()
komutu içinde. Gelen parametreleri $argv
değişkeninde tutuluyor. 0 indexli olan değer dosyanın adı o yüzden 1’den başlayarak kullanın.
Birden fazla parametre göndermek isterseniz;
exec('php -f send-email.php -- "5" "test deneme" "deneme" > /dev/null 2>&1 &');
şeklinde gönderebilirsiniz. send-email.php’de $argv[1]
$argv[2]
$argv[3]
şeklinde değerlere ulaşabilirsiniz.
Not: exec() fonksiyonu genelde hostinglerde güvenlikten dolayı kapalı oluyor. Bu yüzden kendi sunucunuzu kullanmaya çalışın