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

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

 

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

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

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

Ответ 002 на задачу N 13.
С условиями задачи можно ознакомится по ссылке.

<?
###########################################
############# task12.php ##################
############# Scripting by DDK ############
###########################################

if(isset($_GET['do']) && isset($_POST['adress']) && !empty($_POST['adress'])) {
    
$filepath trim($_POST['adress']);
    
// Делим путь к файлу на хост и "хвост" (для сокетов)
    
preg_match('/\\b(?P<protocol>https?|ftp):\/\/(?P<domain>[-A-Z0-9.]+)(?P<file>\/[-A-Z0-9+&@#\/%=~_|!:,.;]*)?(?P<parameters>\\?[-A-Z0-9+&@#\/%=~_|!:,.;]*)?/i'$filepath$path_details);
    
// Проверяем, верен ли введённый адрес
    
if(isset($path_details[2]) && !empty($path_details[2]))
    {
        
$filehost $path_details[2];
    }
    else
    {
        echo 
"Введённый адрес некорректен !";
        exit;
    }
    
// Если "хвост" пуст, заполняем пустоту слешем, что бы не сглючили сокеты
    
if(isset($path_details[3]) && !empty($path_details[3])) $filepath $path_details[3]; else $filepath "/";
    
    
####################################################################################################
    ############################ Основная часть скрипта, остальное - "вода" :) #########################
    ####################################################################################################
    // Подключаемся к файлу через сокеты
    
$getfile fsockopen($filehost80, &$errno, &$errstr30) or die("Ошибка подключения к серверу");
    
// Добавляем в буффер путь к файлу на сервере и сам хост
    
fputs($getfile"HEAD $filepath HTTP/1.0\nHOST: $filehost\n\n");
    
// Объявляенм буффер-переменную для заголовков
    
$temp_headers "";
    
// Читаем заголовки по 4 кб, пока не дойдём до конца сокет-файла
    
WHILE (!feof($getfile)) $temp_headers .= fgets($getfile4096);
    
// Ищем в полученных заголовках Content-Length, если находим,читаем его значение
    
if(ereg("Content-Length: ([0-9]+)"$temp_headers$matched_array)) 
    {
        echo 
"Размер файла: ".number_format($matched_array[1], 0"'"" ")." байт";
    }
    else 
    {
        echo 
"Не могу определить размер этого файла :(";
    }
    
// Закрываем сокет-файла
    
fclose($getfile);
    
####################################################################################################
    ####################################################################################################
    ####################################################################################################
    
} else {
    echo 
'<br><br><center><form action="'.$HTTP_SERVER_VARS['PHP_SELF'].'?do" method="post">
    Путь к удалённому файлу:<br><br>
    <input type="Text" name="adress" size="40">
    <input type="Submit" value="Узнать размер">
    </form></center>'
;
}
?>



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

   
 
 автор: cheops   (27.03.2006 в 00:56)   письмо автору
 
   для: SoftTime   (20.03.2006 в 17:28)
 

Работает. Ход с HEAD очень хитрый и хороший - в этом случае тело запроса не грузится и не нужно отслеживать лишний перевод строки между HTTP-заголовками и телом запроса.

   
Rambler's Top100
вверх

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