2010-04-20 5 views

답변

3

파일의 실행 후 "완료"플래그를 설정하고, 셧다운 기능을 등록하려고 사용하여 함수를 적용하는 해당 플래그가 정의되어 있는지 확인합니다

+0

그냥 나를 이길 -이 줄을 따라 내 대답을 다시 작성했습니다 –

+0

;) 멋지 네요, 대답은 정확합니다 – shfx

+0

고마워요! 그것은 트릭을했다. – AdamA

3

치명적인 오류가 발생하지 않으므로 원래의 대답은 작동하지 않습니다. 어쨌든 읽으려면 개정 내역을 확인하십시오.

나의 유일한 추측은 register_shutdown_function을 사용할 수 있다는 것입니다. 스크립트 시작 부분에 변수를 설정하고 스크립트가 성공적으로 완료되면 변수를 지우십시오. 변수 것을 확인하고는 아직 설정되어 경우에 역할을하는 함수를 작성하고 register_shutdown_function

http://php.net/manual/en/function.register-shutdown-function.php

9

처음 두 답변을 읽은 후에는 register_shutdown_function() 자신을 테스트해야했습니다. 실행하지 않을 것입니다. 결국, 더 이상 메모리가 없거나 실행 시간이 경과하면 어떻게 사용자 기능을 실행할 수 있습니까? 나는 종료 기능이 을 실행한다는 것을 알게되어 놀랐다. 심지어 OOM 상황에서도, 또는 실행 시간이 지나치게 길 때였다. 개념의 증명 :

메모리의 한계를 테스트하려면 :

<?php 
function asdf() { echo "omg\n"; } 
register_shutdown_function('asdf'); 

ini_set('memory_limit', '1000'); 

$x = ''; 
while(true) { 
$x .= 'lkajsdlfkjasldkfjlaskdfjasldkfj'; 
} 

출력 :

cat scratch.php 
<?php 
function asdf() { echo "omg\n"; } 
register_shutdown_function('asdf'); 

set_time_limit(1); 

while(true) {} 

출력 :

PHP Fatal error: Maximum execution time of 1 second exceeded in /home/scratch.php on line 7 
PHP Stack trace: 
PHP 1. {main}() /home/scratch.php:0 

Fatal error: Maximum execution time of 1 second exceeded in /home/scratch.php on line 7 

Call Stack: 
    0.0002  80200 1. {main}() /home/scratch.php:0 

omg 

PHP Fatal error: Allowed memory size of 262144 bytes exhausted (tried to allocate 169540 bytes) in /home/scratch.php on line 9 
PHP Stack trace: 
PHP 1. {main}() /home/scratch.php:0 

Fatal error: Allowed memory size of 262144 bytes exhausted (tried to allocate 169540 bytes) in /home/scratch.php on line 9 

Call Stack: 
    0.0002  81360 1. {main}() /home/scratch.php:0 

omg 

실행 시간을 테스트하려면

메시지가 으로 표시 되려면 PHP 오류 출력 전에 PHP 오류 출력을 완전히 비활성화해야합니다. 어쨌든 프로덕션 사이트의 모범 사례입니다.

+0

최대 실행 시간에 도달했습니다! = 허용 메모리가 고갈되었습니다 루프 및 절전 기능으로 최대 실행 시간에 도달하는 스크립트를 만들기가 쉽지 않습니다. 잠자기 시간이 실행 ​​시간을 멈추게합니다 ... – shfx

+0

나쁜. 게시물을 편집하여 메모리 고갈 대신 실행 시간 제한 테스트 –

0

API 수준에서 오류를 트래핑 할 수있는 방법이 없다면 '블루 스크린'이 표시 될 때 Windows가 수행하는 것과 같이 치명적인 오류가 발생할 때마다 PHP 엔진이 hdd에 메모리를 덤프 할 수 있어야합니다.