Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to increase the execution timeout in php?

Tags:

php

How to increase transaction timeout? I want to upload videos, but large size of videos not uploaded?

It throws error The process *** exceeded the timeout of 60 seconds.

like image 990
Amir Avatar asked Sep 30 '10 09:09

Amir


People also ask

Is it possible to extend the execution time of a PHP script?

By default, the maximum execution time for PHP scripts is set to 30 seconds. If a script runs for longer than 30 seconds, PHP stops the script and reports an error. You can control the amount of time PHP allows scripts to run by changing the max_execution_time directive in your php. ini file.

How do you increase the maximum execution time of 30 seconds exceeded?

Log in to cPanel using your credentials. Navigate to the Software section and click on the MultiPHP INI Editor. In the new window, select your domain from the dropdown menu, locate the max_execution_time PHP directive, and change the value associated with it to 300.


12 Answers

You need to change some settings in your php.ini:

upload_max_filesize = 2M 
;or whatever size you want

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

Where your PHP.ini is located depends on your system environment. For more information: http://php.net/manual/en/ini.list.php

like image 186
Hannes Avatar answered Oct 02 '22 23:10

Hannes


You should be able to do during runtime too using

set_time_limit(100);

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

or in your vhost-config

php_admin_value max_execution_time 10000

Having a global execution time limit that is LOW is mostly a good idea for performance-reasons on not-so-reliable applications. So you might want to only allow those scripts to run longer that absolutely have to.

p.s.: Dont forget about post_max_size and upload_max_filesize (like the first answer told allready)

like image 26
Christoph Strasen Avatar answered Oct 02 '22 22:10

Christoph Strasen


To complete the answer of Hannes.

You need to change some setting in your php.ini:

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must

If someone want put in unlimited (I don't know why but if you want), you can set the time to 0:

You need to change some setting in your php.ini:

upload_max_filesize = 0 

max_execution_time = 0

And if you don't know where is your php.ini. You can do a file "name.php" in your server and put:

<?php phpinfo(); ?>

And on your website, you can see the config of your php.ini and it's marked where is it.

Edit on 9 January 2015:

If you can't access your php.ini, you have two more options.

You can set this line directly in your "name.php" file but I don't find for upload_max_filesize for this option:

set_time_limit(0);

Or in ".htaccess"

php_value upload_max_filesize 0
php_value max_execution_time 0
like image 26
Lynxi Avatar answered Oct 02 '22 23:10

Lynxi


if what you need to do is specific only for 1 or 2 pages i suggest to use set_time_limit so it did not affect the whole application.

set_time_limit(some_values);

but ofcourse these 2 values (post_max_size & upload_max_filesize) are subject to investigate.

you either can set it via ini_set function

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

or directly in php.ini file like response above by Hannes, or even set it iin .htaccess like below

php_value upload_max_filesize 2M
php_value post_max_size 20M
like image 31
Komang Avatar answered Oct 02 '22 21:10

Komang


If you happen to be using Microsoft IIS server, in addition to the php.ini settings mentioned by others, you may need to increase the execution timeout settings for the PHP FastCGI application in the IIS Server Manager:

Step 1) Open the IIS Server Manager (usually under Server Manager in the Start Menu, then Tools / Internet Information Services (IIS) Manager).

Step 2) Click on the main connection (not specific to any particular domain).

Step 3) Under the IIS section, find FastCGI Settings (shown below).

enter image description here

Step 4) Therein, right-click the PHP application and select Edit....

Step 5) Check the timeouts (shown below).

enter image description here

In my case, the default timeouts here were 70 and 90 seconds; the former of which was causing a 500 Internal Server Error on PHP scripts that took longer than 70 seconds.

like image 39
Michael Avatar answered Oct 02 '22 21:10

Michael


As an addition to above answers, you may use set_time_limit() function:

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

passing 0 as an argument will make your script run with no time limit.

like image 26
Tomasz Kowalczyk Avatar answered Oct 02 '22 22:10

Tomasz Kowalczyk


If you cannot edit php.ini (on your server for example) you can attempt to change the php.ini parameters from within your php code. Try:

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

If that doesn't work, try also setting 'set_time_limit' in the same way, beyond that I'd say your only option is to contact your host. These settings cannot be modified while in safe mode.

like image 31
John Avatar answered Oct 02 '22 21:10

John


You had a typo: ini_set('max_input_time','200M') - value set needs to be an int, like ini_set('max_input_time','200')

like image 40
thanatoid Avatar answered Oct 02 '22 21:10

thanatoid


I know you are specifically asking about the PHP timeout, but what no one else seems to have mentioned is that there can also be a timeout on the webserver and it can look very similar to the PHP timeout.

So if you have tried:

  1. Increasing the timeout in php.ini by adding a line: max_execution_time = {number of seconds i.e. 60 for one minute}
  2. Increasing the timeout in your script itself by adding: ini_set('max_execution_time','{number of seconds i.e. 60 for one minute}');

And you have checked with the phpinfo() function that max_execution_time has indeed be increased, then you might want to try adding this to .htaccess which will make sure Apache itself does not time out:

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

More info here: https://www.antropy.co.uk/blog/php-script-keeps-timing-out-despite-ini-set/

like image 23
Paul Feakins Avatar answered Oct 02 '22 23:10

Paul Feakins


First check the php.ini file path by phpinfo(); and then changed PHP.INI params:

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

restarted Apache

set_time_limit(0); // safe_mode is off

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

Note: you can also use command to find php.ini in Linux

locate `php.ini`
like image 41
Ashfaq Muhammad Avatar answered Oct 02 '22 23:10

Ashfaq Muhammad


Test if you are is safe mode - if not - set the time limit (Local Value) to what you want:

if(!ini_get('safe_mode')){

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

    phpinfo();// see 'max_execution_time'
}

*You cannot set time limit this way if safe mode 'on'.

like image 43
TV-C-1-5 Avatar answered Oct 02 '22 22:10

TV-C-1-5


optional : if you set config about php.ini but still can't upload

-this is php function to check error code

$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;
}
like image 28
Ruthe Avatar answered Oct 02 '22 23:10

Ruthe