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

Форум PHP

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

 

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

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

тема: Как узнать скачали файл с сервера или нет.
 
 автор: AlexDIXI   (10.04.2009 в 15:01)   письмо автору
 
 

Ребята помогите пожалуйста. Нужно узнать был ли файл скачен до конца с сервера.

Например скачал ли IP весь размер файла music.mp3? Как узнать (?

  Ответить  
 
 автор: nikita2206   (10.04.2009 в 15:19)   письмо автору
 
   для: AlexDIXI   (10.04.2009 в 15:01)
 

только если вы будете отдавать файл через скрипт....

  Ответить  
 
 автор: AlexDIXI   (10.04.2009 в 15:43)   письмо автору
 
   для: nikita2206   (10.04.2009 в 15:19)
 

ОК Я ГОТОВО ЕГО ОТДАВАТЬ ЧЕРЕЗ СКРИПТ .. Как выглядит скрипт?

  Ответить  
 
 автор: cheops   (12.04.2009 в 16:37)   письмо автору
 
   для: AlexDIXI   (10.04.2009 в 15:43)
 

Нет, это вам тоже не поможет, сервер-то может и выдаст данные в сеть, а дошли они до пользователя или нет - вы вряд ли узнаете. Протокол HTTP так устроен, что не позволяет вам достоверно узнать, что твориться на стороне клиента.

  Ответить  
 
 автор: Eugene77   (12.04.2009 в 17:03)   письмо автору
 
   для: cheops   (12.04.2009 в 16:37)
 

В принципе, да, но можно ведь и через заднее крыльцо...
Например, если файл грузится HTML страницей, то по событию onLoad можно добавить на страницу, например, какой-то рисунок через JS. И, если рисунок запрошен у сервера - значит файл скачан.
Несовсем понятно как эту музыку потом выковыривать из страницы, но это уже другой вопрос. Автор же не написал что именно он хочет. Может ему так и нужно...

  Ответить  
 
 автор: AlexDIXI   (11.04.2009 в 15:11)   письмо автору
 
   для: AlexDIXI   (10.04.2009 в 15:01)
 

АП

  Ответить  
 
 автор: Саня   (12.04.2009 в 17:42)   письмо автору
 
   для: AlexDIXI   (11.04.2009 в 15:11)
 

По raw логам сервера.

  Ответить  
 
 автор: Trianon   (12.04.2009 в 17:47)   письмо автору
 
   для: Саня   (12.04.2009 в 17:42)
 

Опять же, так Вы сможете определить, что файл отдан, а не скачан.
К примеру если запрос шел через прокси, то последний вполне мог закачать файл к себе до внезапного обрыва клиента.

  Ответить  
 
 автор: nikita2206   (12.04.2009 в 18:01)   письмо автору
 
   для: Trianon   (12.04.2009 в 17:47)
 

Trianon, в PHP есть такая функция, вы должны знать, давно на php.net читал, эта функция возвращает true если пользователь остановил загрузку страницы, а скрипт продолжает работать...
тоесть это полезно при выполнении какогото цикла...
проблема в том что я не помню название этой функции...
впринципе можно было бы сделать цикл, указав в его условии чтото вроде !feof($handler), а в теле:
<?
if(эта_функция()){ ...; break; } echo fgets($handler,1024);

  Ответить  
 
 автор: Trianon   (12.04.2009 в 18:08)   письмо автору
 
   для: nikita2206   (12.04.2009 в 18:01)
 

http://ru2.php.net/manual/ru/features.connection-handling.php

  Ответить  
 
 автор: nikita2206   (12.04.2009 в 18:41)   письмо автору
 
   для: AlexDIXI   (11.04.2009 в 15:11)
 

тогда както так:
<?php 
set_time_limit
(0);
header('Content-type: audio/mp3');
header('Content-Disposition: attachment; filename='.$_GET['file']);

$handler fopen('files/'.$_GET['file'], 'r');
if(
$handler){
    while(!
feof($handler)){
        if(!
connection_aborted()){
            echo 
fgets($handler10240);
        }else{
            break;
        }
    }
    if(
feof($handler)){
        
/* делаем запрос в бд, добавляя кол-во скачиваний файла $_GET['file'] */
    
}
    
fclose($handler);
}
?>


P.S. еще в .htaccess желательно прописать редирект, чтото вроде такого:
RedirectMatch files/(.+)\.mp3$ http://%{HTTP_HOST}/download.php?file=$1

тогда можно будет выдавать ссылки вида: http://site.ru/files/song_name.mp3
это полезно для тех кто любит пользовать функцию даунлоадеров, когда они "пасут" буфер обмена и при появлении в нем подобной ссылки предлагают закачать файл

еще забыл сказать, желательно папку files закрыть при помощи того же .htaccess ( deny from all )...

  Ответить  
 
 автор: serjinio   (12.04.2009 в 23:00)   письмо автору
 
   для: nikita2206   (12.04.2009 в 18:41)
 

RewriteRule ^download/([a-zA-Z0-9_\-\.]+)$ files/download.php?file=$1 [QSA,L]

  Ответить  
 
 автор: nikita2206   (13.04.2009 в 16:04)   письмо автору
 
   для: serjinio   (12.04.2009 в 23:00)
 

мне кажется так нельзя...
я имею ввиду пользовать реврайт...
предположим доунлоадер получил первые 10Кб информации, он отправляет запрос на следующюю порцию информации, а получает первую...(если я неправ, поправьте...)

  Ответить  
 
 автор: AlexDIXI   (14.04.2009 в 11:56)   письмо автору
 
   для: nikita2206   (13.04.2009 в 16:04)
 

Ребята. Читал статью, о том что есть пхп скрипт который способен уточнить с какого места была прервана передача файла. И из ходя из этих данных, скрипт по запросу докачки, оттдоет файл с того места откуда он был прерван. Вот моя логика скрипта. Начинаем отдавать файл, при этом следим за окончанием переданых данных, и если они достигли конца то true если нет, то false. Ведь это не сложно только надо знать больше чем я :)

  Ответить  
 
 автор: Trianon   (14.04.2009 в 12:03)   письмо автору
 
   для: AlexDIXI   (14.04.2009 в 11:56)
 

