2012-06-08 3 views
0

내가 웹 사이트 PHP 페이지 (getdata.php)를 작성하여 특정 웹 사이트 페이지의 내용을 cUrl로 가져 오는 경우, 유용한 정보를 txt 파일이나 데이터베이스에 저장한다고 가정 해 봅시다. 약 백만 페이지가 있기 때문에 getdata.php웹 스크래핑 페이지를 지속적으로 작동시키는 방법

의사 코드,

min = get latest search id from database 
max = 1.000.000 (yes one million different pages) 

while (min < max) { 

    url = "http://www.website.com/page.php?id=".$min 
    content = getContentFromURL(url) 
    saveUsefulInfoToDb(content) 
    min++ 
    set latest search id as min in database 
} 

그것은 였는지를이, 괜찮아요,

    브라우저에
  1. 열기 getdata.php
  2. 을 기다립니다 여전히 대기 긁힐 것이다.
  3. 대기
  4. 그리고 마지막으로 시간 초과를 요청하십시오.
  5. 그래서 문제가 내가이 합리적인 였는지를 만들 수있는 방법을 몰라

실패. 브라우저에서 페이지를 열고 URL 스크랩을 끝내기를 기다리는 중입니다. 정말 나쁜 습관이라고 생각합니다.

cron과 같은 백그라운드에서 getdata.php를 실행 가능하게 만들 수 있습니까?

가장 좋은 방법은 무엇입니까?

감사합니다. 코드

set_time_limit(0); 
ignore_user_abort(true); 

의 상단에

+1

왜 크론 작업을 할 수 없습니까? –

답변

2

사용 그런 다음 각 하루마다가 필요 그것을 불에 크론를 사용합니다. 당신은 이것이 웹 페이지가 아닌 백그라운드 프로세스가되기를 확실히 원합니다. 이 두 줄은 웹 페이지 또는 cmd 줄 스크립트로 무기한 실행될 수 있습니다. 웹 페이지로 만들려면 나는이 여러 번 수행 한 이후 여전히

0 0 * * * /usr/bin/curl "http://yoursite.com/getdata.php" >> "/var/www/errors.log" 

같은 라인에 '불'을 해제 조언의 약간은 cron을 사용할 수 있습니다 확실히 로깅 기능을 파일을 인쇄하여 실행 중 무엇을하는지 볼 수 있거나 PHP 파일에 가시성 및 프로그램이 없으므로 킬 스위치를 사용하여 유닉스 상단 또는 재시작 아파치를 사용할 필요없이 실행을 중지하도록 지시 할 수 있습니다. 킬 시간에 하드 코드를 작성하는 것이 좋습니다. 특정 시간 후에 실행이 하루 이상 지속되고 두 번째 인스턴스가 시작되고 한 번에 여러 번 실행되면 중지됩니다.

3

@hackartists 대답 외에도 브라우저를 통해이 PHP 페이지를 호출하지 않도록 추가 할 것입니다. 대신,

일정 GetData의 수 있어야 브라우저

에 명령 줄

http://www.php.net/manual/en/features.commandline.introduction.php

열기 getdata.php에서를 호출합니다.cron을 사용하여 명령 줄에서 실행하는 PHP

또한 성공 또는 실패를 기록하여 로그 파일 모니터링을 설정하여 웹 스크래핑 작업이 실패 할 때를 알 수 있습니다 (결국, 앉아 싶지는 않습니다. 매일 브라우저 앞에서 직접 모니터하고 모니터).

관련 문제