Php'de yürütme zaman aşımı nasıl artırılır?


104

İşlem zaman aşımı nasıl artırılır? Video yüklemek istiyorum, ancak büyük boyutta videolar yüklenmedi?

Hata atıyor The process *** exceeded the timeout of 60 seconds.


1
"İşlem zaman aşımını" tanımlayın. Ne nerede çalışmıyor?
Pekka

1
neden "işlem" zaman aşımını düşünüyorsunuz?
Sizin Common Sense

kısa videolar başarıyla yüklendi. ama uzun video yüklenmedi, sanırım zaman aşımına uğradı.
Aamir

ini_set ('post_max_size', '200M'); ini_set ('upload_max_filesize', '200M'); ini_set ('maks_yürütme_süresi', '200M'); ini_set ('max_input_time', '200M'); ini_set ('bellek_sınırı', '200M'); set_time_limit (65536);
Aamir

1
Dosyayı yüklemeden önce bölmek daha iyidir. Kullanılabilecek birçok uygulama var. Plupload'u tercih ediyorum.
bksi

Yanıtlar:


130

Php.ini'nizdeki bazı ayarları değiştirmeniz gerekir:

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must - sets the maximum time in seconds

PHP.ini'nizin bulunup bulunmadığı ortamınıza bağlıdır, daha fazla bilgi: http://php.net/manual/en/ini.list.php


üzgünüm, bununla ne demek istediğin hakkında hiçbir fikrim yok :(
Hannes

@Aamir, Web sunucunuzun yapılandırmasını değiştirmek için web barındırıcınızdan izin almanız gerekir. Çoğu zaman, böyle şeyleri değiştirmenize izin vermezler.
hellozimi

htaccess dosyasında upload_max_filesize ve max_execution_time'ı değiştirebilir miyim?
Aamir

2
@Col, katılmıyorum, değişiklikleri tüm uygulamada değil, anında yapmak istiyor, bu yüzden bunu nasıl yapabileceğini soruyor. Ve php.ini'deki bazı şeyleri nasıl değiştirebileceğini sorsa bile, bu yeni başlayan bir soru olabilir, ama yine de yasal bir soru.
Hannes

1
@IulianOnofrei peki, şunu belirtme ihtiyacını hissettim: D, ama belki de ne olduğunu bilmiyorsan, ona bakmak hala iyi ... "Tarihten öğrenemeyenler onu tekrar etmeye mahkumdur" ve tüm bunlar …
Hannes

57

Bunu kullanarak çalışma zamanında da yapabilmelisiniz

set_time_limit(100);

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

veya vhost-config'inizde

php_admin_value max_execution_time 10000

DÜŞÜK küresel bir yürütme süresi sınırına sahip olmak, çok güvenilir olmayan uygulamalardaki performans nedenleriyle çoğunlukla iyi bir fikirdir. Dolayısıyla, bu komut dosyalarının yalnızca kesinlikle zorunlu olan daha uzun süre çalışmasına izin vermek isteyebilirsiniz.

ps: post_max_size ve upload_max_filesize'ı unutmayın (ilk yanıtın zaten söylediği gibi)


Eğer ayarlarsanız, uyku göz ardı edilecektir
Snake Eyes

21

Hannes'ın cevabını tamamlamak için.

Php.ini'nizdeki bazı ayarları değiştirmeniz gerekir:

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must

Birisi sınırsız koymak isterse (nedenini bilmiyorum ama isterseniz), zamanı 0 olarak ayarlayabilirsiniz:

Php.ini'nizdeki bazı ayarları değiştirmeniz gerekir:

upload_max_filesize = 0 

max_execution_time = 0

Ve php.ini dosyanızın nerede olduğunu bilmiyorsanız. Sunucunuzda bir "name.php" dosyası oluşturabilir ve şunu koyabilirsiniz:

<?php phpinfo(); ?>

Web sitenizde php.ini'nizin yapılandırmasını görebilirsiniz ve nerede olduğu işaretlenmiştir.

9 Ocak 2015'te düzenleme:

Php.ini dosyanıza erişemiyorsanız, iki seçeneğiniz daha vardır.

Bu satırı doğrudan "name.php" dosyanızda ayarlayabilirsiniz, ancak bu seçenek için upload_max_filesize için bulamıyorum:

set_time_limit(0);

Veya ".htaccess" içinde

php_value upload_max_filesize 0
php_value max_execution_time 0

9

Eğer yapmanız gereken sadece 1 veya 2 sayfaya özelse, set_time_limit'i kullanmanızı öneririm, böylece tüm uygulamayı etkilemez.

set_time_limit(some_values);

ama tabii ki bu 2 değer (post_max_size & upload_max_filesize) araştırmaya tabidir.

ya ini_set işlevi ile ayarlayabilirsiniz

ini_set('post_max_size','20M');
ini_set('upload_max_filesize','2M');

veya doğrudan yukarıdaki Hannes yanıtı gibi php.ini dosyasında veya aşağıdaki gibi .htaccess olarak ayarlayın

php_value upload_max_filesize 2M
php_value post_max_size 20M

6

Microsoft IIS sunucusunu kullanıyorsanız , başkalarının bahsettiği php.ini ayarlarına ek olarak , IIS Sunucu Yöneticisi'nde PHP FastCGI uygulaması için yürütme zaman aşımı ayarlarını artırmanız gerekebilir:

Adım 1) IIS Sunucu Yöneticisi'ni açın (genellikle Başlat Menüsünde Sunucu Yöneticisi altında , ardından Araçlar / İnternet Bilgi Hizmetleri (IIS) Yöneticisi altında ).

