사용자가 페이지를 떠난 후 php 실행이 중지됩니까?
폼 입력에 따라 비교적 시간이 걸리는 스크립트를 실행하고 싶지만, cron에 의존하지 않는 것이 좋기 때문에, Ajax를 통해 요청된 php 페이지는 완료될 때까지 계속 실행할지, 아니면 사용자가 페이지를 떠나면 정지할지 궁금합니다.
파일 끝에 json_encode가 있을 때까지 브라우저에 출력되지 않습니다.그 전의 모든 것이 실행됩니까?
사정에 따라 다르겠지.
http://us3.php.net/manual/en/features.connection-handling.php 에서 :
PHP 스크립트가 정상적으로 실행되고 있는 경우는, 「NORMAL」리모트 클라이언트가 ALOGED 상태 플래그를 온으로 했을 경우.리모트 클라이언트의 접속 해제는 통상, 유저가 STOP 버튼을 누르는 것에 의해서 발생합니다.
클라이언트의 접속 해제로 인해 스크립트가 중단되는지 여부를 결정할 수 있습니다.출력을 수신하는 리모트브라우저가 없는 경우에도 스크립트를 항상 실행해 두면 편리할 수 있습니다.단, 리모트클라이언트의 접속이 끊어지면 스크립트가 중단되는 것이 기본 스크립트가 중단됩니다.은, 「」를 할 수 .
ignore_user_abort
및 하는 php.ini 지시문php_value ignore_user_abort
Apache Apache httpd.conf를ignore_user_abort()
★★★★★★ 。
즉, "예, 사용자가 페이지를 떠나면 스크립트가 종료됩니다"라는 질문에 대한 답변이 나타납니다.
사용하는 예 "이다", "SAPI")에 mod_php
php)는 클라이언트에 정보를 송신할 때까지 클라이언트가 접속을 중단한 것을 검출할 수 없습니다.장시간 실행 중인 스크립트로 인해flush()
사용자가 연결을 닫은 경우에도 스크립트가 계속 실행될 수 있습니다.
복잡한 것은 정기적으로 콜을 발행해도flush()
출력 버퍼링을 켜면 이러한 콜이 트랩되어 스크립트가 완료될 때까지 클라이언트에 전송되지 않습니다.
더 복잡한 것은 응답을 버퍼링하는 Apache 핸들러를 설치한 경우입니다(예:mod_gzip
다시 한 번 php는 연결이 닫혀 있는 것을 검출하지 않고 스크립트는 계속 트래킹합니다.
휴.
이것은 설정에 따라 다릅니다.보통은 정지되지만, 를 사용하여 계속할 수 있습니다.
웹 서버 및/또는 PHP 구성에 따라 사용자가 HTTP 연결을 종료할 때 PHP 프로세스가 스레드를 종료하거나 종료하지 않을 수 있습니다.사용자가 페이지를 떠날 때 AJAX 요청이 보류 중인 경우 AJAX 요청은 브라우저가 서버 설정(보증되지 않음) 위에 있는 요청을 죽이는 것에 의존합니다.네가 듣고 싶은 대답은 아니야!
플랫 파일 또는 데이터베이스에 작업 큐를 생성하여 지속적으로 실행되는 PHP 데몬이 작업을 폴링할 수 있도록 권장합니다.에 시달리지 않는다.cron
CPU/메모리 사용량을 사용 가능한 수준으로 유지합니다.작업이 완료되면 결과를 플랫 파일/데이터베이스에 저장하여 AJAX를 가져옵니다.또는 작업이 완료되면 사용자에게 이메일을 보내겠다고 약속합니다(제가 선호하는 방법).
도움이 되었으면 좋겠다
클라이언트/사용자/다운로더/뷰어가 중단되거나 연결이 끊어진 경우 스크립트는 클라이언트에서 새로운 데이터를 플러시하려고 시도할 때까지 계속 실행됩니다.사용한 적이 없는 한ignore_user_abort()
스크립트는 거기서 종료됩니다.마찬가지로 PHP는 httpd에 데이터를 플러시하지 않고는 클라이언트가 아직 있는지 여부를 판단할 수 없습니다.
접속이 종료되지 않는 경우의 실제 해결책을 찾았습니다.Apache/Php 서버의 SESSION을 닫아야 다음 서버를 시작할 수 있습니다.
브라우저는 중단 후 Ajax 콜이 완료될 때까지 기다립니다.
언급URL : https://stackoverflow.com/questions/1280291/does-php-execution-stop-after-a-user-leaves-the-page
'programing' 카테고리의 다른 글
jQuery를 사용하여 AJAX 응답(json)에서 테이블 행 작성 (0) | 2023.03.11 |
---|---|
브라우저에서 AJAX(XmlHttpRequest) 콜의 타임아웃을 검출하려면 어떻게 해야 합니까? (0) | 2023.03.11 |
ES6 맵을 로컬 스토리지(또는 다른 곳)에 보관하려면 어떻게 해야 합니까? (0) | 2023.03.11 |
Wordpress에서 이미지를 비공개로 설정 (0) | 2023.03.11 |
"woocommerce_add_to_cart" 필터 또는 후크를 추가하는 방법 (0) | 2023.03.11 |