Перейти к содержимому

Фото
- - - - -

Добавить SQL запись во время ...


  • Закрытая тема Тема закрыта
9 ответов в этой теме

#1 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 01 декабря 2007 - 11:26

$fp = fopen($this->properties['path'],'r');
fseek($fp,$byte_from);
$down = 0;
while(!feof($fp)){
	set_time_limit(0);
	$part = 1024*8;
	$down += $part;
	print(fread($fp, $part));
	flush();
	usleep($sleep_time);
	// Тут надо что-то вставить .... 
}
fclose($fp);
exit;
Я сделал подсчёт скаченного юзером $down ...и мне при достижении допустим 1/10 размера фаила, нужно записать данные скачивающего в MySQL базу, вот только если поставить данное:

if( ( $down / $this->properties['size'] ) >= 0.1 ){
	$DB->query("INSERT INTO downloader SET ip='{$ip}'");
}
то скачивание фаила мгновенно обрывается и в базу ничего не идет. Подскажие пожалуйста, как это осуществить :wacko: :mellow: Просто так данный SQL-запрос работает, и если его не вставлять в while ... то и фаил скачивается, но стоит его туда впихнуть и всё, при достижении 10% - стойкий обрыв ...Как же это реализуется ? )
  • 0

#2 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 01 декабря 2007 - 12:32

так данный SQL-запрос работает, и если его не вставлять в while ... то и фаил скачивается, но стоит его туда впихнуть и всё, при достижении 10% - стойкий обрыв ...Как же это реализуется ? )

Этот запрос никак не влияет на цикл. Возможно, проблема затаилась в методе query объекта $DB...

И ещё, что за фигню ты вставляешь в БД, какой-то IP адрес... Зачем его вставлять в БД на каждой итерации цикла :)

Вруби отображение ошибок перед циклом напиши ini_set( 'display_errors', 1); error_reporting( E_ALL );
Под циклом напиши echo mysql_error();
  • 0

#3 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 01 декабря 2007 - 12:36

Setor, Да я просто так попробовать хотел) Я хотел вообще сделать учёт траффика, который съедает юзверь пока качает, именно пока качает ) Поставил всё, что ты написал перед while - ничего не просходит ) Так же отдаёт фаил и всё ) ...

Сообщение изменено: Диверсант (01 декабря 2007 - 12:37 )

  • 0

#4 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 01 декабря 2007 - 12:39

И ещё, что за фигню ты вставляешь в БД, какой-то IP адрес... Зачем его вставлять в БД на каждой итерации цикла

А, сори, не обратил внимание, что ты вставляешь его только 1 раз... Но всё равно надо кроме IP ещё что-нить добавить... дату, например ;) Если конечно у тебя не автообновляемое поле даты в БД ;)

Setor, Да я просто так попробовать хотел) Я хотел вообще сделать учёт траффика, который съедает юзверь пока качает, именно пока качает )

Я понял твою идею... Так обычно не делают. Если файлики маленькие и редко скачиваются, то можно. Вообще существуют иные методы... Но они довольно сложные.
  • 0

#5 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 01 декабря 2007 - 12:41

Setor, Я просто был на одном сайте, и там, пока качаешь фаил, и захочешь скачать ещё один - пишет типо, фиг вам, дорогой юзер, но как только отменяешь скачивание своего фаила - можно качать другой фаил) Вот поэтому заинтересовала такая мулька ))
  • 0

#6 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 01 декабря 2007 - 12:45

Поставил всё, что ты написал перед while - ничего не просходит ) Так же отдаёт фаил и всё ) ...

Ну ещё бы не происходит... Открой скачанный файл и в нём посмотри наличие ошибок! Или можно ещё добавить перед циклом ini_set( 'error_log', 'errors.txt' ); тогда у тебя при ошибках создастся файл errors.txt в том же каталоге где и скрипт

Setor, Я просто был на одном сайте, и там, пока качаешь фаил, и захочешь скачать ещё один - пишет типо, фиг вам, дорогой юзер, но как только отменяешь скачивание своего фаила - можно качать другой фаил) Вот поэтому заинтересовала такая мулька ))

Я тоже был на таком сайте... Так что скажу, что у них сделано всё другим способом. Там web сервер сообщает кол-во отданного в БД! Там не php скрипты отдают файлы, поверь ;) Я могу конечно и ошибаться, но лучше почитай в интернете как люди делают такой даунлоад.
  • 0

#7 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 01 декабря 2007 - 12:49

Сделал всё, как ты сказал, ничего не прозошло, никакого фаила не создалось ...я в XAMPP работаю, так что фиг знает ....:(
.. Там, где я был, там точно ПХП ...:) Нашёл лог ошибок в папке apache, но ничего не нашёл касательно своего скрипта...никаких упоминаний, в основном детализация запуска XAMPP и его модулей

Сообщение изменено: Диверсант (01 декабря 2007 - 12:52 )

  • 0

#8 Setor

Setor
  • Постоялец
  • 1 890 сообщений
  • Откуда:Эстония, Таллин

Отправлено 01 декабря 2007 - 12:54

Тем более если юзер отменит закачку, твой скрипт думаешь, об этом узнает? ignore_user_abort спасёт мир, а в теле цикла юзать ф-цию connection_aborted() чтобы узнать, юзер на связи ещё или уже нет... Да, ещё не забудь поставить time_limit на выполнение скрипта. А то он по дефолту через 30 сек вырубится)

И ещё несложно подсчитать, если с тебя будет 10 человек разом качать файлы, ты израсходуешь ~10х50 Мб оперативки (примерно столько жрёт процесс апаче) если 100, то тебе надо будет 5 гигабайт рамы, иначе твой сервер станет такой тормозилой. А прикинь, кто-то качает по-полной, а какой-нить тормозила из России может час качать 10 мегабайт на своём модеме ;)

Сделал всё, как ты сказал, ничего не прозошло

Ну а файл-то ты скачал? Открой его в текстовом редакторе (тока не в ворде) и может там что-то найдёшь... Ставь метки в начале цикла, в конце после цикла, чтобы при их срабатывании что-то где-нить сохранялось, помечалось что эта метка сработала, значит и цикл сработал) Работай ;)
  • 0

#9 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 01 декабря 2007 - 12:55

Setor, set_time_limit(0) стоит уже давным давно ) А про ignore_user_abort я знаю, но на данный момент мне надо, чтобы при скачивании, при достижении 10% записывался бы АйПи скачивающего в базу, но скачивание продолжалось )

Пробовал скачать 2 фаила, один текстовой, другой музыкальный, нигде ничего нет ))))) Музыкальный фаил проигрыватся, а текстовой открывается, даже урезанный до 10%))) В текстовом фаиле правда в конце квадратик какой-то стоит )

Сообщение изменено: Диверсант (01 декабря 2007 - 13:00 )

  • 0

#10 .NET

.NET
  • Постоялец
  • 3 511 сообщений

Отправлено 01 декабря 2007 - 16:01

Проблему разрешил ) За сим, тему можно закрыть ) Спасибо большое Сетору)))) Как обычно ))
  • 0