2013-02-21 3 views
0

나는 웹 서비스를 사용하여 prestashop 설치에서 많은 정보를 가져와야하는 큰 스크립트를 PHP로 작성했으며,이 스크립트는 "섹션"으로 작성되었습니다. 카테고리를 임포트하는 함수가 있고, 또 다른 하나는 임포트하는 함수이고, 다른 하나는 임베디드를 호출하는 함수입니다. 메인 스크립트에서 약 7 - 10 개의 함수가 호출됩니다. 기본적으로이 스크립트는 함수에서 다음 함수로 전달되는 약 1 시간 동안 실행되어야한다고 가정하고 마지막 함수에 도착한 후 일부 값을 반환하고 다음날 밤까지 중지합니다.서버가 오래 실행 스크립트에서 실행을 차단하는 것을 막는 방법

내가 그것을 더 잘 될 수 있는지 이해하고자하는

:

1) 30 분 시간 제한마다 나는 새로운 기능을 입력 부과 (이 체인을)

2) 시간 제한을 방지 할 수 있습니다 단일 함수 호출 (물론 제한 시간)이있는 각 페이지

또는 다른 생각 ... 나는 다음과 같이 말합니다. 함수가 호출되었는지 (아마 전역 변수를 사용합니까?) 알고 있습니다. 서버가 순서대로 기능을 실행하는지 확인하십시오 (페이지 체인).

나는 명확한 희망을 가지고 있기를 바랍니다. 그렇지 않으면 질문을 업데이트 할 것입니다.

편집 : 스크립트는 페이지를 호출하는 다른 서버에서 실행되고 다른 서버는 나와 관련이 없으므로이 페이지가 호출되었음을 알게됩니다 (이 페이지는 계속 호출 됨) 페이지)하지만 어쨌든 나는 그것에 대한 통제권이 없다.

+1

어떻게이 PHP 스크립트를 실행합니까? crontab에 wget? –

+0

스크립트를 트리거하는 또 다른 웹마 스터는 ... 스크립트에서 브라우저를 fisically 실행하는 서버에 스크립트가 있다는 것을 "추측합니다"...하지만 확실하지 않습니다. –

답변

1

장기간 실행되는 스크립트의 경우 명령 줄을 통해 실행합니다. 아마도 cronjob을 사용하여 실행할 수 있습니다. 그것이 외부에서 트리거되면, (예를 들어 데이터베이스에) 새로운 행을 삽입하여 임의의 변수 입력 매개 변수와 함께 실행해야 함을 나타내는 작업 대기열을 작성합니다. 그런 다음 백그라운드 작업이 실행됩니다 - 예 : 5 분마다 대기열에 새 작업이 있는지 확인하십시오. 없다면 그냥 나가십시오. 있다면, 작업이 시작되었음을 표시하고 처리를 시작하십시오. 완료되면 완료되었음을 표시하십시오.

작업 1 시간은 비록 1 시간입니다. 당신은 그것을 최적화하기 위해 할 수있는 일이 없습니까?

set_time_limit(seconds); 

을 또한 장기 실행 스크립트 당신은 더 많은 메모리를 필요로 : 당신이 사용하여 원하는대로

+0

이것은 내가 실제로 노력하고있는 soultion입니다. 문제는 서버가 공유 된 "일반 호스팅"서버이고 전용 서버가 아니기 때문에 cronjobs를 실행할 수있는 권한이 없다는 것입니다. 당신이 설명하는 것과 같은 것을 구현하려고하는 m (나는 더 많은 의견을 원하기 때문에 답변으로 표시하지 않을 것입니다. 더 이상 대답이 없으면 가까운 장래에 표시 할 것입니다) –

+0

알아요. 그 1 시간은 힘든 일입니다 ... 나는 이것을 여러 단계로 나누려고 노력하고 있습니다 ... –

0

당신은 많은 스크립트의 실행을위한 시간 제한을 늘릴 수 있습니다. 당신은 사용하여 메모리 제한을 증가시킬 수있다 : 당신이 있는지 확인해야

ini_set('memory_limit','20M'); 

그리고 두 번째 다른 점은 자동으로 장기 실행을 죽일 것이다 당신에게 서버를 공유 서버를 사용하는 경우 때문에 전용 서버에서 스크립트를 실행하는 것입니다 스크립트.