현재 위치: > 최신 기사 목록> PHP 스크립트 타임 아웃을 피하기 위해 장기 실행 작업에서 INGORE_USER_ABORT를 사용하십시오.

PHP 스크립트 타임 아웃을 피하기 위해 장기 실행 작업에서 INGORE_USER_ABORT를 사용하십시오.

gitbox 2025-05-29

PHP를 사용하여 장기 작업을 수행 할 때, 우리는 종종 사용자가 브라우저를 닫거나 요청을 적극적으로 단절하는 상황을 만나며 PHP 스크립트가 중단됩니다. 이것은 백엔드의 장기 실행 또는 지속적인 처리가 필요한 스크립트의 경우 매우 치명적입니다. 그렇다면 사용자가 연결이 끊어 질 때 스크립트가 중단되는 것을 방지하는 방법은 무엇입니까? 답은 ingore_user_abort () 함수를 사용하는 것입니다.

INGORE_USER_ABORT 란 무엇입니까?

INGORE_USER_ABORT ()는 클라이언트가 연결을 끊을 때 스크립트가 계속 실행되는지 여부를 설정하기 위해 PHP가 제공하는 함수입니다.

 ignore_user_abort(true);

실제 매개 변수가 전달되면 실행이 완료되거나 시간이 초과 될 때까지 사용자가 브라우저를 닫더라도 PHP 스크립트가 계속 실행됩니다.

INGORE_USER_ABORT의 응용 프로그램 시나리오

  • 비동기 작업을 처리합니다

  • 배경 대기열 처리

  • 시간이 정한 작업 시뮬레이션 실행

  • 파일 생성 또는 빅 데이터 내보내기

  • 상태 일관성을 유지 해야하는 무대 뒤에서

실질적인 예를 들어 시스템 백업 기능을 개발하는 경우 사용자가 "Backup 시작"을 클릭 한 후 스크립트를 10 분 이상 실행하려면 실행해야합니다. 사용자가 브라우저를 닫으면 기본적으로 스크립트가 중단되고 백업 작업이 실패합니다. ingore_user_abort (true) 를 통해 사용자가 페이지를 떠나더라도 백업이 완료 될 때까지 스크립트가 서버에서 계속 실행됩니다.

INGORE_USER_ABORT를 사용하는 방법

다음은 일반적인 긴 작업 처리 코드 예입니다.

 <?php
ignore_user_abort(true); // 사용자가 연결을 중단하더라도 계속 실행하십시오
set_time_limit(0); // 스크립트 실행 시간 제한을 취소합니다

file_put_contents('log.txt', "미션 시작 시간:" . date('Y-m-d H:i:s') . "\n", FILE_APPEND);

// 장기 작업을 시뮬레이션하십시오
for ($i = 1; $i <= 10; $i++) {
    file_put_contents('log.txt', "1. {$i} 단계별 실행...\n", FILE_APPEND);
    sleep(5); // 시뮬레이션의 각 단계에 대한 시간이 소요됩니다
}

file_put_contents('log.txt', "작업 완료 시간:" . date('Y-m-d H:i:s') . "\n", FILE_APPEND);
?>

예를 들어 CURL 또는 AJAX 요청을 통해이 스크립트를 호출 할 수 있습니다.

 fetch("https://gitbox.net/run-task.php");

요청을 전송 한 후 사용자가 브라우저를 닫더라도 스크립트가 전체 실행됩니다.

연결 상태를 확인하십시오

로그 작성 또는 특정 동작 중단과 같이 사용자가 연결이 끊어진 후에 논리적 처리를 수행하려면 Connection_Aborted () 함수를 사용하여 다음을 감지 할 수 있습니다.

 if (connection_aborted()) {
    file_put_contents('log.txt', "사용자 연결이 중단되었습니다\n", FILE_APPEND);
}

INGORE_USER_ABORT (TRUE) 와 함께 사용하면 인터럽트 및 비 중단을보다 유연하게 처리 할 수 ​​있습니다.

주목해야 할 것

  • INGORE_USER_ABORT ()를 사용한다고해서 모든 예외를 무시할 수 있다는 것을 의미하지는 않습니다. 인터럽트는 서버 측 (예 : NGINX, APACHE 구성) 또는 PHP 스크립트 (예 : 메모리 제한)에서 나올 수도 있습니다.

  • 최대 실행 시간 제한을 취소하기 위해 SET_TIME_LIMIT (0)를 동시에 사용하는 것이 좋습니다.

  • 스크립트가 클라이언트에 데이터를 출력하는 경우 OB_START ()를 사용하여 출력 동작으로 인한 연결 문제를 피하기 위해 논리 전에 버퍼링을 활성화하십시오.

요약

PHP에서 긴 작업을 처리 할 때 INGORE_USER_ABORT (TRUE)를 사용하는 것은 사용자가 중간에있는 스크립트를 중단하지 않도록 효과적인 방법입니다. 작업이 서버 측에서 완전히 실행되도록하고 시스템의 안정성과 안정성을 향상시킬 수 있습니다. 이것은 백업, 푸시, 내보내기 등과 같은 작업과 관련된 배경 스크립트에 대한 매우 실용적인 트릭입니다.