2015-01-07 4 views
3

Я хочу получить размер удаленного файла. И это можно сделать с помощью этого кода:Получить размер удаленного файла

$headers = get_headers("http://addressoffile", 1); 
$filesize= $headers["Content-Length"]; 

Но я не знаю адрес файла напрямую. Но у меня есть адрес, который перенаправляется на исходный файл.

Например: У меня есть адрес http://somedomain.com/files/34 Когда я поставил этот адрес в адресной строке браузера или использования функции file_get_contents('myfile.pdf',"http://somedomain.com/files/34");, он начинает загрузку исходного файла.

И если я использую выше функции для вычисления размера файла, то используя адрес http://somedomain.com/files/34 это вернуть размер 0.

Есть ли способ, чтобы получить адрес, где http://somedomain.com/files/34 переадресовывает.

Или любое другое решение для расчета размера перенаправленного файла (исходного файла).

+0

Вы должны знать путь к файлу ... –

+0

Есть ли способ узнать путь к файлу –

+0

Это может быть полезно http://stackoverflow.com/a/17472472/89211 – Relequestual

ответ

3

Если сайт перенаправляется через. заголовок Расположения вы можете использовать:

// get the redirect url 
$headers = get_headers("http://somedomain.com/files/34", 1); 
$redirectUrl = $headers['Location']; 

// get the filesize 
$headers = get_headers($redirectUrl, 1); 
$filesize = $headers["Content-Length"]; 

Пожалуйста, обратите внимание, что этот код должен не может быть использован в производстве, поскольку нет никаких проверок для существующих ключей массива или обработок ошибок.

+1

Спасибо, он отлично работает –

5

Если вы хотите получить удаленный файл, вам нужно подумать о другом. В этом посте я покажу вам, как мы можем получить размер удаленного файла из его информации заголовка без загрузки файла. Я покажу вам два примера. Один, используя функцию get_headers, а другой - cURL. Использование get_headers - очень простой подход и работает для каждого тела. Использование cURL является более продвинутым и мощным. Вы можете использовать любой из них. Но я рекомендую использовать подход cURL. Здесь мы идем ..

get_headers подход:

/** 
* Get Remote File Size 
* 
* @param sting $url as remote file URL 
* @return int as file size in byte 
*/ 
function remote_file_size($url){ 
# Get all header information 
$data = get_headers($url, true); 
# Look up validity 
if (isset($data['Content-Length'])) 
    # Return file size 
    return (int) $data['Content-Length']; 
} 

использование

echo remote_file_size('http://www.google.com/images/srpr/logo4w.png'); 

Curl подход

/** 
* Remote File Size Using cURL 
* @param srting $url 
* @return int || void 
*/ 
function remotefileSize($url) { 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_NOBODY, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_MAXREDIRS, 3); 
curl_exec($ch); 
$filesize = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD); 
curl_close($ch); 
if ($filesize) return $filesize; 
} 

использование

echo remotefileSize('http://www.google.com/images/srpr/logo4w.png'); 
+0

Спасибо за ответ, но я уже пробовал эти методы, описанные вами, но моя проблема заключалась в получении размера перенаправленного URL-адреса. @gries решила эту проблему отлично –

+1

спасибо за ответ @VinitChouhan – Prasanna

0

Curl подход хорош тем, что в некоторых серверах get_headers отключен. Но если ваш URL имеет http, https и ..., вам это нужно:

<?php 

function remotefileSize($url) 
{ 
    //return byte 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_NOBODY, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_MAXREDIRS, 3); 
    curl_exec($ch); 
    $filesize = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD); 
    curl_close($ch); 
    if ($filesize) return $filesize; 
} 

$url = "https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"; 
echo remotefileSize($url); 

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