2009-03-18 6 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... 
} 

うん、それはおよそ限り、私が得ているようです。私はちょうどストリームを介してそれを行うためのダウンロードを開始するwheaterを疑問に思っています...私はこの材料の周りに自分の道を実際には知らない、それは私が通常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; 
    } 
    
    関連する問題