php sleep fonksiyonu

Başlatan sayz, 15 Aralık 2012 - 18:39:02

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

sayz

<?php

// current time
echo date('h:i:s') . "\n";

// sleep for 10 seconds
sleep(10);

// wake up !
echo date('h:i:s') . "\n";

?>


arkadaşlar yukarıdaki kod bildiğiniz gibi

05:31:23
05:31:33


şeklinde bir çıktı verecek ama ben istiyorum ki önce 05:31:23'ü yazsın ve 10 saniye beklesin daha sonra 05:31:33'ü yazsın. sleep fonksiyonunu kullanınca tüm betiği 10 sn. bekletiyor bende, sleep'ten önce yazdıklarımı gözardı ediyor. bense önce, sleep'in yukarısında söylenen şeyleri yapsın sleep fonksiyonunu gördüğü yerde 10 sn beklesin sonra aşağı geçip devam etsin istiyorum. yardımcı olabilecek var mı?

alquirel

Şu an mobilde olduğum için detaylı yazamıyorum, bakman gereken yer "ob_start" "flush" vb. fonksiyon ailesi.

sayz

teşekkürler cevabınız için, yalnız flush fonksiyonunu şurada : http://www.tuxradar.com/practicalphp/13/9/0 ve diğer bir çok yerde denildiği üzere denedim ama sonuç yine aynı bir türlü olmadı. eğer betiğin herhangi yerinde sleep görüyorsa direk sleep'in içindeki değer kadar tüm betik bekletiliyor sonra tamamı birden çalıştırılıyor.

alquirel

Bir de php.ini dosyasında olması lazımdı, max_buffer değerini sıfır gibi düşük bir değere ayarlaman gerekiyor sanırsam.

sayz

maalesef php.ini doyasında öyle bir değer bulamadım. acaba bu isteğimi javascript ile falan yapmak mümkün olur mu ki?

ersinkandemir

Her 10 saniyede PHP dosyasına Javascript/AJAX isteği gönderebilirsiniz. :)
Where there's a shell, there's a way.



canosayan

istediğiniz şey sanırım sayfanın istemcide 10 saniye beklemesi. bunu ne yazık ki sunucu tarafında değil istemci tarafında yapacaksınız. php ile tarayıcı işlevlerine hükmedemezsiniz.


eğer normal btik işleminiz çok uzun ise belki önbelleği tarayıcıya gönderebilirsiniz ob_ ailesi ile o kadar.
Chmod bizim işimiz.

ct

Çok çirkin bir yöntem belki ama döngüye sokup 10 saniyelik işlem yaptırtıp (timer kesmesi gibi şeyler de olabilir) döngüden çıkartabilirsiniz.

sem

Bu kendi yazdığnız bir sunucu mu yani farklı bir sunucu uygulaması mu yoksa HTTP olarak daha çok tarayıcılara hizmet verecek olan bir uygulama mı?


Eğer tarayıcılara hizmet verecek ise yani doğal olarak HTTP sunucusu yazıyorsanız eğer bu işlemi yapmanız mümkün değil. Nedeni ise bir iki ileti yukarıdaki canosayan isimli kullanıcının belirttiği gibi... İstemci size bir kere bağlandıktan sonra durmadan istediğiniz şekilde veri gönderemezsiniz HTTP üzerinden. Hatta durmadan değil bir kereliğine bile olsa istemciniz sizden bir şey istemeden ona bir şey söyleme lüksünüz olmayacak (request & response).


Tabi ilk sorum hala geçerli kendi yazdığınız ya da HTTP prokolüne çalışacak bir sunucu değilse araştırmak gerekli istediğiniz sonucu neden alamadığnızı.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

sayz

aslında yapmak istediğim tarayıcı üzerinden çalışacak bir adet toplu e-posta gönderme uygulaması, csv dosyasından adresleri alacak atıyorum 100 kişi ama hepsine birden değil de 10'ar 10'ar veya 20'şer 20'şer yollayacak ve her gönderdiği gruptan sorna atıyorum 10 sn bekleyecek sonra diğer grubu yollayacak. ben de bunun için gerekli kodu yazdım ancak o bekletme işini yapamadım. bu bir ödevdi ayrıca o kısım olmadan yolladım ödevi gerçi ama yine de nasıl yapılır merak ediyorum.

ct

Alıntı yapılan: sayz - 19 Aralık 2012 - 07:02:30
aslında yapmak istediğim tarayıcı üzerinden çalışacak bir adet toplu e-posta gönderme uygulaması, csv dosyasından adresleri alacak atıyorum 100 kişi ama hepsine birden değil de 10'ar 10'ar veya 20'şer 20'şer yollayacak ve her gönderdiği gruptan sorna atıyorum 10 sn bekleyecek sonra diğer grubu yollayacak. ben de bunun için gerekli kodu yazdım ancak o bekletme işini yapamadım. bu bir ödevdi ayrıca o kısım olmadan yolladım ödevi gerçi ama yine de nasıl yapılır merak ediyorum.

Şöyle bir yöntem önermişler:

http://stackoverflow.com/questions/2585656/threads-in-php

sem

JavaScript, JQuery vs gibi tarayıcıda çalışan teknolojilerin SMTP sınıflarını araştırmanız gerekebilir.  Ya da arka planda xhttprequest kullanarak sunucuya mail atmasını söylersiniz ve dönen sonuca göre tarayıcı ekranını dinamik olarak güncelleyebilirsiniz... Dönen sonuç da kaç mail gitti, kaçı kaldı vs gibi durumlara göre İngilizce ProgressBar denilen Türkçe'si sanırım durum çubuğu olan bir kullanıcıı arayüzü tasarlayabilirsiniz/kullanabilirsiniz.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

brooqs

İstediğin sonuçları komut satırından çalıştırdığında sonuca ulaşabilirsin .


php betik.php


dediğinde ilk zamanı yazdırdıktan sonra 10 saniye bekleyip diğer zamanı yazdıracaktır.
Ancak tarayıcı tüm betiğin sonucunu basacaktır ekrana. Sen grupları 10 saniye bekleyerek attığında arka planda 10 ar saniye arayla gönderecektir. Ancak gönderimlerle ilgili sonuçları ekrana toplu bir şekilde basacaktır. Zaten verdiğin kod örneğinde 10 saniye arayla çalıştırmış kodu sadece sonuçları toplu basmış ekrana.
Linux is an adventure!!!