2014-02-21 6 views
0

기본적으로 스크립트를 정리하고 있습니다. 이미지가 존재하는 경우 스크립트의최대 실행 시간 피하기 - PHP

한 부분은 내가이 문제로 실행하는 것입니다 알고 file_get_contents

를 사용하여 확인이 필요하며 나는 때때로 Fatal error: Maximum execution time of 30 seconds exceeded를 얻을가는 것을 피하려고하고 있습니다.

카운트를 시작하는 카운터를 설정하고 25 초 후에 file_get_contents가 실패하면 스크립트가 무시하고 계속 수행합니다.

내가 말할 수는 있지만 시간 제한을 늘리고 싶지는 않습니다.

이 기본 스크립트입니다

$query = "select table_id, image_url from table"; 

$res = $mysqli->query($query) or trigger_error($mysqli->error."[$query]"); 

while($row = $res->fetch_array()){ 

    // save the image 
    $img = '/path/to/'.$row[table_id].'.jpg'; 

    //## need to start counting to 25 secs here 

    $saveImage = file_put_contents($img, file_get_contents($row[image_ur])); 

    //## check if 25 seconds realised, if so with no $saveImage then continue 

    if($saveImage){ 
     // do something else 
    } 

} 
+1

참조 : 초과 PHP의 함수 [1] [1] : http://stackoverflow.com/questions/10587323/timeout-a-function-in-php –

+0

음 만약 최대 실행 시간이 만료되면 스크립트가 죽을 것이고 25 초 후에 페이지를 새로 고칠 수있는 루프가 아니며 마지막 인덱스로 param을 사용하여 페이지를 다시로드 할 수 있습니다. 여기서 루프는 인덱스로 다시 시작할 수 있습니다. 파일 작업을 위해 나는 그것을 할 수 있는지 모르지만 당신은 최대 실행 시간을 늘릴 수 있습니다. –

+0

'set_time_limit (0);' –

답변

1

대신은 상태 코드를 자사의 헤더를 가져오고 얻을 수 있도록, 당신은 단지 "핑 (ping)"는, CURL을 사용 할 수있는 전체 파일을 가져 오는 중 (200 = 파일 404 = 파일이 없습니다).

파일이 원격이 아닌 경우 file_exists()을 사용하십시오. 그것은 또한 당신이 할 수 있도록 흥미로운 거세한 숫양 PHPs 래퍼가 file_exists에 포함 된 것 :이 작동하거나 상태 코드 만 확인 않습니다 어떠했는지

file_exists('http://image.url.com/file.jpg'); 

잘 모르겠어요하지만 시도 가치가있다.

그렇지 않으면 몸을 다운로드하지 않도록 옵션을 CURL을 사용

curl_setopt($curl, CURLOPT_NOBODY, true); 

그것 또한 좋은 2 시간에 시간 제한을 설정 CLI보다는 브라우저를 통해이 스크립트를 실행하고 실행할 수 있도록 ..

시간 제한을 변경할 수 없으면 Gearman을 살펴보고 브라우저로 스크립트를 치고 작업을 보내십시오.

업데이트

당신은 옵션이 시간 제한 설정할 수 있습니다, "25까지 셀"필요가 없습니다 :

CURL : http://php.net/manual/en/function.curl-setopt.php - CURLOPT_CONNECTTIMEOUT

string file_get_contents (string $filename 
     [, bool $use_include_path = false 
     [, resource $context [, int $offset = -1 [, int $maxlen ]]]]) 

사용 $context를 :

resource stream_context_create ([ array $options [, array $params ]]) 
조합에서

stream_set_timeout로 :

bool stream_set_timeout (resource $stream , int $seconds [, int $microseconds = 0 ]) 

난 강력하게 스크립트가 빠른 배를 실행할 수 있도록 옵션 NOBODY 및 타임 아웃 CURL을 사용하는 것이 좋습니다 및 시간 제한을 설정 (25 너무 많은 방법입니다, 5 이하의 것을 사용).

CURL도 Keep-Alive, file_get_contents을 사용하지 않습니다.

0

당신이 정말로 당신이 25 후 스크립트를 종료해야하는 경우 스크립트가 실행되는 시간을 결정하기 위해 PHP를 micrtotime 또는 시간 기능을 사용할 수 있도록하고 싶은 경우 초. 이 그들을 위해 문서 항목은 다음과 같습니다 http://php.net/timehttp://php.net/microtime