Bir okuma zaman aşımı hatası oluştuğunda kadar nasıl vakit Artırma?

5 Cevap php

PHP [binlerce fotoğraf Görüntü işleme] çalıştırmak için uzun bir zaman alır bir senaryo yazdım. Bu saat bir metre - belki 5.

Işleme 15 dakika sonra, ben hata alıyorum:


ERROR The requested URL could not be retrieved

URL'yi almaya çalışırken aşağıdaki hata ile karşılaşıldı: The URL which I clicked

Read Timeout

Sistem döndürdü: [Hata Yok]

Ağ üzerinden veri okumak için beklerken bir zaman aşımı oluştu. Ağ veya sunucu aşağı ya da sıkışık olabilir. Isteğinizi yeniden deneyin.

Önbellek yöneticisi webmaster.


Ne yapmam gerekiyor çok daha uzun süre çalıştırmak için komut sağlamaktır.

Now, here are all the technical info: I'm writing in PHP and using the Zend Framework. I'm using Firefox. The long script that is processed is done after clicking a link. Obviously, since the script is not over I see the web page on which the link was and the web browser writes "waiting for ...". After 15 minutes the error occurs.

Ben yaklaşık attı Firefox değişiklik yapmaya çalıştı: config ancak herhangi bir başarı olmadan. Bilmiyorum, ama değişimler başka bir yerde ihtiyaç olabilir.

Yani, herhangi bir fikir?

Teşekkürler önde.

5 Cevap

Işlemi saat boyunca çalışıyorsa o zaman muhtemelen toplu işleme içine bakmak gerekir. Yani sadece yerine görüntü işleme başlayan (bir dosya, veritabanı veya ne olursa olsun sizin için çalışıyor içinde) görüntü işleme için bir istek saklayın. Bu istek daha sonra asıl işleme (bu (0) set_time_limit çağıran bir PHP komut dosyası olabilir) yapacak, hangi sunucuda bir zamanlanmış (cron) işlemi çalışan tarafından yakalandı. Ve işlem bittiğinde size işlem bitmiş olduğunu (posta veya sizin için çalışan diğer herhangi bir yolla) kullanıcıyı sinyal olabilir.

set_time_limit (0) Sadece script sunucu tarafında çalışan etkileyecektir. Eğer alıyorsanız hata tamamen tarayıcı tarafı. (Aslında tel üzerinden gönderilir almak emin olmak için flush() takiben) çıktı, hatta tek bir karakter yok edecek - Sen bağlantının ölü karar tarayıcıyı tutmak için bir şey göndermek zorunda. Belki bir zamanlar işlenen veya sabit bir zaman aralığı var her görüntü (if last char sent more than 5 minutes ago, output another one).

Eğer herhangi bir ara çıktı istemiyorsanız, size bağlantı istemci tarafında kapatıldı alır bile komut dosyası çalışmaya devam etmesini sağlayacak, ignore_user_abort(TRUE) yapabilirdi.

set_time_limit kullanın

Burada dokümantasyon

http://nl.php.net/manual/en/function.set-time-limit.php

Işleme X görüntüleri bağlantıyı açmak için üzerine bazı javascript (veya META yönlendirir) ile sayfayı görüntülemek sonra, gruplar halinde çalışma ayırabilirsiniz Eğer http://server/controller/action/nextbatch/next_batch_id.

Durulayın ve tekrarlayın.

tüm süreci harmanlanmasından da bir şey yanlış giderse bir kere, yeniden tüm şey işe başlamak zorunda değilsiniz yararı vardır.

Eğer kendinize ait bir sunucu üzerinde çalışan konum ve safe_mode alabilirsiniz eğer, o zaman da çatal arka plan işlemleri şeyler sizin tarayıcı görünümünde bağımsız gerçek ağır kaldırma yapmak olabilir. Bir çok çekirdekli veya çok işlemcili bir ortamda iseniz, hatta herhangi bir zamanda birden fazla çalışan işlemini zamanlayabilirsiniz.

Biz büyük hesaplama komut için böyle bir şey yaptık; süreçlerin senkronizasyon ortak bir veritabanı üzerinde oldu --- ama neyse ki yeterli, biz görmek için gerekli tek şey onların tamamlanması veya fesih o kadar bağımsızdı süreçler.