PHP: получить удаленный размер файла с помощью strlen? (HTML) - PullRequest
2 голосов
/ 15 июля 2010

Я просматривал PHP документы для fsockopen и еще много чего, и они говорят, что вы не можете использовать filesize () для удаленного файла без каких-либо сумасшедших действий с ftell или чем-то еще (не уверен, что именно они сказали), но у меня былхорошая мысль о том, как это сделать:

$file = file_get_contents("http://www.google.com");
$filesize = mb_strlen($file) / 1000; //KBs, mb_* in case file contains unicode

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

Я хочу использовать это только на тексте (веб-сайтах)путь не бинарный.

Ответы [ 3 ]

5 голосов
/ 15 июля 2010

Для этого ответа требуется PHP5 и cUrl. Сначала проверяются заголовки. Если Content-Length не указан, он использует cUrl для его загрузки и проверки размера (хотя файл нигде не сохраняется - только временно в памяти).

<?php
echo get_remote_size("http://www.google.com/");

function get_remote_size($url) {
    $headers = get_headers($url, 1);
    if (isset($headers['Content-Length'])) return $headers['Content-Length'];
    if (isset($headers['Content-length'])) return $headers['Content-length'];

    $c = curl_init();
    curl_setopt_array($c, array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => array('User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3'),
        ));
    curl_exec($c);
    return curl_getinfo($c, CURLINFO_SIZE_DOWNLOAD);
}
?>
3 голосов
/ 15 июля 2010

Вы должны взглянуть на функцию get_headers () .Он вернет хеш HTTP-заголовков из HTTP-запроса.Заголовок Content-length может лучше судить о размере реального контента, если он присутствует.

При этом вам действительно следует использовать потоки curl или 1009 * сделать запрос HEAD вместо GET.Content-length должен присутствовать, что экономит вам перевод.Это будет быстрее и точнее.

0 голосов
/ 15 июля 2010

будет извлекать весь файл и затем вычислять размер файла (а точнее длину строки) из найденных данных. обычно размер файла может определять размер файла непосредственно из файловой системы, не читая сначала весь файл.

так что это будет довольно медленно, и каждый раз будет извлекать весь файл, прежде чем сможет получить размер файла (длина строки

...