PHPで実行タイムアウトを増やす方法は?


101

トランザクションのタイムアウトを増やす方法は?動画をアップロードしたいのですが、大きなサイズの動画がアップロードされていませんか?

エラーが発生します The process *** exceeded the timeout of 60 seconds.


1
「トランザクションタイムアウト」を定義します。どこで機能しないのですか?
Pekka

1
なぜ「トランザクション」タイムアウトと思うのですか?
常識

短い動画が正常にアップロードされました。長い動画がアップロードされていないので、タイムアウトになると思います。
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);
アーミル

1
アップロードする前にファイルを分割することをお勧めします。利用できるアプリはたくさんあります。私はpluploadを優先します。
bksi

回答:


127

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

PHP.iniが配置されているかどうかは、環境によって異なります。詳細:http ://php.net/manual/en/ini.list.php


すみません、それが何を意味するのかわかりません:(
Hannes

@ Aamir、Webサーバーの構成を変更するには、Webホストからの許可が必要です。多くの場合、そのようなものを変更することはできません。
hellozimi

htaccessファイルのupload_max_filesizeとmax_execution_timeを変更できますか?
Aamir

2
@Col、私は同意しません、彼はアプリケーション全体ではなくオンザフライで変更を加えたいので、彼はそれをどのように行うことができるか尋ねます。また、php.iniの一部を変更する方法を尋ねたとしても、初心者の質問かもしれませんが、合法的な質問はすべて同じです。
Hannes、2009

1
@IulianOnofrei申し分なく、ちょうどそれを指摘する必要性を感じました:Dしかし、もしあなたがそれが何であるかわからない場合は、それを調べるのはまだ良いです...「歴史から学ぶことができない人はそれを繰り返す運命にあります」 …
ハネス14

56

ランタイム中にも使用できるようにする必要があります

set_time_limit(100);

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

またはあなたのvhost-config

php_admin_value max_execution_time 10000

LOWであるグローバル実行時間制限を設定することは、信頼性がそれほど高くないアプリケーションのパフォーマンス上の理由から、ほとんどの場合良いアイデアです。したがって、これらのスクリプトを絶対に必要な時間より長く実行できるようにしたい場合があります。

ps:post_max_sizeとupload_max_filesizeを忘れないでください(最初の回答がすでに伝えたように)


設定した場合、スリープは無視されます
Snake Eyes

20

ハンネスの答えを完成させる。

php.iniの設定をいくつか変更する必要があります。

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must

誰かが無制限に入れたい場合(理由はわかりませんが、必要な場合)、時間を0に設定できます。

php.iniの設定をいくつか変更する必要があります。

upload_max_filesize = 0 

max_execution_time = 0

また、php.iniがどこにあるかわからない場合。サーバーでファイル「name.php」を実行して、次のように配置できます。

<?php phpinfo(); ?>

そして、あなたのウェブサイトで、あなたはあなたのphp.iniの設定を見ることができ、それはそれがどこにあるかマークされています。

2015年1月9日に編集:

php.iniにアクセスできない場合は、さらに2つのオプションがあります。

この行を「name.php」ファイルに直接設定できますが、このオプションのupload_max_filesizeが見つかりません。

set_time_limit(0);

または「.htaccess」

php_value upload_max_filesize 0
php_value max_execution_time 0

9

あなたがする必要があるのが1つまたは2つのページだけに固有である場合、アプリケーション全体に影響を与えないように、set_time_limitを使用することをお勧めします。

set_time_limit(some_values);

もちろん、これらの2つの値(post_max_sizeとupload_max_filesize)は調査の対象です。

ini_set関数で設定することもできます

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

または直接、Hannesによる上記の応答のようなphp.iniファイル、または以下のようにiin .htaccessに設定します

php_value upload_max_filesize 2M
php_value post_max_size 20M

5

上記の回答に加えて、set_time_limit()関数を使用できます。

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

0引数として渡すと、スクリプトは時間制限なしで実行されます。


set_time_limit()はファイルのアップロードとは何の関係もありません
常識

1
これは正確ではありません。Unix環境では、最大実行時間はphp-threadで使用される累積CPU時間と比較されますが、Windowsシステムでは絶対時間が使用されます。アップロードは主に「アイドル時間」(IO-Wait)です。しかし、ご覧のとおり、アップロードに時間がかかりすぎると停止する可能性があります。
クリストフStrasen

4

たまたまMicrosoft IISサーバーを使用している場合は、他の人が述べたphp.ini設定に加えて、IISサーバーマネージャーでPHP FastCGIアプリケーションの実行タイムアウト設定を増やす必要がある場合があります。

ステップ1)IISサーバーマネージャーを開きます(通常、[スタート]メニューの[ サーバーマネージャー ]の下にある[ ツール] / [ インターネットインフォメーションサービス(IIS)マネージャー])。

