2013-07-03 2 views
2

내 응용 프로그램을 공유 호스트의 Siteground에서 호스팅했습니다. 나는 매일 밤 PHP 파일을 실행하는 크론 작업을 빌드했다. 문제는 그 파일에 85 번 코드를 실행하는 메인 루프가 있다는 것입니다. 보다 정확하게는 데이터 배열을 가져 와서 조작합니다. 이것은 85 번 수행됩니다. 이런 뭔가 : 촬영 된 데이터의 다수의 조작이 있기 때문에각 루프에 실행 시간을 30 초로 지정

<?php 
$main_array = array("//85 elements"); 
foreach ($main_array as $var){ 

$array1 = array ("//a lot of data"); 
//manipulate array1 

} 
?> 

, 이것은 2 분 5 '완전히 실행할 걸린다. 어쩌면 .. 각 "foreach"루프에 대해 실행 시간을 30 초로 설정하는 방법이 있습니까 ??

+1

코드를 보여주십시오. 나는 우리가 공연을 도울 수 있다고 생각한다. – sectus

+0

30 초 후에 어떤 일이 발생해야합니까? 스크립트를 건너 뛰시겠습니까? – abimelex

+0

배열을 조작하는 것이 서로 분리되면'$ main_array'를 더 작은 것들로 나누고 한번에 각 덩어리를 5 번 처리 할 수 ​​있습니다. –

답변

0
set_time_limit(999); // some number you want 

이 시도 advace에 ..

감사를 나는 전용 호스트로 이동할 수 없습니다, 그래서 내가 다른 무엇인가를 파악해야합니다. 코드의 상단에 set_time_limit(0); 기능의 PHP에서

+0

시도, 동일한 결과 :/답변을 주셔서 감사! – Mirela

1
set_time_limit(30); //Enter the value in seconds 

확인 set_time_limit()

+0

죄송합니다.이 방법으로도 문제가 해결되지 않았습니다. :/ – Mirela

1

만들기 사용.

PHP Manual

이 최대 시간을 초 단위로 설정

는 스크립트가 파서 종료되기 전에 를 실행할 수 있습니다. 이는 서면 스크립트가 서버를 연결하지 못하게 막는 데 도움이됩니다. 명령 줄에서 PHP를 실행하면 기본 설정은 최대 실행 시간은 시스템 호출, 스트림에 의해 영향을받지 않습니다 0

경우 기본 설정은 30 입니다 작업 등 이상은 set_time_limit()를 참고하세요 세부.

안전 모드에서 실행할 때 ini_set()을 사용하여이 설정을 변경할 수 없습니다. 유일한 해결책은 안전 모드를 끄거나 php.ini에서 시간 제한을 변경하는 것입니다.

웹 서버에는 의 PHP 실행을 방해 할 수있는 다른 시간 초과 구성이있을 수 있습니다. Apache에는 Timeout 지시문이 있으며 IIS에는 CGI 시간 초과 기능이 있습니다. 둘 다 기본값이 300 초입니다. 자세한 내용은 웹 서버 설명서를 참조하십시오.

+0

엄격한 자원 정책이있는 공유 호스트에서는'set_time_limit'이 비활성화됩니다. –

+0

이 세트의 전체 스크립트 실행 시간 제한은 생각하지만 각 루프에 대해서만 설정하고 싶습니다. – abimelex

+0

@abimelex 네 말이 맞아. 각 루프마다 설정하고 싶습니다. 전체 스크립트가 아닙니다. ..h 그리고 내가 "그녀"인 방법으로 :) – Mirela

2

각 루프의 실행 시간을 평가하려면 microtime()을 사용하십시오.

<?php 
$main_array = array("//85 elements"); 
foreach ($main_array as $var){ 
    $time_start = microtime(true); 
    $array1 = array ("//a lot of data"); 
    //manipulate array1 
    $time_end = microtime(true); 
    $time = $time_end - $time_start; 
    //check sometimes in your script whether execution time is reached 
    if($time > 30){ 
    break; //or continue; which you want 
    } 
} 
?> 

http://php.net/manual/en/function.microtime.php

하지만 실행 시간이 정말 오래, 신 스크립트는 어떻게 계산되고 있습니까? 어쩌면 그렇게 할 수있는 더 효과적인 방법이있을 것입니다 ...

+0

두꺼운 라인에서, 나의 스크립트는 다음과 같이 smth을한다 : 각 사용자 (main_array (user1, user2..user85);) -> 서버로부터 데이터를 얻는다 -> ('3', '4, '99', 3); '99'가 점프로 간주되는 경우) -> 데이터 정규화 -> 다시 점프 제거 -> db에 삽입. 그러나 조작해야 할 데이터가 많이 있습니다. 하나의 루프 (한 명의 사용자) 만 실행하려면 6 초가 걸립니다. – Mirela

+0

전체 스크립트 또는 적어도 오랜 시간이 걸리는 부분을 게시 할 수 있습니까? (당신의 남성을 고려해 죄송합니다, 나는 당신의 이름을 읽지 못해서 죄송합니다.) – abimelex

+0

당신의 해결책을 시도했지만 효과가 없었습니다. (제 코드를 게시 할 것이지만 너무 길어요. .. 당신은 여전히 ​​의견을 말할 수 있을까요? .. 잘 모르겠 stackover 작동 방식 :/ – Mirela

관련 문제