Я смотрел PHP-документы для fsockopen и еще много чего, и они говорят, что вы не можете использовать filesize () в удаленном файле, не делая никаких сумасшедших вещей с ftell или чем-то (не уверен, что они сказали точно), но я хорошо подумал о как это сделать:
$file = file_get_contents("http://www.google.com"); $filesize = mb_strlen($file) / 1000; //KBs, mb_* in case file contains unicode
Будет ли это хорошим методом? Это было так просто и полезно использовать в то время, просто хочу получить какие-либо мысли, если это может столкнуться с проблемами или не быть истинным размером файла.
Я только хочу использовать это на тексте (веб-сайтах), а не бинарно.
Этот ответ требует 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); } ?>
Вы должны посмотреть на функцию get_headers () . Он вернет хэш HTTP-заголовков из HTTP-запроса. Заголовок Content-length
может лучше оценивать размер фактического контента, если он присутствует.
При этом вы действительно должны использовать либо curl, либо streams для выполнения запроса HEAD вместо GET. Должна присутствовать Content-length
, что избавит вас от передачи. Это будет быстрее и точнее.
он будет извлекать весь файл и затем вычислять размер файла (а не длину строки) из извлеченных данных. обычно filesize может сообщать файлы непосредственно из файловой системы, не читая сначала весь файл.
поэтому это будет довольно медленным и будет каждый раз извлекать весь файл, прежде чем сможет получить размер файла (длина строки