如何使用PHP加载多个外部文件 - 快速?

Does anyone know what the best (or a really good) way is to load external files (about 10-20) from an api with performance in mind. Each session has different content. Currently I try "file_get_contents" but experience serious performance issues. I'm not really familiar with Curl but it seems performance wise to beat the good old PHP way. Any ideas/examples?

You could also use curl multi to grab multiple files at once, there is a tutorial here:

http://www.phpied.com/simultaneuos-http-requests-in-php-with-curl/

<?php
//Copy & pasted from the above link
function multiRequest($data, $options = array()) {
  // array of curl handles
  $curly = array();
  // data to be returned
  $result = array();
  // multi handle
  $mh = curl_multi_init();
  // loop through $data and create curl handles
  // then add them to the multi-handle
  foreach ($data as $id => $d) {
    $curly[$id] = curl_init();
    $url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d;
    curl_setopt($curly[$id], CURLOPT_URL,            $url);
    curl_setopt($curly[$id], CURLOPT_HEADER,         0);
    curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1);
    // post?
    if (is_array($d)) {
      if (!empty($d['post'])) {
        curl_setopt($curly[$id], CURLOPT_POST,       1);
        curl_setopt($curly[$id], CURLOPT_POSTFIELDS, $d['post']);
      }
    }
    // extra options?
    if (!empty($options)) {
      curl_setopt_array($curly[$id], $options);
    }
    curl_multi_add_handle($mh, $curly[$id]);
  }
  // execute the handles
  $running = null;
  do {
    curl_multi_exec($mh, $running);
  } while($running > 0);
  // get content and remove handles
  foreach($curly as $id => $c) {
    $result[$id] = curl_multi_getcontent($c);
    curl_multi_remove_handle($mh, $c);
  }
  // all done
  curl_multi_close($mh);
  return $result;
}
?>

<?php
$data = array(
  'http://search.yahooapis.com/VideoSearchService/V1/videoSearch?appid=YahooDemo&query=Pearl+Jam&output=json',
  'http://search.yahooapis.com/ImageSearchService/V1/imageSearch?appid=YahooDemo&query=Pearl+Jam&output=json',
  'http://search.yahooapis.com/AudioSearchService/V1/artistSearch?appid=YahooDemo&artist=Pearl+Jam&output=json'
);
$r = multiRequest($data);

echo '<pre>';
print_r($r);
/*
Array
(
    [0] => {"ResultSet":{"totalResultsAvailable":"633","totalResultsReturned":...
    [1] => {"ResultSet":{"totalResultsAvailable":"105342","totalResultsReturned":...
    [2] => {"ResultSet":{"totalResultsAvailable":10,"totalResultsReturned":...
)
*/
?>

Or curl php docs http://www.php.net/manual/en/function.curl-multi-init.php

file_get_contents is probably the fastest method because it only requires one function call in PHP, whereas other methods such asfopen/fread/fclose take multiple calls, as does cUrl.

However fopen has the advantage of not requiring RAM equal to or greater than the file size, because you can handle the file piece by piece.

Overall, file_get_contents is a good general-purpose funciton, but depending on circumstantial influences you may need a different option.