현재 위치: > 최신 기사 목록> [SET_TIME_LIMIT 함수를 호출 한 후 스크립트가 여전히 시간이 걸렸습니다. 일반적인 이유와 솔루션은 무엇입니까?

[SET_TIME_LIMIT 함수를 호출 한 후 스크립트가 여전히 시간이 걸렸습니다. 일반적인 이유와 솔루션은 무엇입니까?

gitbox 2025-06-22

1. PHP 구성 파일의 max_execution_time 설정

PHP의 max_execution_time 구성 항목은 스크립트의 최대 실행 시간을 제어합니다. 스크립트에서 set_time_limit을 호출하더라도 구성 항목이 php.ini 파일에서 더 낮은 값을 설정하면 스크립트의 실행 시간이 여전히 제한됩니다. set_time_limit 에 대한 호출은 현재 스크립트의 최대 실행 시간 만 일시적으로 수정하지만 php.inimax_execution_time 값이 원하는 실행 시간보다 낮 으면 스크립트가 여전히 종료됩니다.

해결책:

php.ini에서 max_execution_time 설정을 확인하고 수정하십시오. 스크립트를 더 오래 실행하려면 그 가치를 높일 수 있습니다. 다음 명령을 사용하여 현재 max_execution_time 구성을 찾을 수 있습니다.

 <span><span><span class="hljs-title function_ invoke__">phpinfo</span></span><span>();
</span></span>

그런 다음 php.ini 파일에서 해당 구성을 수정하십시오.

 <span><span><span class="hljs-attr">max_execution_time</span></span><span> = </span><span><span class="hljs-number">300</span></span><span>  </span><span><span class="hljs-comment">; AS를 설정합니다300두번째(5분)</span></span><span>
</span></span>

수정 후 구성을 적용하려면 웹 서버 (예 : Apache 또는 Nginx)를 다시 시작해야합니다.


2. 웹 서버 시간 초과 설정

PHP 구성 외에도 웹 서버 (예 : Apache, Nginx 등)도 요청 시간 초과 제한을 설정할 수 있으며, 이는 스크립트 실행 시간 초과를 유발할 수도 있습니다. 예를 들어 Apache의 시간 초과 지시 또는 Nginx의 Proxy_Read_Timeout 설정은 PHP 스크립트의 실행 시간을 제한 할 수 있습니다.

해결책:

사용중인 웹 서버에 따라 관련 타임 아웃 설정을 확인하고 조정하십시오.

  • Apache : 시간 초과 구성 항목 찾기 및 수정 :

 <span>Timeout 300
</span>
  • nginx : nginx.conf 파일에서 proxy_read_timeout 또는 fastcgi_read_timeout 설정을 추가하거나 수정하십시오.

 <span><span><span class="hljs-attribute">proxy_read_timeout</span></span><span> </span><span><span class="hljs-number">300</span></span><span>;
</span><span><span class="hljs-attribute">fastcgi_read_timeout</span></span><span> </span><span><span class="hljs-number">300</span></span><span>;
</span></span>

수정 후 서버를 다시 시작하여 설정이 적용됩니다.


3. 스크립트 내부의 장기 차단 작업

일부 PHP 스크립트는 데이터베이스 쿼리, 원격 API 요청 등과 같은 특정 작업 중에 오랫동안 차단 될 수 있습니다. SET_TIME_LIMIT가 최대 실행 시간을 수정하더라도 이러한 작업 자체를 차단하면 스크립트 실행 시간 초과가 발생할 수 있습니다.

해결책:

  • 데이터베이스 쿼리를 최적화하여 합리적인 시간 내에 완료 할 수 있고 불필요한 잠금을 피하십시오.

  • 장기적인 막힘을 피하기 위해 비동기 요청 또는 배치 처리를 사용하십시오. 예를 들어, API 요청 또는 데이터베이스 쿼리는 요청 당 처리 시간이 짧은 여러 개의 작은 요청으로 분리 될 수 있습니다.


4. 멀티 스레드 또는 동시 요청 간의 간섭

PHP 스크립트에 동시 요청 또는 여러 스레드와 관련된 작업이있는 경우 여러 작업을 처리 할 때 단일 스레드의 시간 제한이 초과 될 수 있습니다. set_time_limit은 단일 프로세스의 실행 시간을 조정할 수 있지만 동시성에서 여러 프로세스의 시간 초과 설정을 동기식으로 조정해야합니다.

해결책:

동시 작업을 처리하기 위해 큐 시스템 (예 : RabbitMQ, Redis 등)을 사용하는 것을 고려하십시오. 작업을 여러 개의 작은 하위 작업으로 나누고 비동기 적으로 처리하여 단일 프로세스 타임 아웃을 피합니다.


5. set_time_limit 의 동작 범위

set_time_limit 은 현재 스크립트에만 유효하며 외부 요청의 시간 초과 한도 또는 PHP의 기타 스크립트에는 영향을 미치지 않습니다. 스크립트에 포함되거나 내부에 파일이 포함 되거나 필요한 경우 SET_TIME_LIMIT 이 파일에서 코드 실행 시간을 확장하지 못할 수 있습니다.

해결책:

스크립트의 시작 부분에서 set_time_limit이 호출되거나 모든 포함 된 파일에서 set_time_limit이 호출되어 있는지 확인하십시오. 모든 파일에 영향을 미치려면 입력 파일 (예 : index.php)에서 set_time_limit 호출을 고려하십시오.


6. 시스템 수준 리소스 제한

일부 환경 (예 : 공유 호스팅 또는 일부 클라우드 서비스 제공 업체)에서 PHP 스크립트의 실행 시간에는 운영 체제 수준 제한이 적용될 수 있으며, 이는 PHP 구성을 통해 반드시 변경 될 필요는 없습니다. 예를 들어, 자원 사용이 너무 높을 때 일부 운영 체제 또는 컨테이너화 된 환경이 스크립트를 종료 할 수 있습니다.

해결책:

시스템이 프로세스의 실행 시간을 제한하지 않도록 ULIMIT 명령과 같은 서버의 운영 체제 수준 제한을 확인하십시오. 변경할 수없는 경우 독립형 서버 또는 전용 클라우드 호스트와 같은 더 많은 리소스가없는 환경으로 마이그레이션하는 것을 고려하십시오.


7. 다른 타사 제한

일부 타사 서비스 또는 구성 요소는 특히 외부 API 또는 통합 서비스를 사용할 때 스크립트의 실행 시간을 제한 할 수 있습니다. 예를 들어, 일부 API는 요청 시간이 초과 된 후 오류를 반환하여 스크립트가 종료됩니다.

해결책:

  • 타사 서비스에 대한 문서를 확인하여 시간 초과 설정이 있는지 확인하십시오.

  • 스크립트에서 적절한 오류 처리 메커니즘을 사용하여 시간 초과 예외를 포착하고 처리하십시오.