Wie kann man das Ausführungszeitlimit in PHP erhöhen?

100

Wie kann das Transaktionszeitlimit erhöht werden? Ich möchte Videos hochladen, aber eine große Anzahl von Videos wurde nicht hochgeladen.

Es wirft Fehler The process *** exceeded the timeout of 60 seconds.

Aamir
quelle
1
Definieren Sie "Transaktionszeitlimit". Was funktioniert wo nicht?
Pekka
1
Warum denkst du, ist das "Transaktions" -Zeitlimit?
Ihr gesunder Menschenverstand
kurze Videos erfolgreich hochgeladen. aber langes Video nicht hochgeladen, ich denke Auszeit.
Aamir
ini_set ('post_max_size', '200M'); ini_set ('upload_max_filesize', '200M'); ini_set ('max_execution_time', '200M'); ini_set ('max_input_time', '200M'); ini_set ('memory_limit', '200M'); set_time_limit (65536);
Aamir
1
Es ist besser, die Datei vor dem Hochladen zu teilen. Es gibt viele Apps, die verwendet werden können. Ich bevorzuge plupload.
Bksi

Antworten:

127

Sie müssen einige Einstellungen in Ihrer php.ini ändern:

upload_max_filesize = 2M 
;or whatever size you want

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

Wo sich Ihre PHP.ini befindet, hängt von Ihrer Umgebung ab. Weitere Informationen: http://php.net/manual/en/ini.list.php

Hannes
quelle
Entschuldigung, ich habe keine Ahnung, was du damit meinst :(
Hannes
@Aamir, Sie benötigen die Berechtigung Ihres Webhosts, um die Konfiguration Ihres Webservers zu ändern. Oft lassen sie dich solche Sachen nicht ändern.
Hellozimi
Kann ich upload_max_filesize und max_execution_time in der htaccess-Datei ändern?
Aamir
2
@Col, ich bin anderer Meinung, er möchte die Änderungen im laufenden Betrieb und nicht über die gesamte Anwendung hinweg vornehmen, also fragt er, wie er das tun kann. Und selbst wenn er fragen würde, wie er nur ein paar Dinge in der php.ini ändern kann, könnte es eine Neulingsfrage sein, aber trotzdem eine legitime Frage.
Hannes
1
@IulianOnofrei in Ordnung, ich habe nur das Bedürfnis verspürt, darauf hinzuweisen: D, aber wenn Sie nicht wissen, was es ist, ist es immer noch gut, es nachzuschlagen ... "Wer nicht aus der Geschichte lernen kann, ist dazu verdammt, es zu wiederholen" und all das …
Hannes
55

Sie sollten dies auch zur Laufzeit mit tun können

set_time_limit(100);

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

oder in deiner vhost-config

php_admin_value max_execution_time 10000

Ein globales Ausführungszeitlimit von LOW ist aus Leistungsgründen für nicht so zuverlässige Anwendungen meistens eine gute Idee. Daher möchten Sie möglicherweise nur zulassen, dass die Skripte länger ausgeführt werden, als dies unbedingt erforderlich ist.

ps: vergiss nicht post_max_size und upload_max_filesize (wie die erste Antwort schon gesagt hat)

Christoph Strasen
quelle
Wenn Sie es einstellen, wird der Schlaf ignoriert
Snake Eyes
19

Um die Antwort von Hannes zu vervollständigen.

Sie müssen einige Einstellungen in Ihrer php.ini ändern:

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must

Wenn jemand unbegrenzt eingeben möchte (ich weiß nicht warum, aber wenn Sie möchten), können Sie die Zeit auf 0 setzen:

Sie müssen einige Einstellungen in Ihrer php.ini ändern:

upload_max_filesize = 0 

max_execution_time = 0

Und wenn Sie nicht wissen, wo ist Ihre php.ini. Sie können eine Datei "name.php" auf Ihrem Server erstellen und Folgendes eingeben:

<?php phpinfo(); ?>

Und auf Ihrer Website können Sie die Konfiguration Ihrer php.ini sehen und sie ist markiert, wo sie sich befindet.

Bearbeiten am 9. Januar 2015:

Wenn Sie nicht auf Ihre php.ini zugreifen können, haben Sie zwei weitere Optionen.

Sie können diese Zeile direkt in Ihrer "name.php" -Datei festlegen, aber ich finde für diese Option nicht für upload_max_filesize:

set_time_limit(0);

Oder in ".htaccess"

php_value upload_max_filesize 0
php_value max_execution_time 0
Lynxi
quelle
8

Wenn das, was Sie tun müssen, nur für 1 oder 2 Seiten spezifisch ist, empfehle ich, set_time_limit zu verwenden, damit es nicht die gesamte Anwendung betrifft .

set_time_limit(some_values);

Natürlich müssen diese beiden Werte (post_max_size & upload_max_filesize) untersucht werden.

Sie können es entweder über die Funktion ini_set einstellen

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

oder direkt in der php.ini-Datei wie oben von Hannes, oder setzen Sie sie wie unten in .htaccess

php_value upload_max_filesize 2M
php_value post_max_size 20M
Komang
quelle
4

Als Ergänzung zu den obigen Antworten können Sie folgende set_time_limit()Funktionen verwenden:

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

Wenn Sie 0als Argument übergeben, wird Ihr Skript ohne zeitliche Begrenzung ausgeführt.

Tomasz Kowalczyk
quelle
set_time_limit () hat nichts mit Datei-Uploads zu tun
Your Common Sense
1
Dies ist nicht genau genug Col. Shrapnel. Während in Unix-Umgebungen die maximale Ausführungszeit mit der vom PHP-Thread verwendeten kumulierten CPU-Zeit verglichen wird, wird in Windows-Systemen die absolute Zeit verwendet. Das Hochladen erfolgt meistens in "Leerlaufzeit" (IO-Wait). Aber wie Sie sehen, können Uploads gestoppt werden, wenn es zu lange dauert.
Christoph Strasen
4

Wenn Sie zufällig einen Microsoft IIS- Server verwenden, müssen Sie möglicherweise zusätzlich zu den von anderen genannten php.ini- Einstellungen die Einstellungen für das Ausführungszeitlimit für die PHP FastCGI-Anwendung im IIS Server Manager erhöhen:

Schritt 1) ​​Öffnen Sie den IIS Server Manager (normalerweise unter Server Manager im Startmenü und dann unter Tools / Internet Information Services (IIS) Manager ).

