Чтение удаленного размера файла с использованием размера файла - PullRequest
2 голосов
/ 12 июля 2010

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

4 голосов
/ 26 февраля 2014

Вы можете получить размер файла веб-ссылки, используя следующий код

функция 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; }
2 голосов
/ 12 июля 2010

filesize не работает для HTTP - это зависит от stat, который не поддерживается для протокола HTTP (S) .

Справочная страница PHP дляРазмер файла говорит:

Refer to List of Supported Protocols/Wrappers for a listing of which wrappers support stat() family of functionality.

Это не означает, что каждый протокол / оболочка работает "из коробки" с filesize.Вы всегда можете обойти это, выполнив полный GET удаленного URL-адреса и рассчитав размер возвращаемых данных. Если вы можете получить заголовок Content-Length, вы можете попробовать запрос HEAD, чтобы избежать передачи данных файла.

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

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

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

Возможно, вы захотите исследовать, используя http_head () . Я думаю, что фрагмент, на который вы ссылаетесь, загружает файл, чтобы определить размер файла, который может не понадобиться. Если веб-сервер, на который вы ссылаетесь, возвращает точную информацию заголовка, вы должны быть в состоянии определить размер файла, дату и некоторые другие полезные функции идентификации.

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

Я не знаю, где вы это читаете.filesize требует stat и, основываясь на странице HTTP wrapper, я не думаю, что она поддерживает stat в любой версии PHP.

...