무한 루프를 작성하면 브라우저가 직접 충돌하지만 명령줄에서는 계속 실행할 수 있는 이유는 무엇입니까? 단지 합의 내용이 다르기 때문일까요? 자세한 설명을 부탁드립니다.
<code>while(true){ echo 'a'; }</code>
무한 루프를 작성하면 브라우저가 직접 충돌하지만 명령줄에서는 계속 실행할 수 있는 이유는 무엇입니까? 단지 합의 내용이 다르기 때문일까요? 자세한 설명을 부탁드립니다.
<code>while(true){ echo 'a'; }</code>
브라우저 측에서 테스트해보면 PHP에는 다양한 캐시가 있기 때문입니다
ob_end_flush
를 먼저 호출한 후 루프에서 플러시()를 호출하면 됩니다
이렇게 내용이 나옵니다
그러나 PHP의 기본 실행 시간과 브라우저의 시간 초과 메커니즘도 고려해야 합니다.
cli 모드에서 PHP의 실행 시간은 기본적으로 무제한이며, 기본적으로 활성화된 ob 등의 기능은 없습니다
http://www.php100.com/manual/...
php.ini 설정 옵션 무시
implicit_flush
: 명령줄 모드에서는 print 및 echo의 모든 출력이 버퍼링 작업 없이 즉시 출력 포트에 기록됩니다. 표준 출력을 지연하거나 제어하려는 경우에도 출력 버퍼링 설정을 사용할 수 있습니다.
max_execution_time
: 쉘 환경에서 PHP를 사용할 수 있는 무한한 가능성으로 인해 최대 실행 시간은 무한 값으로 설정됩니다. 웹용으로 개발된 애플리케이션은 실행하는 데 몇 초 밖에 걸리지 않는 반면, 셸 애플리케이션은 훨씬 더 오래 걸릴 수 있습니다.
php.ini의 max_execution_time은 프로그램 실행 시간을 지정합니다. 이 설정을 초과하면 스크립트가 치명적인 오류를 반환합니다. 기본값은 30초이며 명령줄에서는 이를 제어하지 않습니다.
합격 가능set_time_limit(0)
시간 제한 없음