PHP에서 실행 시간 제한을 늘리는 방법은 무엇입니까?


103

트랜잭션 시간 초과를 늘리는 방법은 무엇입니까? 동영상을 올리고 싶지만 큰 동영상이 업로드되지 않습니까?

오류가 발생합니다. 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);
Aamir

1
업로드하기 전에 파일을 분할하는 것이 좋습니다. 사용할 수있는 앱이 많이 있습니다. 나는 plupload를 선호합니다.
bksi

답변:


129

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, 웹 서버 구성을 변경하려면 웹 호스트의 권한이 필요합니다. 종종 그들은 당신이 그런 것들을 바꾸도록 허락하지 않을 것입니다.
hellozimi

htaccess 파일에서 upload_max_filesize 및 max_execution_time을 변경할 수 있습니까?
아미르

2
@Col, 동의하지 않습니다. 그는 전체 응용 프로그램이 아닌 즉석에서 변경하기를 원하므로 어떻게 할 수 있는지 묻습니다. 그리고 그가 php.ini의 일부 항목을 어떻게 변경할 수 있는지 묻는 경우에도 초보자 질문 일 수 있지만 합법적 인 질문은 모두 동일합니다.
Hannes

1
@IulianOnofrei 좋아, 그냥 지적 할 필요가 있다고 느꼈다 : D,하지만 당신이 그것을 찾아 보는 것이 여전히 좋은 것이 무엇인지 모른다면 ... "역사에서 배울 수없는 사람들은 그것을 반복 할 운명이다" …
Hannes

57

런타임 중에도 할 수 있어야합니다.

set_time_limit(100);

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

또는 vhost-config에서

php_admin_value max_execution_time 10000

글로벌 실행 시간 제한을 LOW로 설정하는 것은 그다지 신뢰할 수없는 애플리케이션의 성능 이유에 대한 좋은 생각입니다. 따라서 해당 스크립트가 절대적으로 필요한 시간 동안 만 실행되도록 허용 할 수 있습니다.

추신 : post_max_size 및 upload_max_filesize를 잊지 마십시오 (첫 번째 답변이 모두 준비된 것처럼)


설정하면 수면이 무시됩니다
Snake Eyes

21

Hannes의 답변을 완성합니다.

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에 액세스 할 수없는 경우 두 가지 옵션이 더 있습니다.

"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);

그러나 물론이 두 값 (post_max_size 및 upload_max_filesize)은 조사 대상입니다.

ini_set 함수 를 통해 설정할 수 있습니다.

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

또는 Hannes의 응답과 같은 php.ini 파일에서 직접 또는 아래와 같이 .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
이것은 충분히 정확하지 않습니다 Col. Shrapnel. Unix 환경에서는 최대 실행 시간이 php-thread에서 사용하는 누적 CPU 시간과 비교되지만 Windows 시스템에서는 절대 시간이 사용됩니다. 업로드는 대부분 "유휴 시간"(IO-Wait)입니다. 하지만 보시다시피 너무 오래 걸리더라도 업로드가 중지 될 수 있습니다.
Christoph Strasen

4

다른 사람이 언급 한 php.ini 설정 외에도 Microsoft IIS 서버를 사용 하는 경우 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 시간 초과에 대해 구체적으로 묻는 것을 알고 있지만, 다른 사람이 언급하지 않은 것은 웹 서버에 시간 초과가있을 수 있으며 PHP 시간 초과와 매우 유사 할 수 있다는 것입니다.

따라서 시도한 경우 :

  1. 다음 줄을 추가하여 php.ini에서 시간 초과 늘리기 : max_execution_time = {초 수, 즉 1 분 동안 60}
  2. 다음을 추가하여 스크립트 자체의 시간 제한을 늘리십시오. ini_set ( 'max_execution_time', '{초 수 ie 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에 의해 설정되어서는 안되지만 괄호 안에 초를 넣어야한다고 올바르게 지적했습니다. Hannes를 투표했습니다.
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.