Имя,размер,расширение файла по ссылке?

usergeyv

Знаток
Регистрация
5 Июл 2013
Сообщения
152
Реакции
25
Нужно в переменные передать имя,размер и расширение файла по ссылке, функция basenameДля просмотра ссылки Войди или Зарегистрируйся работает только с прямыми ссылками , а как узнать и предать в определенные переменные информацию о файле по ссылки вида
Код:
http://site.ru/test.php?id=11111 (при открытии ссылки в браузере,начинается загрузка файла. Файл с другого сервера)
Прошу предоставить код php
 
Если дать полный код, то так будет не интересно, по этому будет кусками
В работоспособность функций не всматривался, на вскидку должны работать.
получаем размер файла

PHP:
function remote_filesize($url, $user = "", $pw = ""){
    ob_start();
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_NOBODY, 1);

    if(!empty($user) && !empty($pw))
    {
        $headers = array('Authorization: Basic ' .  base64_encode("$user:$pw"));
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }

    $ok = curl_exec($ch);
    curl_close($ch);
    $head = ob_get_contents();
    ob_end_clean();

    $regex = '/Content-Length:\s([0-9].+?)\s/';
    $count = preg_match($regex, $head, $matches);

    return isset($matches[1]) ? $matches[1] : "unknown";
}

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

Вот определят размер:
Код:
$filename = $link;
$fh = fopen($filename, "r");
while(($str = fread($fh, 1024)) != null) $fsize += strlen($str);

echo "Размер файла: ".$fsize." байт" ;
Подскажите как имя узнать ?

Покурите, если не осилите, пишите - напишу для вас
Спасибо, вкурил:lol:
PHP:
<?php
$url = 'http://www.example.com';

print_r(get_headers($url));

print_r(get_headers($url, 1));
?>
и вставляеш что надо в
PHP:
<?php
// Получаем HTTP-заголовки
$hostname = "http://www.softtime.ru/files/configs.zip"; $out = get_headers($hostname, true);
foreach($out as $header => $value)
{
if($header === "Content-Length")
{
echo "Количество байтов в архиве — $value";
}
}
?>

Только когда пишу
PHP:
// Получаем HTTP-заголовки
$hostname = $link_head; $out = get_headers($hostname, true);
foreach($out as $header => $value)
{
if($header === "Content-Disposition")
{
echo "Количество байтов в архиве — $value";
}
}
Отображается вот так:
Код:
 attachment; filename="2009.DUAL.BDRip.XviD.AC3.-HQ.exe"
Как убрать лишние, без attachment; filename= ,пример:
Код:
"2009.DUAL.BDRip.XviD.AC3.-HQ.exe"
 
Последнее редактирование модератором:
PHP:
<?php
$str = 'attachment; filename="2009.DUAL.BDRip.XviD.AC3.-HQ.exe"';
preg_match_all('#filename="([^"]+)"#i', $str, $matches);
echo $matches[1][0]; // выводит 2009.DUAL.BDRip.XviD.AC3.-HQ.exe
?>
 
Спасибо всем с headers разобрался, а как через функцию fopen узнать имя файла, расширения и проверить его доступность по ссылке. Не обязательно fopen, можно другие варианты, напомню, файл находится на удаленном сервере и не имеет прямой адрес. прошу поделится кодом

PHP:
<?php
$str = 'attachment; filename="2009.DUAL.BDRip.XviD.AC3.-HQ.exe"';
preg_match_all('#filename="([^"]+)"#i', $str, $matches);
echo $matches[1][0]; // выводит 2009.DUAL.BDRip.XviD.AC3.-HQ.exe
?>
а как сюда передать переменную $value (имя файла-
attachment; filename="2009.DUAL.BDRip.XviD.AC3.-HQ.exe")
?
 
Последнее редактирование модератором:
Только когда пишу
PHP:
// Получаем HTTP-заголовки
$hostname = $link_head; $out = get_headers($hostname, true);
foreach($out as $header => $value)
{
if($header === "Content-Disposition")
{
echo "Количество байтов в архиве — $value";
}
}
Отображается вот так:
attachment; filename="2009.DUAL.BDRip.XviD.AC3.-HQ.exe"
Как убрать лишние, без attachment; filename= ,пример:
"2009.DUAL.BDRip.XviD.AC3.-HQ.exe"
Код:
$value2 = preg_replace("/attachment; filename=/i", "", $value);
echo "Количество байтов в архиве — $value2";
 
PHP: // Получаем HTTP-заголовки
$hostname = $link_head; $out = get_headers($hostname, true);
foreach($out as $header => $value)
{
if($header === "Content-Disposition")
{
echo "Количество байтов в архиве — $value";
}
}
Почему не хочет работать с https и как исправить?
Warning: get_headers() [Для просмотра ссылки Войди или Зарегистрируйся]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? in Z:\home\test1.ru\p\tpl\page_redirect.html on line 106

Warning: get_headers() [Для просмотра ссылки Войди или Зарегистрируйся]: This function may only be used against URLs in Z:\home\test1.ru\p\tpl\page_redirect.html on line 106

Warning: get_headers() [Для просмотра ссылки Войди или Зарегистрируйся]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? in Z:\home\test1.ru\p\tpl\page_redirect.html on line 108

Warning: get_headers() [Для просмотра ссылки Войди или Зарегистрируйся]: This function may only be used against URLs in Z:\home\test1.ru\p\tpl\page_redirect.html on line 108

Ясно.Ругается потому что это Denwer!
 
Последнее редактирование:
Через fopen никак, я бы через Для просмотра ссылки Войди или Зарегистрируйся попробовал.
Ответ сервера даст Location, а там уже будет и имя и расширение.
 
Назад
Сверху