Adım 2) Ana bağlantıya tıklayın (belirli bir alana özgü değildir).

Adım 3) IIS bölümü altında, FastCGI Ayarlarını bulun (aşağıda gösterilmiştir).

görüntü açıklamasını buraya girin

Adım 4) Orada, PHP uygulamasını sağ tıklayın ve Düzenle ... seçeneğini seçin .

Adım 5) Zaman aşımlarını kontrol edin (aşağıda gösterilmiştir).

görüntü açıklamasını buraya girin

Benim durumumda, buradaki varsayılan zaman aşımı 70 ve 90 saniyeydi; birincisi, 70 saniyeden uzun süren PHP betiklerinde 500 Dahili Sunucu Hatasına neden oluyordu .


5

Yukarıdaki yanıtlara ek olarak set_time_limit()işlevi kullanabilirsiniz :

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

0argüman olarak geçmek , komut dosyanızın zaman sınırı olmadan çalışmasını sağlar.


set_time_limit () 'in dosya yüklemeleriyle hiçbir ilgisi yoktur
Ortak

1
Bu yeterince doğru Albay Shrapnel değil. Unix ortamlarında maksimum yürütme süresi php-thread tarafından kullanılan kümülatif CPU zamanı ile karşılaştırılırken, Windows sistemlerinde mutlak zaman kullanılır. Yükleme çoğunlukla "boşta kalma süresidir" (IO-Wait). Ancak gördüğünüz gibi yüklemeler çok uzun sürse de durabilir.
Christoph Strasen

3

Bir yazım hatası yaptınız: ini_set ('max_input_time', '200M') - değer setinin ini_set ('max_input_time', '200') gibi bir int olması gerekir


2

Özellikle PHP zaman aşımı hakkında soru sorduğunuzu biliyorum, ancak başka hiç kimsenin bahsetmediği, web sunucusunda da bir zaman aşımı olabileceği ve PHP zaman aşımına çok benzeyebileceği.

Yani denediyseniz:

  1. Php.ini'de bir satır ekleyerek zaman aşımını artırma: max_execution_time = {saniye sayısı, yani bir dakika için 60}
  2. Aşağıdakileri ekleyerek betiğinizdeki zaman aşımını artırın: ini_set ('max_execution_time', '{saniye sayısı, yani bir dakika için 60}');

Ve phpinfo () işlevi ile max_execution_time'ın gerçekten artırıldığını kontrol ettiniz, sonra bunu .htaccess'e eklemeyi deneyebilirsiniz, bu da Apache'nin zaman aşımına uğramamasını sağlayacaktır:

