Какой самый быстрый способ прочитать файл в PHP?

Какой самый быстрый способ прочитать файл в PHP? В частности, я читаю URL, я читаю файл с помощью fgets, размер URL составляет около 1 МБ, а чтение 5-ти URL-адресов заняло у меня не более 20 секунд. Я получаю только строку строки, которая находится в конце части файла. Я фактически использую fseek, чтобы переместить указатель на конец URL, но он работает только с файлами (не с URL). Какие-нибудь блестящие идеи?

вот мой пример кода

$fp=fopen("http://url.com", "r");
if(is_bool($fp)){
    exit;
}
while(!feof($fp)) {
    $data = fgets($fp);
    if($data=="this is what i've wanted")
    {
        // codes...
    }
}
fclose($fp);

3 ответа

Решение

В этой ситуации вы не можете просто пропустить весь контент. Способ передачи данных по сети заключается в том, что вы определяете длину контента и должны читать все до той части, которую вы хотите.

Короче говоря, вы не можете просто пропустить это. Просто прочитайте это, возьмите то, что вам нужно, и продолжайте жить.

* Примечание. Ну, вы можете, если ресурс поддерживает частичные запросы на контент и диапазон. Скорее всего, не.

Вы можете использовать cUrl с поддержкой возобновления загрузки, чтобы получить только последнюю часть файла:

function retrieve_tail($remoteFile, $localFile = null, $bytes = 1000) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RANGE, intval($bytes)."-");
  $fp = fopen($localFile, "w+");
  curl_setopt($ch, CURLOPT_FILE, $fp);
  $result = curl_exec($ch);
  curl_close($ch);
  fclose($fp);
  return $result;
}

Затем позвоните:

  $result = retrieve_tail("http://url.com", "local_copy.txt", 20000);
  print_r($result);

И у вас будет то, что вы хотите в указанном вами локальном файле. Кроме того, вы можете установить

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

чтобы получить содержимое напрямую.

Используйте CURL для получения удаленного URL:

function curlRequest($url)
{

    $curl = curl_init();
    curl_setopt($curl,  CURLOPT_URL,                $url);
    curl_setopt($curl,  CURLOPT_RETURNTRANSFER,     true);
    curl_setopt($curl,  CURLOPT_FOLLOWLOCATION,     true);
    curl_setopt($curl,  CURLOPT_BINARYTRANSFER,     true);
    curl_setopt($curl,  CURLOPT_ENCODING,           true);
    curl_setopt($curl,  CURLOPT_HEADER,             false);

    $a = new stdclass;
    $a->body            = curl_exec         ($curl);
    $a->status          = curl_getinfo      ($curl,     CURLINFO_HTTP_CODE);
    $a->effectiveURL    = curl_getinfo      ($curl,     CURLINFO_EFFECTIVE_URL);

    curl_close ($curl);

    return $a;
}
Другие вопросы по тегам