Какой самый быстрый способ прочитать файл в 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;
}