-
Üyelik
12.06.2012
-
Yaş/Cinsiyet
38 / E
-
Meslek
Öğretmen
-
Konum
Samsun
-
Ad Soyad
O** Y**
-
Mesajlar
1722
-
Beğeniler
398 / 400
-
Ticaret
20, (%100)
Arkadaşlar merhaba
Bugün değişik birşey fark ettim. Anlatmam için öncelikle kodları göstereyim.
for($a=1;$a<21;$a++){
sleep(30);
file_put_contents(__DIR__.'/test'.$a.'.log','');
}
Bu kodları php dosyasına kaydedip, tarayıcı üzerinden çalıştırdığımda 2 adet log dosyası oluşturduktan sonra timeout hatası verip bağlantı sonlanıyor. Buraya kadar sorun yok. Zaten normali de budur.
Fakat aynı php dosyayı cron ile tetikleyince 20 tane log dosyası oluştu. (Toplam 10 dk sürdü tabiki.)
Dipnot: Cronda sadece bir kere çalışsın diye ayarladım. Yani saat 23:28 'de çalışsın şeklinde...
Birinde timeout sınırını takılırken, cronda takılmıyor. Aradaki fark nedir? Bilen biri açıklayabilir mi?
Başka bir hostta denedim. Yine aynı durum söz konusu.
Şimdiden teşekkürler.
.
-
Üyelik
11.05.2013
-
Yaş/Cinsiyet
32 / E
-
Meslek
Geliştirici
-
Konum
Malatya
-
Ad Soyad
E** K**
-
Mesajlar
3142
-
Beğeniler
60 / 764
-
Ticaret
5, (%100)
Galiba basit bir mantık kurarsak dosyayı çalıştırıyor kapatıyor sonra tekrar çalıştırıyor böyle bir mantık olabilir
-
Üyelik
12.06.2012
-
Yaş/Cinsiyet
38 / E
-
Meslek
Öğretmen
-
Konum
Samsun
-
Ad Soyad
O** Y**
-
Mesajlar
1722
-
Beğeniler
398 / 400
-
Ticaret
20, (%100)
Dediğiniz gibi değil. Çünkü dosya adları şu şekilde oluyor.
test1.log
test2.log
test3.log
...
...
...
test20.log
.
-
Üyelik
12.06.2012
-
Yaş/Cinsiyet
38 / E
-
Meslek
Öğretmen
-
Konum
Samsun
-
Ad Soyad
O** Y**
-
Mesajlar
1722
-
Beğeniler
398 / 400
-
Ticaret
20, (%100)
I don't speak english. :(
.
-
Üyelik
25.06.2012
-
Yaş/Cinsiyet
38 / E
-
Meslek
Engineering Director
-
Konum
İstanbul Avrupa
-
Ad Soyad
T** C**
-
Mesajlar
771
-
Beğeniler
2 / 260
-
Ticaret
0, (%0)
Dosya oluşturma, yazma ve kapama işlemlerinden birinde muhtemel açık kalıyordur.
file_put_contents metod 3 işlemida sırasıyla yapıyor. file_put_contents bu metodu true yada false değeri dönüyor. Bu değeri elde etmek için bir değişkene atayıp, dönen değerleri yazdırırsanız. En azından şundan emin olabilirsiniz.
for loop içine girdi 1. değeri aldı dosyaismi - dönen değer test1.log dönen değer şeklinde. Eğer arada false değerler dönüyorsa mutlak metod işini bitirmeden ikinci değerin geliyor demektir. Bu durumdada dökümentasyondan okuduğum kadarıyla açık olan dosyanın içine gelen değeri append ediyor.
Kaynak :
http://tr2.php.net/file_put_contentsBu sadece bir öngörü : CronJob kısmına bakamadım ama eğer cronjob php context i içinde tetiklenip, çalışıyorsa yani cronjob'ın yönetimini php yapıyorsa, thread safe özelliğe sahip olduğundan dolayı olabilir, lock layıp işlem bitene kadar tutuyordur, yeni bir işlem gelince onu sıraya alıyordur.
https://www.linkedin.com/in/turgaycan/
Kaliteli kod yazılır.. (Günlük/Saatlik ücreti ile)
-
Üyelik
12.06.2012
-
Yaş/Cinsiyet
38 / E
-
Meslek
Öğretmen
-
Konum
Samsun
-
Ad Soyad
O** Y**
-
Mesajlar
1722
-
Beğeniler
398 / 400
-
Ticaret
20, (%100)
Kodlara dikkat edin. 30 sn sleep uyguladım. Yani 20 dosyanın oluşması için 10 dakika geçmesi gerekir.
Tarayıcıdan cron.php yi tetikleyince 60 saniyeden sonra timeout oluyor ve sadece 2 dosya oluşturmuş oluyor. Ama cron ile yapınca 10 dk sonunda 20 dosya oluşmuş oluyor.
.
-
Üyelik
23.07.2012
-
Yaş/Cinsiyet
37 / E
-
Meslek
Maden Mühendisi
-
Konum
Karabük
-
Ad Soyad
E** Y**
-
Mesajlar
126
-
Beğeniler
24 / 24
-
Ticaret
1, (%100)
localhostta denermisin? sonuc ne olcak
-
Üyelik
12.06.2012
-
Yaş/Cinsiyet
38 / E
-
Meslek
Öğretmen
-
Konum
Samsun
-
Ad Soyad
O** Y**
-
Mesajlar
1722
-
Beğeniler
398 / 400
-
Ticaret
20, (%100)
Sadece 2 dosya oluştu ve timeout hatası verdi.
.
-
Üyelik
25.06.2012
-
Yaş/Cinsiyet
38 / E
-
Meslek
Engineering Director
-
Konum
İstanbul Avrupa
-
Ad Soyad
T** C**
-
Mesajlar
771
-
Beğeniler
2 / 260
-
Ticaret
0, (%0)
Php execution time ile alakalı bir durum kanımca.
http://www.php.net/manual/en/function.set-time-limit.php
The default limit is 30 seconds or, if it exists, the max_execution_time value defined in the php.ini.
Default değeri 30 saniye imiş. Dosya işlemlerinde çok küçükde bir değer olsa zaman aldığından execution timeout a düşüyordur. 10 saniyeye çekip denermisin.
https://www.linkedin.com/in/turgaycan/
Kaliteli kod yazılır.. (Günlük/Saatlik ücreti ile)