2009-03-18 2 views
0

최근 Firefox 용 애드온 "DownThemAll"을 설치했으며 엄청난 양의 pk3 파일 (opensource First Person Shooter 용 맵 파일)을 다운로드하는 것을 보면서, , 나는 PHP로 같은 일을 할 수 있는지 궁금해.특정 사이트의 모든 링크를 다운로드하는 PHP 파일 만들기

는 여기에 내가 생각하고있는 작업은 다음과 같습니다

foreach(glob("http://www.someaddress.ext/path/*.pk3") as $link) { 
    //do something to download... 
} 

그래 그 정도까지 내가 들어 왔로합니다. 스트림을 통해 다운로드를 시작하기 위해 wheter가 궁금합니다.이 자료를 중심으로 내 방식을 알지 못합니다. 일반적으로 PHP에서하는 일이 아니지만 제 관심을 불러 일으 킵니다.

이 문제를 해결하는 방법을 알고있는 사람이 있습니까?

답변

3

나는 올바른 방향으로 당신을 던져 줄 것이다.

cURL 다운로드 및 링크의 모든 경로를 가져 오기위한 정규 표현식.

그러나 사이트의 링크는 상대 링크 일 수 있습니다. 그래서 당신은 그것을 확인해야합니다.

+0

는 "사이트에 링크가 상대 링크가 될 수 있습니다." realpath() 함수는 이것이 내가 생각하는대로 풀어야한다. 예? – Vordreller

+0

아니요, 경로가 원격 HTTP 경로이고 realpath()가 로컬 경로를 보여주기 때문입니다. –

0

사소한 문제는 아닙니다. 그러나 "시스템"명령에 액세스 할 수있는 경우 wget을 사용하여이 작업을 수행 할 수 있습니다. 재귀 적 다운로드 기능을 통해 페이지 전체의 링크를 추적 할 수 있으며 링크를 따라야하는 깊이 등을 제어 할 수 있습니다. 또한 인증 및 http 및 ftp를 포함한 여러 프로토콜을 지원합니다.

0
PHP는 FREAD 워드 프로세서에서

:

// For PHP 5 and up 
$handle = fopen("http://www.example.com/", "rb"); 
$contents = stream_get_contents($handle); 
fclose($handle); 

아니면 그냥 사용할 수 있습니다 : 그래서

$aaa = file_get_contents('http://www.example.com/'); 

: 링크의 목록

  • 그 목록을 구문 분석을 포함

    1. 다운로드 페이지 링크 (using regex)
    2. 각 링크의 내용을 HDD에 다운로드 (쓰기)합니다.

    팁 : 각 기능에 대한 PHP 설명서를 확인하십시오. 꽤 좋은 예제가 있습니다.

  • 1

    이 그것을 할 (또는 도움이 적어도됩니다) :

    $pageRaw = fread_url('www.example.com'); 
    
    //link extraction regex   
    preg_match_all ("/a[\s]+[^>]*?href[\s]?=[\s\"\']+". 
           "(.*?)[\"\']+.*?>"."([^<]+|.*?)?<\/a>/", 
           $pageRaw, &$matches); 
    
    $matches = $matches[1]; 
    
    foreach($matches as $link) 
    {  
        echo $link. '<br />'; 
    } 
    
    //falls back to fopen if curl is not there 
    function fread_url($url,$ref="") 
    { 
        if(function_exists("curl_init")){ 
         $ch = curl_init(); 
         $user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; ". 
             "Windows NT 5.0)"; 
         $ch = curl_init(); 
         curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); 
         curl_setopt($ch, CURLOPT_HTTPGET, 1); 
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
         curl_setopt($ch, CURLOPT_FOLLOWLOCATION , 1); 
         curl_setopt($ch, CURLOPT_FOLLOWLOCATION , 1); 
         curl_setopt($ch, CURLOPT_URL, $url); 
         curl_setopt($ch, CURLOPT_REFERER, $ref); 
         curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
         $html = curl_exec($ch); 
         curl_close($ch); 
        } 
        else{ 
         $hfile = fopen($url,"r"); 
         if($hfile){ 
          while(!feof($hfile)){ 
           $html.=fgets($hfile,1024); 
          } 
         } 
        } 
        return $html; 
    } 
    
    관련 문제