Schritt 2) Klicken Sie auf die Hauptverbindung (nicht spezifisch für eine bestimmte Domäne).

Schritt 3) Suchen Sie im Abschnitt IIS nach den FastCGI-Einstellungen (siehe unten).

Geben Sie hier die Bildbeschreibung ein

Schritt 4) Darin rechten Maustaste auf die PHP - Anwendung und wählen Sie Bearbeiten ... .

Schritt 5) Überprüfen Sie die Zeitüberschreitungen (siehe unten).

Geben Sie hier die Bildbeschreibung ein

In meinem Fall betrugen die Standardzeitlimits hier 70 und 90 Sekunden. Ersteres verursachte einen 500 Internal Server Error bei PHP-Skripten, der länger als 70 Sekunden dauerte.

Michael
quelle
3

Sie hatten einen Tippfehler: ini_set ('max_input_time', '200M') - Wertesatz muss ein int sein, wie ini_set ('max_input_time', '200')

thanatoid
quelle
2

Ich weiß, dass Sie speziell nach dem PHP-Timeout fragen, aber niemand anderes scheint erwähnt zu haben, dass es auf dem Webserver auch ein Timeout geben kann, das dem PHP-Timeout sehr ähnlich sein kann.

Also, wenn Sie versucht haben:

  1. Erhöhen des Timeouts in php.ini durch Hinzufügen einer Zeile: max_execution_time = {Anzahl der Sekunden, dh 60 für eine Minute}
  2. Erhöhen Sie das Zeitlimit in Ihrem Skript selbst, indem Sie Folgendes hinzufügen: ini_set ('max_execution_time', '{Anzahl der Sekunden, dh 60 für eine Minute}');

Und Sie haben mit der Funktion phpinfo () überprüft, ob max_execution_time tatsächlich erhöht wurde. Dann möchten Sie möglicherweise versuchen, dies zu .htaccess hinzuzufügen, um sicherzustellen, dass Apache selbst keine Zeitüberschreitung aufweist:

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

Weitere Informationen hier: https://www.antropy.co.uk/blog/php-script-keeps-timing-out-despite-ini-set/

Paul Feakins
quelle
2

Überprüfen Sie zuerst den php.iniDateipfad durch phpinfo(); und dann die PHP.INIParameter geändert :

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

Apache neu gestartet

set_time_limit(0); // safe_mode is off

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

Hinweis : Sie können den Befehl auch verwenden, um php.iniunter Linux zu suchen

locate `php.ini`
Ashfaq Muhammad
quelle
1

Wenn Sie die php.ini nicht bearbeiten können (z. B. auf Ihrem Server), können Sie versuchen, die php.ini-Parameter in Ihrem PHP-Code zu ändern. Versuchen:

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

Wenn dies nicht funktioniert, versuchen Sie auf die gleiche Weise, 'set_time_limit' einzustellen. Darüber hinaus würde ich sagen, dass Sie nur die Möglichkeit haben, Ihren Host zu kontaktieren. Diese Einstellungen können im abgesicherten Modus nicht geändert werden.

John
quelle
3
Hannes hat dies eine Minute vor dem Posten erhalten und weist korrekt darauf hin, dass set_time_limit () nicht von ini_set gesetzt werden sollte, wie in dieser Antwort angegeben, sondern indem die Sekunden in Klammern gesetzt werden. Voted Hannes up.
John
1

Testen Sie, ob Sie sich im abgesicherten Modus befinden. Wenn nicht, stellen Sie das Zeitlimit (lokaler Wert) auf das gewünschte Maß ein:

if(!ini_get('safe_mode')){

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

    phpinfo();// see 'max_execution_time'
}

* Sie können das Zeitlimit nicht auf diese Weise einstellen, wenn der abgesicherte Modus aktiviert ist.

TV-C-15
quelle
1

Optional: Wenn Sie die Konfiguration für php.ini festlegen, diese aber immer noch nicht hochladen können

-dies ist PHP-Funktion, um Fehlercode zu überprüfen

$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;
}
Ruthe
quelle
0

Sie können auch eine maximale Ausführungszeit in Ihrer .htaccessDatei festlegen :

php_value max_execution_time 180
Einblick
quelle
0

Um das Zeitlimit wirklich zu erhöhen, ziehe ich es vor, zuerst den aktuellen Wert zu erhalten. set_time_limiterhöht nicht immer das Zeitlimit. Wenn der aktuelle Wert (zB aus php.inioder früher gesetzt) höher als der Wert in der aktuellen Aufruf verwendet wird set_time_limit, wird es sinkt die Frist!

Was ist mit einem kleinen Helfer wie diesem?

/**
 * @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);

Siehe auch: Holen Sie sich max_execution_time im PHP-Skript

Algorithmus
quelle