PHP yürütme zamanı sınırı kaçının

3 Cevap php

Sayılarla permütasyonunu gerçekleştirir PHP dilinde bir komut dosyası oluşturmanız gerekir. Ama PHP 60 saniyeye ayarlanmış bir yürütme zaman sınırı vardır. Birden fazla 60 sesunde çalıştırmak gerekiyorsa, sunucu tarafından kesildi değil ki nasıl komut dosyası çalıştırabilirsiniz. Ben php maksimum yürütme zaman sınırı değiştirebilirsiniz biliyorum, ama ben önceden bir komut dosyası yürütme zamanı bilmek gerekmez başka bir versiyonunu duymak istiyorum.

Bir arkadaşım oturum ve sunucu sık sık oturum beni önerdi, ama ben bunu yapmak için hiçbir fikrim yok.

Herhangi bir tavsiye açığız. Bir örnek kod yararlı olacaktır.

Teşekkürler.

First I need to enter a number, lets say 25. After this the script is launch and it need to do the following: for every number <= than 25 it will create a file with the numbers generated at the current stage; for the next number it will open the previuos created file, and will create another file base on the lines of the opened file and so on. Because this take to long, I need to avoid the script beeing intrerupted by the server.

3 Cevap

@ Emanuel:

Arkadaşınız size söyledim sanırım "Bir arkadaşım oturum ve sık sık sunucudan oturumu beni önerdi, ama ben nasıl bunu yapmak için hiçbir fikrim yok.", O / o "x parçalar halinde script hesaplama Bölünmüş anlamı olmalı "iş ve ayrı ayrı çalıştırın

Örneğin, bu komut ile bir 150 elde etmek için bunu 150 kez yürütebilirsiniz! (Factorising) ve sonuçları:

/ / Script adı: calc.php

<?php

 session_start();

 if(!isset($_SESSION['times'])){

    $_SESSION['times'] = 1;

    $_SESSION['result']  = 0;

 }elseif($_SESSION['times'] < 150){

    $_SESSION['times']++;

    $_SESSION['result'] = $_SESSION['result'] * $_SESSION['times'];

    header('Location: calc.php');

 }elseif($_SESSION['times'] == 150){

    echo "The Result is: " . $_SESSION['result'];

    die();

 }

?>

BTW (Davmuz @), sadece Apache sunucularda set_time_limit () işlevini kullanabilirsiniz, Microsoft IIS sunucuları geçerli bir işlev değil.

Eğer bir işlem yapılır bir dosyanın (veya hafıza önbellek?) Serialize bir kuyrukta, yapmak istediğiniz çağrıları koymak için deneyebilirsiniz. Sonra bu kuyruğu her altmış saniye çalıştırmak için bir CRON-daemon kullanırsanız, bu yüzden bu işi yapmaya devam ve görevini bitirir.

Bu yaklaşımın dezavantajı, dosya kilitleme ve bu ile, kuyruğuna ekleyerek sorunlar ve hemen sonuçlar gerekiyorsa, bu zahmetli kanıtlayabilirim. Bir Db için şeyler ekleyerek, bu işe olabilir. Ayrıca, çok verimli değildir.

Use set_time_limit(0) but you have to disable the safe_mode: http://php.net/manual/en/function.set-time-limit.php I suggest to use a fixed time (set_time_limit(300)) because if there is a problem in the script (endless loops or memory leaks) this can not be a source of problems.

Apache gibi bir web sunucusu, aynı zamanda 300 saniye maksimum zaman sınırı var, bu yüzden bunu değiştirmek zorunda. Bir Comet uygulama yapmak istiyorsanız, uzun istekleri kez olabilir Apache başka bir web sunucusu seçti için daha iyi olabilir.

If you need a long execution time for a heavy algorithm, you can also implement a parallel processing: http://www.google.com/#q=php+parallel+processing Or store the input data and computer with another external script with a cron or whatever else.