2012-03-18 23 views
7

Bir PHP Komut Dosyası var, tamamlanması en az 1000 saniye yürütme süresine ihtiyaç duyuyor.PHP Komut dosyası, zaman aşımı hatasız bitmeden sona eriyor

Hata olmadan her seferinde yaklaşık 265 saniye sonra sona erer. Döngüleri kullandığım için yineleme sayısını test ettim ve bundan bağımsızdır, döngüde bir hata oluşma olasılığını daha da ileri götürür.

php.ini içinde max_execution_time değerini 10800 olarak ayarlıyorum ve ayrıca memory_limit'in değiştirilmesi sonuçları etkilemiyor.

Lütfen yardım edin! Başımı iyice çizdim!

+1

Kodunuz ne yapıyor? Hiçbir hatanın atılmadığından emin misin? E_ALL'a hata ekranı ayarladınız mı? '@ Operatörüyle herhangi bir hatayı bastırmadınız mı? –

+0

Hiçbir hata atmadığından emin olun. Kayıt dosyalarına baktın mı? – Neysor

+1

bunu bir komut satırından, cron job'dan, web sunucusundan mı çalıştırıyorsunuz? Farklı bir çağrı yöntemini denediniz mi? – dldnh

cevap

0

Günlük dosyanızı kontrol ettiniz mi? Hata 6 veya segmentasyon hatası alırsanız. Sonra betiğiniz aslında tarayıcıda herhangi bir hata göstermeden php'yi kilitler (eğer tarayıcı ise ve cli değil ise).

Eğer unix'te apache kullanıyorsanız, bu günlüğü /var/log/apache2/error.log içerisinde bulmanız gerekir.

Aksi halde bu satırı ekleyin tarafından .htaccess konusu günlük dosyasının yolunu tanımlayabilirsiniz:

php_value error_log "/path/to/somewhere/convenient/php_errors.log" 

değiştirin yolunu httpd yazma izni varsa ve okuma izni nerede bir yere.

+1

Yeni hata günlüğü boş bırakıldı ... – 7HUND3RX

+0

Hmm Evet, Segmentasyon hataları HTTP sunucuları günlük dosyasında kalacaktır. Php zaten çöktü. Apache hata günlüğüne bakmayı denediniz mi? veya hangi HTTP sunucusunu kullanıyorsunuz? –

+1

Verilmiş olduğum Plesk'de sunucu günlük dosyalarına izin verilmedi. Barındırma sağlayıcısı, bunun tek bir komut dosyası tarafından kullanılmasına izin verilen azami kaynak sınırlaması nedeniyle olduğunu doğruladı. Zaman ayırıp yardımlarınız için çok teşekkürler! – 7HUND3RX

0

vermek: komut başında

set_time_limit(0); 

. Böylece kod yürütme tamamlanmadıkça zaman aşımına uğramamaktadır.

+0

Sanırım zaten zaman aşımına karar verdiğini söyledi. –

+0

Yardımcı değil .. 10800'lerin tüm zamanlarında koşmanın bir yolu yok .. – 7HUND3RX

+0

@AshishAgrawal Söz konusu kodunuzu gösterin. – mithunsatheesh

0

Aynı hata bana da oldu. Benim PHP işlevlerimden biri stderr, stdout veya başka bir günlük dosyasına gönderilen herhangi bir hata olmadan öldü. Ne olduysa, programımın çalışması sırasında bellek sınırını 512MB yarıya ayarlayan başka bir geliştirici tarafından yazılmış bir PHP betiğini kullanıyorum. Alt modül, hata ayıklama ayarlarının, komut dosyamın işlenmesi sırasında bir noktada orta noktadan sessiz olarak ayarlanmasıyla kuyuya zehirlendi.

Döngünün her yinelemesinde PHP betiğinizin kullanabileceği php sistem ayarlarını yazdırarak bunun gerçekleşip gerçekleşmediğini ispatlayabilirsiniz. Abonelik, kirli tapuyu yaptığında, çöp toplayıcının gelecekteki rastgele bir noktada çalışmasından sonra PHP motoru uygun bir şekilde atar, sonra hemen hatasız bir şekilde ölür. Çöp toplayıcısının işini yaparken alt modüller sistem ayarlarıyla uğraştığında, PHP çöp toplayıcısındaki bir hata.

Çözüm: Php yardımcı alt modüllerini düzenleyin ve çöp toplayıcı çalışmalarını yaparken sistem ayarlarını değiştirmediğinden emin olun. PHP yorumlayıcıları, PHP sistem değişkenlerinin zehirlenmesinden sonra rastgele bir aralıkta herhangi bir hata veya çıkış olmadan çıldırır ve ölürler. "gizli" Aşağıdaki kodu Ölümcül hata neden ama: PHP üzerinde

0

, display_errors ve error_reporting düzgün belirtilmiştir bile günlüklerinden hatalarını gizlemek için tek yol Error Control Operators,

örneğin kullanmaktır biri, ne günlüklerde ne de tarayıcıda görünmez.

@echo "forgetting the last quote; 

Yani Açık olarak display_errors değerini ve PHP sürümüne bağlı error_reporting sen ( here farklılıkları bakınız) kullanıyor ve size kod üzerinde bir "@" sembolü kullanıp kullanmadığınızı kontrol.