Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ответ 003 на задачу N 13
 
 автор: SoftTime   (20.03.2006 в 22:39)   письмо автору
 
 

Ответ 003 на задачу N 13.
С условиями задачи можно ознакомится по ссылке.
Функция принимает два параметра: хост и путь к файлу, размер которого необходимо определить. Если в адресной строке не указаны переменные host и path, то определяется размер файла http://www.softtime.ru/files/whois.zip (этот кусок можно удалить). Вот результат выполнения скрипта

Размер файла [b]www.softtime.ru/files/whois.zip[\b]: 541


Код самой функции

<?php
    
//////////////////////////////////////////////////
    // Функция определения размера удаленного файла
    // $Id: postfilesize.php, Zero Cool Exp $
    //////////////////////////////////////////////////
    
function postfilesize($hostname$filepath)
    {
        
// Открываем соединение
        
$line '';
        
$fp fsockopen($hostname80$errno$errstr30);
        if( !isset(
$fp) )
        {
            echo 
$errstr "(" $errno ")<br />\n";
        }
        else
        {
            
// Формируем HTTP-запрос для передачи его серверу
            
$headers  "GET " $filepath " HTTP/1.1\r\n";
            
$headers .= "Host: " $hostname "\r\n";
            
$headers .= "Connection: Close\r\n\r\n";
            
// Отправляем запрос
            
fwrite($fp$headers);
            
$end false;
            while( !
$end )
            {
                
$line fgets($fp1024);
                ( 
trim($line == '') ) ? $end true $out[] = $line;
            }
            
// Закрываем соединение
            
fclose($fp);
        }
        
// Объединяем содержимое массива $out[] в одну строку
        
$lines implode(" "$out);
        
// Определяем число байтов в файле
        
preg_match("|Content-Length:[\s]+([\d]+)|i"$lines$matches);
        
// Возвращаем результат
        
return $matches[1];
    }
    
// Увеличиваем время работы скрипта
    
set_time_limit(180);
    
// Получаем размер файла на удаленном сервере
    
$host = ( isset($_GET['host']) ) ? $_GET['host'] : 'www.softtime.ru';
    
$path = ( isset($_GET['path']) ) ? $_GET['path'] : '/files/whois.zip';
    echo 
'Размер файла <b>' $host $path '</b>: ' postfilesize($host$path);
?>


http://www.softtime.ru/info/task.php?id_article=83

   
 
 автор: ZC   (27.03.2006 в 00:47)   письмо автору
 
   для: SoftTime   (20.03.2006 в 22:39)
 

Ждем-с критики

   
 
 автор: cheops   (27.03.2006 в 01:03)   письмо автору
 
   для: SoftTime   (20.03.2006 в 22:39)
 

Работает, но больно уж код хитрый. В результате этого (а так бывает всегда когда применяется хитрый код) имеется ошибка - скрипт загрузит весь файл, а не чистые HTTP-заголовки. А если файл в несколько гигабайт - сколько придётся ждать ответа и сколько памяти выделять? Убедится в том, что файл грузится полностью можно просто выводом содержимого $lines.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования