Чтение удаленного размера файла с использованием размера файла

Я прочитал руководство, что 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.

Другие вопросы по тегам