2010-07-12 4 views
2

Я прочитал руководство, что 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 для размер_файла(). Дело закрыто. Я буду использовать фрагмент here как обходное решение .

+1

Там это более короткая работа: get_headers ($ file_url, 1) предоставит вам массив, который (надеюсь) будет иметь ключ «Content-length», значение которого - размер файла в байтах. – Petruza

ответ

2

filesize не работает для HTTP - это зависит от stat, который isn't supported for the HTTP(S) protocol.

Людей страница 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

А, ок. Я пропустил прочтение этого документа :( – ariefbayu

+0

@silent: Обновлен мой ответ с помощью нескольких возможных обходных решений. –

+1

Обновленный вопрос. Я добавил ссылку об обходном пути, который я буду использовать. – ariefbayu

0

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

0

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

0

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

4

Вы можете получить размер файла Web URL, используя ниже код

функция GetFileSize ($ файла) {

$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; } 
+0

Получение разных номеров ... может объяснить, почему? ? ... ie: '$ ch = curl_init ('http://www.ehow.co.uk/ui/en-gb/ehow.png'); /// выходы: 11402' и' $ ch = curl_init ('http://www.ehow.co.uk/ui/en-gb/ehow.pngjavascript:alert(1);');//outputs: 45821' и '$ ch = curl_init (' http: // www.ehow.co.uk/ui/en-gb/wrong_path_/ '); // выходы: 45820' и '$ ch = curl_init (' http://www.ehow.co.uk/ui/ '); выходы: 233' ..... Это затрудняет понимание того, какой номер означает, что ... тем более, трудно ** правильно прочитать размер удаленного файла ** .... Любая идея? – ErickBest

Смежные вопросы