2010-01-27 5 views
6

숫자의 순열을 수행하는 PHP 언어로 스크립트를 작성해야합니다. 하지만 PHP의 실행 시간 제한은 60 초로 설정되어 있습니다. 스크립트를 실행하여 60 초 이상 실행해야하는 경우 서버에 의해 중단되지 않도록 할 수 있습니다. 나는 PHP에서 최대 실행 시간 제한을 변경할 수 있지만 스크립트의 실행 시간을 미리 알 필요가없는 다른 버전의 것을 듣고 싶습니다.PHP 실행 시간 제한을 피하십시오

친구가 로그인하여 서버에서 자주 로그 아웃 할 것을 권했지만, 어떻게해야하는지 잘 모릅니다.

어떤 조언을 환영합니다. 예제 코드가 유용 할 것입니다.

감사합니다.

먼저 숫자를 입력해야하는데 25라고 말하십시오.이 스크립트가 실행되면 다음을 수행해야합니다 : 모든 숫자 < = 25에 대해 현재 생성 된 숫자로 파일을 생성합니다 단계; 다음 번호는 미리 만들어진 파일을 열어서 열린 파일의 줄에 또 다른 파일베이스를 생성합니다. 이 작업은 오래 걸리므로 서버에 의해 손상되지 않은 스크립트를 피할 필요가 있습니다.

답변

2

@emanuel :

당신의 친구가 당신을 말했을 때 같아요. "친구가 로그인 서버에서 자주 로그 아웃 저를 제안하지만, 내가 어떻게이 일을 아무 생각이 없다", 그/그녀가해야 "스크립트 계산을 x 작업으로 분할하여 따로 실행"을 의미했습니다.

예를 들어이 스크립트를 사용하면 150 번 실행하여 150을 얻을 수 있습니다! (인자 화)하고 결과를 보여

// 스크립트 이름 : calc.php

<?php 

session_start(); 

if(!isset($_SESSION['times'])){ 

    $_SESSION['times'] = 1; 

    $_SESSION['result'] = 0; 

}elseif($_SESSION['times'] < 150){ 

    $_SESSION['times']++; 

    $_SESSION['result'] = $_SESSION['result'] * $_SESSION['times']; 

    header('Location: calc.php'); 

}elseif($_SESSION['times'] == 150){ 

    echo "The Result is: " . $_SESSION['result']; 

    die(); 

} 

?> 

BTW (@Davmuz) 만 유효한 기능이 아니라, 아파치 서버에서하고 set_time_limit() 함수를 사용할 수 있습니다 Microsoft IIS 서버에서.

+0

+1 본질적으로 내 대답의 클라이언트 측 구현 : 비트로 넣고 하나씩 실행하십시오. 그러나이 솔루션에서 브라우저가 닫히면 프로세스가 종료됩니다. –

+1

@turik 아래와 같이 주석을 달았습니다 :'$ _SESSION [ 'result'] = 1; –

0
set_time_limit(0) 
+0

그가 구체적으로 그가 이것을 원하지 않는다고 말한 것을 알고 있습니까? –

+0

이 질문에 대한 질문입니다 exaclty, 나는 루프의 모든 반복에서 예를 들어 set_time_limit (20) 사용하는 것이 더 좋을 것이라고 생각합니다. – svens

+0

@svens OP가 특별히 제한 시간을 변경하고 싶지 않다고 말하면서, 나는 그것이 아마도 최선의 방법 일 것이라고 동의합니다. –

0

당신은 파일로 직렬화는 큐에 확인하려는 전화, 넣어 (또는 메모리 캐시를?) 작업이 완료 될 때 시도 할 수 있습니다. 그런 다음 CRON 데몬을 사용하여 60 초마다이 대기열을 실행할 수 있으므로 계속 작업을 수행하고 작업을 완료합니다.

이 접근법의 단점은 파일 잠금과 같은 대기열에 추가하는 데 따른 문제이며, 결과가 즉시 필요한 경우 문제가 될 수 있습니다. Db에 물건을 추가하면 효과가있을 수 있습니다. 또한 매우 효율적이지 않습니다.

0

사용하고 set_time_limit (0)하지만 당신은 safe_mode가 비활성화 할 수 있습니다 : 나는 고정 된 시간을 (하고 set_time_limit (300)) 때문에 스크립트에 문제 (무한 루프 또는 메모리 누수)이있는 경우이 사용하는 것이 좋습니다 http://php.net/manual/en/function.set-time-limit.php 을 문제의 근원이 될 수 없다.

Apache와 같은 웹 서버에도 최대 시간 제한이 300 초이므로 변경해야합니다. 혜성 응용 프로그램을 원한다면 오랫동안 요청 시간을 가질 수있는 다른 웹 서버를 선택하는 것이 좋습니다.

무거운 알고리즘을 실행하는 데 긴 시간이 필요한 경우 다음과 같이 병렬 처리를 구현할 수도 있습니다. http://www.google.com/#q=php+parallel+processing 또는 입력 데이터와 컴퓨터를 cron 또는 기타 다른 외부 스크립트로 저장하십시오.

+0

제발, 당신이해야 할 일을 지정하면 응답이 더 정확할 수 있습니다. – Davmuz

관련 문제