2014-01-26 2 views
2

여러 URL의 파일에 페이지 콘텐츠를 저장하려고합니다.여러 URL의 file_get_contents

는 처음에는 내가 파일을 saveving를 들어 배열

$site = array( 
     'url' => 'http://onesite.com/index.php?c='.$row['code0'].'&o='.$row['code1'].'&y='.$row['code2'].'&a='.$row['cod3'].'&sid=', 'selector' => 'table.tabel tr' 
    ); 

에서 사이트 URL이 나는이 시도 :

foreach($site as $n) { 
$referer = 'reffername'; 


$header[] = "Accept: text/xml,application/xml,application/json,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; 
$header[] = "Cache-Control: max-age=0"; 
$header[] = "Connection: keep-alive"; 
$header[] = "Keep-Alive: 300"; 
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; 
$header[] = "Accept-Language: en-us,en;q=0.5"; 

$opts = array('http'=>array('method'=>"GET", 
          'header'=>implode('\r\n',$header)."\r\n". 
          "Referer: $referer\r\n", 
          'user_agent'=> "Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.25 (jaunty) Firefox/3.8")); 
$context = stream_context_create($opts); 

$data = file_get_contents($site["url"], false, $context); 

$file = md5('$id'); 

file_put_contents($file, $data); 
$content = unserialize(file_get_contents($file)); 
} 
+0

그것은 더 나은 기능을 동시에 여러 파일을 다운로드하려면 – gskema

+0

@ Gytis Šk 좋아,하지만 어떻게 배열에서 그것을 할 수있는 저장 ? –

답변

7

기본 컬 멀티 스크립트 : 당신이 curl_multi를 사용하는 경우

// Your URL array that hold links to files 
$urls = array(); 

// cURL multi-handle 
$mh = curl_multi_init(); 

// This will hold cURLS requests for each file 
$requests = array(); 

$options = array(
    CURLOPT_FOLLOWLOCATION => true, 
    CURLOPT_AUTOREFERER => true, 
    CURLOPT_USERAGENT  => 'paste your user agent string here', 
    CURLOPT_HEADER   => false, 
    CURLOPT_SSL_VERIFYPEER => false, 
    CURLOPT_RETURNTRANSFER => true 
); 

//Corresponding filestream array for each file 
$fstreams = array(); 

$folder = 'content/'; 
if (!file_exists($folder)){ mkdir($folder, 0777, true); } 

foreach ($urls as $key => $url) 
{ 
    // Add initialized cURL object to array 
    $requests[$key] = curl_init($url); 

    // Set cURL object options 
    curl_setopt_array($requests[$key], $options); 

    // Extract filename from URl and create appropriate local path 
    $path  = parse_url($url, PHP_URL_PATH); 
    $filename = pathinfo($path, PATHINFO_FILENAME)).'-'.$key; // Or whatever you want 
    $filepath = $folder.$filename; 

    // Open a filestream for each file and assign it to corresponding cURL object 
    $fstreams[$key] = fopen($filepath, 'w'); 
    curl_setopt($requests[$key], CURLOPT_FILE, $fstreams[$key]); 

    // Add cURL object to multi-handle 
    curl_multi_add_handle($mh, $requests[$key]); 
} 

// Do while all request have been completed 
do { 
    curl_multi_exec($mh, $active); 
} while ($active > 0); 

// Collect all data here and clean up 
foreach ($requests as $key => $request) { 

    //$returned[$key] = curl_multi_getcontent($request); // Use this if you're not downloading into file, also remove CURLOPT_FILE option and fstreams array 
    curl_multi_remove_handle($mh, $request); //assuming we're being responsible about our resource management 
    curl_close($request);     //being responsible again. THIS MUST GO AFTER curl_multi_getcontent(); 
    fclose($fstreams[$key]); 
} 

curl_multi_close($mh); 
+0

고마워, 지금 해봐. –

+0

'''curl_multi_close ($ mh);''' – jaggedsoft

+1

위대한 작품! 'curl_multi_getcontent ($ request)'부분에 대해 정말 고마워요.) –