>...скрипт по запросу докачки, оттдоет файл с того места откуда он был прерван.

клиент, формируя запрос докачки, сам указывает, с какого места ему нужен файл.
скрипт, исполняя запрос докачки, всего лишь отдает указанное в запросе.

  Ответить  
 
 автор: serjinio   (14.04.2009 в 19:53)   письмо автору
 
   для: Trianon   (14.04.2009 в 12:03)
 

Как с эмитировать разрыв соединения на локальной машине, чтобы отстроить скрипт докачки..

  Ответить  
 
 автор: Trianon   (14.04.2009 в 20:04)   письмо автору
 
   для: serjinio   (14.04.2009 в 19:53)
 

Скриптом (через fsockopen) .

В конце вопросов нормальные люди ставят вопросительный знак.

  Ответить  
 
 автор: nikita2206   (14.04.2009 в 20:31)   письмо автору
 
   для: Trianon   (14.04.2009 в 20:04)
 

была тема, "Лена" её заводила... Я аж удивился что девушка такое знает... Там всё дело обстоит в хедерах...
Серверу посылают запрос, указывая в хедере с какого места начинать отдавать (заметте, неуказывается до куда отдавать, т.к. это бессмысленно, ведь клиент в любой момент может остановить получение данных за ненадобностью...)... на самом деле всё немного сложнее чем кажется...
П.С. то что я нажал ссылку "Ответ" под постом Трианона - незначит что я ему пишу)) просто нажал в самом низу)

  Ответить  
Rambler's Top100
вверх

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