ステップ2)(特定のドメインに固有ではない)メイン接続をクリックします。

ステップ3)IISセクションの下で、FastCGI設定を見つけます(以下を参照)。

ここに画像の説明を入力してください

ステップ4)ここで、PHPアプリケーションを右クリックし、[ 編集... ]を選択します

ステップ5)タイムアウトを確認します(以下を参照)。

ここに画像の説明を入力してください

私の場合、デフォルトのタイムアウトは70秒と90秒でした。前者が原因で、70秒以上かかるPHPスクリプトで500内部サーバーエラーが発生していました。


3

入力ミスがありました:ini_set( 'max_input_time'、 '200M')-値セットはini_set( 'max_input_time'、 '200')のようにintである必要があります


2

PHPタイムアウトについて具体的に質問しているのは承知していますが、他に誰も言及していないように見えるのは、Webサーバーにもタイムアウトがあり、PHPタイムアウトと非常によく似ていることです。

だからあなたが試した場合:

  1. 次の行を追加して、php.iniのタイムアウトを増やします。max_execution_time = {秒数、つまり1分間で60}
  2. 次を追加して、スクリプト自体のタイムアウトを増やします。ini_set( 'max_execution_time'、 '{秒数、つまり1分間で60}});

そして、phpinfo()関数でmax_execution_timeが実際に増加していることを確認した後、これを.htaccessに追加して、Apache自体がタイムアウトしないようにすることができます。

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

詳細はこちら:https : //www.antropy.co.uk/blog/php-script-keeps-timing-out-despite-ini-set/


2

まず、php.iniファイルのパスをで確認しますphpinfo()。そして、PHP.INIパラメータを変更しました:

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

Apacheを再起動しました

set_time_limit(0); // safe_mode is off

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

:コマンドを使用php.iniしてLinuxで検索することもできます

locate `php.ini`

1

(サーバーなどで)php.iniを編集できない場合は、phpコード内からphp.iniパラメータの変更を試みることができます。試してください:

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

それでもうまくいかない場合は、同じように「set_time_limit」を設定してみてください。それ以外は、ホストに連絡することしか選択肢がないと思います。これらの設定は、セーフモードでは変更できません。


3
Hannesは私が投稿する1分前にこれを取得し、set_time_limit()はini_setによって設定されるべきではないことを正しく指摘しています。ハネスに投票。
John

1

セーフモードであるかどうかをテストします。そうでない場合は、制限時間(ローカル値)を必要な値に設定します。

if(!ini_get('safe_mode')){

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

    phpinfo();// see 'max_execution_time'
}

*セーフモードが「オン」の場合、この方法で時間制限を設定することはできません。


1

オプション:php.iniの設定を設定してもアップロードできない場合

-これはエラーコードをチェックするphp関数です

$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

.htaccessファイルに最大実行時間を設定することもできます:

php_value max_execution_time 180

0

時間制限を本当に増やすには、まず現在の値を取得することをお勧めします。set_time_limit常に制限時間を増やしているわけではありません。現在の値(例えばからの場合はphp.iniセットまたは以前の)の現在の呼び出しで使用される値よりも高くなってset_time_limit、それがされます減少時間制限を!

それで、このような小さなヘルパーは何ですか?

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

参照:PHPスクリプトでmax_execution_timeを取得する

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.