2013-01-25 10 views
0

에는 브라우저에서 실행중인 몇 가지 사용자 정의 PHP 스크립트가 있습니다. 스크립트는 주어진 URL을 스크랩하고 브라우저 또는 엑셀 파일로 테이블 형식으로 데이터를 반환합니다. . (선택 사항)서로 다른 간격으로 마스터 스크립트에서 여러 PHP 스크립트를 실행하십시오.

스크립트에 3 개 이상의 URL을 추가 할 때마다 네트워크 연결 오류 (피어에 의한 연결 재설정)가 발생하는 데는 여러 가지 이유가있을 수 있습니다. 그런 다음 데이터가 테이블에 의해 반환 된 경우 결과가 잘리고 Excel 파일에서 다운로드 파일이 특정 지점에서 중지됩니다 "네트워크 오류"

스크립트는 내 로컬 컴퓨터 (XAMPP)에서 실행 중이며 테스트를 거쳤습니다 여러 라이브 서버와 동일한 문제가 발생했지만 라이브 서버에서는 연결이 오래 지속되는 것으로 나타났습니다. 호스팅 제공 업체로부터 많은 메모리 (+ 1GB RAM)를 사용하면서 스크립트가 더 이상 서버에서 실행되어서는 안되며 속도가 느려지므로 경고합니다. 내 localhost에서 테스트를 재개한다고 가정합니다.

질문 :

  1. 오류 "피어 다시 연결"을 방지 할 수있는 구성/조언이 있습니까?

  2. 나는 주 단위로 다룰 80 개 이상의 URL (동일한 도메인)을 가지고 있습니다. 스크립트를 80 개의 스크립트 (각각 1 개의 URL)로 분할하고 각각을 독립적으로 실행하십시오. 별로 실용적이지는 않지만, 좋은 방법은 무엇입니까/60 초의 시간 간격으로 마스터 스크립트에서 다른 스크립트를 차례로 실행하는 PHP 스크립트입니까?

    다음

나는 URL을 입력 한 코드 조각 :

  1. 로컬 호스트 :

    <?php 
    //to do link 
    $OutPut_Excel = $_GET['xls'];// 0 web page or 1 output excel 
    $show_Name = $_GET['show'];// 0 or 1 
    $urls = "http://www.URL1.com; 
    http://www.URL2.com; 
    http://www.URL3.com; 
    http://www.URL4.com; 
    http://www.URL5.com; 
    http://www.URL6.com; 
    http://www.URL7.com 
    "; 
    //output excel 
    if($OutPut_Excel == "1") 
    { 
    header("Content-Type: application/vnd.ms-execl;charset=iso-8859-1"); 
    header("Content-Disposition: attachment; filename=data.xls"); 
    header("Pragma: no-cache"); 
    header("Expires: 0"); 
    } 
    
    set_time_limit(0); 
    ini_set('memory_limit', '-1'); 
    ini_set('display_errors',true); 
    
    
    //output html 
    if($OutPut_Excel == "0") 
    { 
    ?> 
    
    <html> 
    <head> 
    title>scraper</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
    </head> 
    
    <body> 
    <?php 
    } 
    
    if($OutPut_Excel == "0") 
    { 
    if($show_Name) 
    { 
        $nametext = '<td>Name</td>'; 
    } 
    echo "<table border='1'><tr><td>Name</td><td>Code</td> 
    <td>City</td><td>Address</td><td>E-mail</td><td>Phone/td> <td>Url</td>$nametext</tr>"; 
    

    ECT는 ......

    스크립트로 실행되는 경우 /scraper.php?xls=0 & show = 1 | 브라우저의 데이터 표시

  2. localhost/scraper.php? xls = 1 & show = 1 | Excel 파일로 다운로드 한 데이터

데이터가 연결 오류로 잘리지 않는 한 어떤 방법으로도 문제가 없습니다.

나는 초심자이고 PHP를 독자적으로 배우는 동안 해결책을 찾는데 도움을 주시면 감사하겠습니다. 잘 부탁드립니다

, 주권 두 번째 질문에 대해서는

+0

1GB RAM? 변수를 올바르게 관리하고 있습니까? 어쨌든 스크립트가 사용할 수있는 RAM의 양을 제한하는 php.ini의 설정 매개 변수가 있습니다. 실행 시간에 또 다른 것이 있습니다. 나는 그것이 당신의 대본을 멈추게하는 것이라고 생각합니다. – Naryl

+0

감사합니다 Naryl, 나는 그것을 봐야 할 것입니다 –

+0

나는 실행 시간과 메모리 제한을 변경했지만 여전히 같은 문제가 있습니다. 호스팅 서버에서 연결을 재설정하십시오. 모든 스크립트를 차례로 실행하라는 힌트가 있습니까? –

답변

0

, 당신은 두 번째 스크립트를 실행하는 루프를 작성하거나 URL을 검색하는 기능을 할 수있다. 스크래핑 할 모든 링크가 포함 된 배열을 가져야하며 각 스크립트의 각 함수에 대해 스크립트를 실행해야하며 각 스크립트는 실행 후 60 초가 지나야합니다.

$links = array('URL1', 'URL2', ...); 
foreach ($link as $l) { 
    runScraper($l); 
    sleep(60); 
} 

runScraper 메서드를 호출 할 수있는 시스템() 또는 간부() 다른 PHP 과정에서 스크립트를 실행하려면이되지 테스트 내 머리에서 불과 샘플 코드입니다.

발생하는 오류에 대해서는 서버에 과도한 요청이 있기 때문일 수 있습니다. 짧은 시간 동안 N 페이지 요청 후 도달하려는 서버가 사용자를 차단할 수 있습니다.

관련 문제