45 saniye sonra PHP Script Times dışarı

4 Cevap php

Ben (200k kayıtları hakkında) benim veritabanına büyük ithalat çalıştırıyorum ve benim ithalat komut zaman aşımına ile ciddi bir sorun yaşıyorum. Ben bir kronometre olarak benim cep telefonu kullanılan ve tam 45 saniye, her geçiş (iç sunucu hatası) dışarı o zamanlar ... sadece bazen daha az, bir seferde yaklaşık 200 kayıtları yapar bulduk. Benim phpinfo taranır () ve hiçbir şey 45 saniyeye ayarlanır; bu yüzden, ben bu yapıyor olurdu neden olarak clueless duyuyorum.

Benim max_execution_time 5 dakika ayarlanır ve benim max_input_time 60 saniye olarak ayarlanır. Ben de set_time_limit (0) ayarı denedim; ignore_user_abort (1); sayfamın üstünde ama işe yaramadı.

"Komut başlıkları Erken sonu" yürütme hata olarak: Bu da benim hata dosyası okur unutmayın yararlı olabilir.

Herhangi bir yardım büyük beğeni topluyor.

4 Cevap

Ben komut satırından çalışan, tabii ki tüm bu sayfada çözümleri ve çalıştı:

php -f filename.php

Brent o yuvarlak mantıklı yoldur diyor.

Ancak really (benim phpBB arama dizini yeniden ne zaman buldum gibi) o neden oluyor iyi bir şans var, 500 internal server hatası ile 45 saniye sonra zamanlamayı tutar tarayıcınızdan bir komut dosyası çalıştırmak istiyorsanız mod_fcgid.

Ben bir Plesk VPS var ve ben dosyasını düzenleyerek sabit o

/etc/httpd/conf.d/fcgid.conf

Özellikle, ben değişti

FcgidIOTimeout 45

karşı

FcgidIOTimeout 3600

3600 saniye = 1 saat. Çoğu için yeterince uzun olabilir ama gerekirse yukarı ayarlamak gerekir. Orada 7200 Saniye alıntı bir örnek gördüm.

Finally, restart Apache karşı make the new setting active.

apachectl graceful

HTH birisi. Şimdi 6 ay boyunca beni rahatsız ediyor!

Alkış,

Zengin

Bu sunucu sizin kontrolünüz altında tam değil, özellikle eğer, size sunucu üzerinde zorlanan kaynak isabet sınırı olması oldukça mümkündür.

Bu Linux sunucu bazı tip varsayarsak, komut satırında ulimit -a ile kaynak sınırlarını görebilirsiniz. ulimit -t ayrıca cpu zaman sadece sınırlarını gösterecektir.

Senin cpu sınırlı ise, gruplar halinde alma işlemi gerekebilir.

Bir süre alacak Öncelikle, size komut satırından komut çalıştırıyor olmalıdır. Hiçbir içeriği alırsa en azından tarayıcı 2 dakika sonra zaman aşımı olur.

php -f filename.php

Ithalat tekmeler önce: Eğer tarayıcı çalıştırmak gerekiyorsa Ama, ("text / html Content-type") başlığını eklemek deneyin.

Eğer paylaşılan bir bilgisayar üzerinde ise, o zaman uzun süre çalışan sorguları ve / veya komut dosyaları otomatik olarak belli bir süre sonra öldürüldüğü zaman sisteme kısıtlamalar vardır mümkündür. Bu kısıtlamalar genellikle non-web çalışan komut dosyaları için gevşetilir. Böylece, komut satırından çalışan yardımcı olacaktır.

45 saniye could bir tesadüf olabilir - bu bellek sınırına ulaşmak için hafıza limitini artırmak gibi olurdu .. ne kadar sürer olabilir:

ini_set('memory_limit', '256M');

It could also be the actual db connection that is timing out.. what db server are you using? For me, mssql times out with an extremely unhelpful error, "Database context changed", after 60 seconds by default. To get around this, you do:

ini_set('mssql.timeout', 60 * 10); // 10 min