Belirli bir siteden tüm bağlantıları indiren bir PHP dosyası oluşturma

4 Cevap php

Geçenlerde benim firefox içine "DownThemAll" eklenti yüklü ve ben (bir açıkkod First Person Shooter için harita dosyaları) pk3 dosyaların büyük miktarda indirmek izledim ben PHP ile aynı yapabileceğini, merak ettim.

İşte Düşünüyorum ne:

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

Evet bu konuda bildiğim kadarıyla kazanılmış ettik bulunuyor. Sadece akımı vasıtasıyla bunu yapmak için bir yüklemeyi başlatmak için wheter merak ediyorum ... Ben gerçekten bu maddenin etrafında yolumu bilmiyorum, ben genelde PHP ile ne değil, ama benim ilgi tetikleniyor.

Yani bu sorunu çözmek için nasıl bilir kimse var mı?

4 Cevap

Ben doğru yönde size atarım.

cURL indirme ve bağlantı tüm yolları almak için bir düzenli ifade için.

Ama dikkat, bir sitede bir bağlantı göreli bir bağ olabilir. Yani bunun için kontrol etmeniz gerekir.

Bu yapmak (ya da en azından yardımcı) olacak:

$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;
}

Bu önemsiz bir sorun değil. Eğer "Sistem" komutuna erişiminiz varsa Ancak, wget Bu görevi gerçekleştirmek için kullanabilirsiniz. Bu sayfaları boyunca bağlantıları takip özyinelemeli indirme fonksiyonları sunuyor ve bunu bağlantılar ve çok daha takip etmeli derinliğini kontrol edebilirsiniz. Ayrıca kimlik doğrulamasını destekler ve http ve ftp gibi çeşitli protokolleri.

Php fread docs:

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

ya da sadece kullanabilirsiniz:

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

Yani:

  1. Bağlantıların listesini içerir sayfasını indir
  2. Bağlantılar için bu liste ayrıştırmak (using regex)
  3. HDD her bağlantının indirin ve yazmak (fwrite) içeriği.

İpucu: Bu fonksiyonların her biri için php belgelerini denetleyin, oldukça çok güzel örnekler vardır.