Uyku süresi yürütme süre için sayılır mı?

5 Cevap php

Ben PHP sleep() fonksiyonu ile ilgili iki soru var:

  1. Uyku süresi benim PHP betikleri maksimum yürütme zaman sınırını etkiler mi? Bazen, PHP "mesajı aştı 30 saniye maksimum yürütme süresini" gösterir. I sleep(31) kullanıyorsanız bu mesajı görünecek?

  2. Herhangi bir risk sleep() fonksiyonunu kullanarak var mı? CPU performansı bir sürü maliyeti var mı?

5 Cevap

Sadece maksimum yürütme süre daha için uyumayan bir komut dosyası var, bunu denemelisiniz.

<?php
  sleep(ini_get('max_execution_time') + 10);
?>

Spoiler: Under Linux, sleeping time is ignored, but under Windows, it counts as execution time.

Sadece) (uyku gibi değil sistem çağrıları komut süresini etkiler. (Dahil), Windows uyku üzerinde bir hata görünüşte vardır. Maksimum yürütme süresi gerçek zamanlı değil, CPU süresi ya da böyle bir şey olduğunu. Bunu ancak değiştirebilirsiniz:

  • Php.ini max_execution_time direktifi. Bu genel bir ayardır;
  • Yukarıdaki yönergesi ile ini_set() kullanma. Bu yalnızca o yürütülmesi için şu anda yürütülen komut dosyası için değişecek;
  • set_time_limit(): aynı zamanda yerel bir değişiklik.

Son ikisi arasındaki fark gelince, ben max_execution_time sabit bir miktar olduğuna inanıyorum. Koşu:

ini_set('max_execution_time', 60);

60 saniye komut dosyasına sınırlayacaktır. 20 saniye sonra ararsanız:

set_time_limit(60);

komut artık 20 + 60 = 80 saniye ile sınırlı olacaktır.

Dan PHP sleep() page, bu kullanıcının katkıda not var:

Note: The set_time_limit() function and the configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), the sleep() function, database queries, etc. is not included when determining the maximum time that the script has been running.

Diğerleri zaten uyku temel kapalı () ve PHP betik çalıştırma zaman sınırı, ama gerçekten uzun uyku periyotları kullanırken başka riskin farkında olmalıdır var.

Bir tarayıcı bir sunucuya bir istek gönderir ve sunucudan herhangi bir veri almazsa Genellikle, bağlantı zaman aşımı olabilir. Bu süre tarayıcınızın yapılandırmaları bağlıdır, ama ben Firefox has a default value of 115 seconds ise IE7, sadece 30 saniye bir varsayılan değere sahip olduğunu okudum - Eğer {[(1 giderek Firefox kendi yapılandırma kontrol edebilirsiniz network.http.keep-alive.timeout için)]} ve filtreleme (zaman sınırı saniye cinsinden belirtilir).

Düzenleme: Ben network.http.keep-alive.timeout için birim vardı ve karışık browser.urlbar.search.timeout. Bu saniye değil, bir saniyenin onda gerçekten de.

) a) Evet, bu süre doğru sayar (yani uyku (31) bir hata tetikleyecek

b) CPU performansı maliyetlendirme tersini yapar - bu diğer uygulamalar (bir uygulama uyuduğu zaman, bu uygulamanın CPU kullanımı% 0'a yakın olacaktır) CPU kullanmanızı sağlar. Kenara uzak kullanıcıdan zaman ayırdığınız, ben gerçekten bu kullanarak herhangi bir risk düşünemiyorum.