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

Форум PHP

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

 

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

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

тема: Загрузка с докачкой
 
 автор: @ndry   (20.04.2006 в 23:49)   письмо автору
 
 

Есть у кого скрипт для загрузки файла через ПХП с докачкой?

Вот что у меня получилось:

<?
function get_file($url$name)
{
// Получение размера файла
    
$filepath trim($url); 
    
// Делим путь к файлу на хост и "хвост" (для сокетов) 
    
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 "/"
        
$url .= "/"
    }
     
    
#################################################################################################### 
    ############################ Основная часть скрипта, остальное - "вода" :) ######################### 
    #################################################################################################### 
    // Подключаемся к файлу через сокеты 
    
$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)) 
    { 
        
$filesize $matched_array[1]; 
    } 
    else 
    { 
        echo 
"Не могу определить размер этого файла :("
    } 
    
    unset(
$matched_array);
    if(
ereg("Content-Type: (.*?)"$temp_headers$matched_array)) 
    { 
        
$filtype $matched_array[1]; 
    } 
    
    
$filename str_replace("/"""$path_details['file']);

    
// Закрываем сокет-файла 
    
fclose($getfile); 

////////////////////////


    
header('Content-Type: '.$filtype); // Отправляем тип файла.
    
header('Content-Length: '.$filesize); // Отправляем его размер.
    
header'Content-Disposition: attachment; filename='.$filename); // Отправляем его имя.
    
echo file_get_contents($url); // Считывание файла
}
if(
$_POST['adress'])
{
    @
get_file($_POST['adress']);
}
?>

<?
    
echo '<br><br><center><form action="'.$HTTP_SERVER_VARS['PHP_SELF'].'?do" method="post"> 
    <input type="Text" name="adress" size="40" value="http://192.168.0.2/andrychat.zip"> 
    <input type="Submit" value="down"> 
    </form></center>'

?> 

   
 
 автор: @ndry   (21.04.2006 в 21:31)   письмо автору
 
   для: @ndry   (20.04.2006 в 23:49)
 

--

   
Rambler's Top100
вверх

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