Php Devam Eden Döngüyü İptal Etme ?
-
Döngü çalışıyorken döngüyü iptal etmek için ne yapmak gerekir, böyle bir komut var mı, yani döngü devam ederken sitenin başka sayfalarına geçemiyorum döngü bitmeden, uzun bir döngü yaklaşık 4-5 dakika sürüyor, browserı komple kapatıyorum o zaman düzeliyor, yani cancel gibi bişey gerekiyor.
-
$i = 10;
echo 'döngü başladı';
while(true)
{
--$i;
echo 'döngü içi';
if($i == 5)
{
break;
}
}
echo 'döngü bitti';
Bir döngüden çıkıp döngü kapsamından sonraki satırdan devam etmek için break, döngüyü bir sonraki iterasyon değerinden yeniden başlatmak için continue (bu ifadeden sonraki döngü ifadeleri çalıştırılmazlar) kullanabilirsiniz.
YeniHarman tarafından 26/Eyl/13 09:46 tarihinde düzenlenmiştir -
Hocam benim sıkıntı döngü koşul gerçekleştiğinde bitmesi değil, koşul bitmeden iptal etme.
-
TheMayk bunu yazdı
Hocam benim sıkıntı döngü koşul gerçekleştiğinde bitmesi değil, koşul bitmeden iptal etme.
break komutu ile işte ya da goto ile de yapabilirsin.
-
Bir php betiği çalışması bitmeden önce iki şekilde durur:
1) Sunucu kapandığında (fast-cgi php bir şekilde durduğunda),
2) PHP betiği exit, die vs. ile sonlandığında.
Comet gibi bir yöntem kullanıyorsanız döngüleri şöyle değiştirebilirsiniz:
$devam_mi = true;
while(1)
{
$devam_mi = AJAX İSTEĞİNDEN DÖNEN SONUÇ;
if ($devam_mi === false)
{
exit(); //ya da die();
}
diger_islemler();
}
PHP'te olay olmadığından veya kullanıcı ile etkileşim html üzerinden ilerlediğinden önerilmeyen bir durum. Bunun yerine dinamik çıktı kullanıp (ob_start, ob_flush vs.) gerekli yerlerde kullanıcıdan bilgi girişi isteyebilirsiniz (session değişkenleri de kullanmanız gerekiyor).
-
Ajax a çevirdim, post edilen bilgiyi alıyorum ve ekrana basıyorum oraya kadar sıkıntı yok ama döngü çalışmıyor bu seferde.
-
döngüyü tam görmeden bir öneride bulunmamız yanlış olur ama döngü içinde ek kontrollerle eğer döngü gereğinden uzun sürerse ki bunun ne kadar süre olacağını sen belirlersin die, exit, break gibi komutlarla döngüden çıkarak yada script'in çalışmasını durdurarak çözüm bulabilirsin.
-
ajaxla olmaz ki. phpde döngü çalışırken gönderilen komut araya giremez. sadece sayfa başlangıcında ajaxtan gelen veri alınır. anca db ye değer kayıt etmen lazım döngü sırasında db deki değeri kontrol edip döngüyü bitirip yada devam ettirirsin. yada bi txt dosyasına 0 1 yazdırırsın ona göre okutup sonlandırırsın
-
Hafici bir degisken tanimla ve donguye bunuda kosul olarak ekle. Sayfayi terkederken kullanici bu degiskeni false yap dongu iptal olsun. Php spesifik nasil yaparsin bilemiyorum.
-
Gearman gibi bir sistem kullanip işlemi arka plana atıp iptal etmek istedigin zaman kill edebilirsin
-
TheMayk bunu yazdı
Hocam benim sıkıntı döngü koşul gerçekleştiğinde bitmesi değil, koşul bitmeden iptal etme.
Sorun %99 ihtimalle Session State'in çalışma süresi boyunca kilitlenmesi ile alakalı ve döngüyü iptal etmene gerek yok.
Sizinki gibi bir döngü veya uzunca süren herhangi bir işlem çalışmaya devam ederken , Session State kararlılık için kilitlenmiş olduğundan ardından gelen istekler Session'ın salı verilmesi için beklemeye geçer kuyruklanırlar.
Bunu engellemenin platforma göre farklı çözümleri var. En basiti, eğer bu uzun süren işlemin bulunduğu sayfada Session'a ihtiyaç yoksa bu isteğin / isteklerin Session devre dışı şekilde çalışmasını sağlamak veya aşağıdaki örnekteki gibi Session ile işi bitirip, döngüyü sonra başlatmak. PHP uzmanı değilim ama benzer bir sorun için session_write_close() 'u kullandım.
<?php # çeşitli session işlemleri $_SESSION["a"] = "b"; session_write_close(); #session state özgür, ardıl istekler aşağıdaki döngünün bitmesini beklemeyecek # uzun süren döngü başlar do{ } while($x); ?>gibi.
buzukatak tarafından 26/Eyl/13 19:43 tarihinde düzenlenmiştir
