Чтение удаленного размера файла с использованием размера файла
Я прочитал руководство, что filesize() может рассчитать размер файла из удаленного файла. Однако, когда я пытаюсь сделать это с фрагментом ниже. Я получил ошибку PHP Warning: filesize(): stat failed for http://someserver/free_wallpaper/jpg/0000122_480_320.jpg in /tmp/test.php on line 5
Вот мой фрагмент:
$file = "http://someserver/free_wallpaper/jpg/0000122_480_320.jpg";
echo filesize( $file );
Оказывается, я не могу использовать HTTP для filesize(). Дело закрыто. Я буду использовать фрагмент здесь как решение для обхода.
5 ответов
filesize
не работает для HTTP - это зависит от stat
, который не поддерживается для протокола HTTP(S).
Справочная страница PHP для fileize говорит:
Refer to List of Supported Protocols/Wrappers for a listing of which wrappers support stat() family of functionality.
Это не означает, что каждый протокол / оболочка работает "из коробки" с filesize
, Вы всегда можете обойти это, выполнив полный GET удаленного URL-адреса и рассчитав размер возвращаемых данных. Если вы можете получить заголовок Content-Length, вы можете попробовать запрос HEAD, чтобы избежать передачи данных файла.
Вы можете получить размер файла веб-ссылки, используя следующий код
function getFileSize($file){
$ch = curl_init($file);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = curl_exec($ch);
curl_close($ch);
$contentLength=0;
if (preg_match('/Content-Length: (\d+)/', $data, $matches)) {
$contentLength = (int)$matches[1];
}
return $contentLength; }
Если вы хотите получить удаленный размер изображения, попробуйте использовать getimagesize()
Возможно, вы захотите исследовать с помощью http_head (). Я думаю, что фрагмент, на который вы ссылаетесь, загружает файл, чтобы определить размер файла, который может не понадобиться. Если веб-сервер, на который вы ссылаетесь, отправляет обратно точную информацию заголовка, вы сможете определить размер файла, дату изменения и некоторые другие полезные функции идентификации.
Я не знаю, где вы это читаете. filesize
требует stat
и на основе HTTP wrapper
страница, я не думаю, что это поддерживает stat
на любой версии PHP.