RewriteRule .* - [E=noabort:1]
RewriteRule .* - [E=noconntimeout:1]

Daha fazla bilgi burada: https://www.antropy.co.uk/blog/php-script-keeps-timing-out-despite-ini-set/


2

Önce php.inidosya yolunu kontrol edin phpinfo(); ve sonra değiştirilen PHP.INIparametreler:

upload_max_filesize = 1000M
memory_limit = 1500M
post_max_size = 1500M
max_execution_time = 30

Apache yeniden başlatıldı

set_time_limit(0); // safe_mode is off

ini_set('max_execution_time', 500); //500 seconds

Not : php.iniLinux'ta bulmak için komutu da kullanabilirsiniz .

locate `php.ini`

1

Php.ini'yi düzenleyemezseniz (örneğin, sunucunuzda) php.ini parametrelerini php kodunuzdan değiştirmeyi deneyebilirsiniz. Deneyin:

ini_set('max_execution_time', 'NUMBER OF SECONDS TO ALLOW BEFORE TIMEOUT');

Bu işe yaramazsa, 'set_time_limit'i de aynı şekilde ayarlamayı deneyin, bunun ötesinde tek seçeneğinizin ev sahibinizle iletişim kurmak olduğunu söyleyebilirim. Bu ayarlar güvenli moddayken değiştirilemez.


3
Hannes bunu ben göndermeden bir dakika önce aldı ve doğru bir şekilde set_time_limit () 'in bu cevapta belirtildiği gibi ini_set tarafından değil, parantez içine saniyeler koyarak ayarlanması gerektiğine işaret ediyor. Hannes'e oy verildi.
John

1

Güvenli mod olup olmadığınızı test edin - değilse - zaman sınırını (Yerel Değer) istediğiniz şeye ayarlayın:

if(!ini_get('safe_mode')){

    echo "safe mode off";
    set_time_limit(180);// seconds

    phpinfo();// see 'max_execution_time'
}

* Güvenli mod 'açık' ise bu şekilde zaman sınırı ayarlayamazsınız.


1

isteğe bağlı: php.ini hakkında yapılandırma ayarlarsanız ancak yine de yükleyemezseniz

-bu, hata kodunu kontrol etmek için php işlevidir

$error_type = [];
$error_type[0] = "There is no error";
$error_type[1] = "The uploaded file exceeds the upload_max_filesize directive in php.ini.";
$error_type[2] = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.";
$error_type[3] = "The uploaded file was only partially uploaded.";
$error_type[4] = "No file was uploaded.";
//$error_type["5"] = "";
$error_type[6] = "Missing a temporary folder. Introduced in PHP 5.0.3.";
$error_type[7] = "Failed to write file to disk. Introduced in PHP 5.1.0.";
$error_type[8] = "A PHP extension stopped the file upload. PHP does not provide a way to ascertain which extension caused the file upload to stop; examining the list of loaded extensions with phpinfo() may help. Introduced in PHP 5.2.0.";
//------------------------------
//--> show msg error.
$status_code = $_FILES["uploadfile"]["error"];
if($status_code != 0){
    echo $error_type[$status_code];
    exit;
}

0

.htaccessDosyanızda bir maksimum yürütme süresi de ayarlayabilirsiniz :

php_value max_execution_time 180

0

Zaman sınırını gerçekten arttırmak için önce mevcut değeri almayı tercih ederim. set_time_limither zaman zaman sınırını artırmıyor. Geçerli değer (örn gelen olursa php.iniveya eskiden kümesi) mevcut aramada kullanılan değerden yüksek set_time_limit, bu olacak azaltmak zaman sınırı!

Peki bunun gibi küçük bir yardımcının nesi var?

/**
 * @param int $seconds Time in seconds
 * @return bool
 */
function increase_time_limit(int $seconds): bool
{
    return set_time_limit(max(
        ini_get('max_execution_time'), $seconds
    ));
}

// somewhere else in your code
increase_time_limit(180);

Ayrıca bkz: PHP betiğinde max_execution_time alın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.