[php] maximaal 20 kbs per sessie per download

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zo nog een keer, maar duidelijker, ik wil graag dat gebruikers niet meer dan 1 download per sessie kunnen hebben. Ik wil graag de tijd bijhouden en zodra de gebruiker klaar is (of ermee kapt), wacht ik nog 5 seconden en dan mag hij weer downloaden.

Ik gebruik de onderstaande script om de gebruiker ook te beperken op 10 kbs.

Nu lijkt alles wel redelijk in elkaar te zetten, echter als ik eenmaal het script aanroep, en begin met downloaden, is het voor mij niet mogelijk om weer het bestand index.php aan te roepen, dat verdomt hij gewoon. Ook alle anderen scripts die ik heb draaien in localhost met sessie's willen niet werken.

ik snap niet wat er mis gaat, zonder sessie werkt het downloaden en vaak aanroepen prima.

ik kan het wel in 2 aparte browsers (IE en FIREFOX) apart aanroepen, het lijkt er op dat er iets fout gaat met sessie.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php

ignore_user_abort( true );

session_start();

$file = "test.test"; // file to be send to the client
$speed = 10; // 10 kb/s download rate limit

if(file_exists($file) && is_file($file) && ( $_SESSION['download_time'] == 0 || $_SESSION['download_time'] < time() - 5 ) ) {

   header('Cache-Control: public');
   header("Content-Type: application/octet-stream");
   header("Content-Length: ".filesize($file));
   header("Content-Disposition: filename=" . $file);
   flush();
   
   $fd = fopen($file, "r");
   while(!feof($fd) || connection_status()!=0 ) {
         echo fread($fd, round($speed*1024));
       flush();
       sleep(1);
       $_SESSION['download_time'] = time();
   }
   fclose ($fd);

} else {
    ?><a href=index.php>Download</a> is not possible, you are already downloading<?
}

?>


heb bijna al half internet afgestruind, en paar voorbeelden die ik vind werken ook niet :(

[ Voor 73% gewijzigd door Verwijderd op 18-11-2004 21:15 . Reden: edit: wat heb ik geprobeerd ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Wat doet die session_start() midden in je script?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
NMe84 schreef op woensdag 17 november 2004 @ 23:39:
Wat doet die session_start() midden in je script?
ja, was een onderdeel van een andere script van mij, heb het ff eruit gehaald en getest, werkt nog steeds niet : (

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Werkt niet goed, omdat je echo en je fread ook tijd kosten. Bovendien is je sleep niet precies 1 seconde. De nette methode is kijken hoelang geleden je voor het laatst een pakketje hebt verzonden, die tijd vermenigvuldigen met de snelheid, en dan het volgende pakketje zo groot maken.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Topicstarter
heb even mijn topic helemaal vernieuwd, met goed voorbeeld, en duidelijker probleem ebschrijving

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 20-09 23:02
Zie de uitleg op php.net bij session_write_close
http://nl3.php.net/manual...n.session-write-close.php

edit:
Alleen wel raar dat je ook last hebt met verschillende browsers (en dus verschillende sessions)

[ Voor 34% gewijzigd door Sjaaky op 18-11-2004 21:55 ]


Verwijderd

Topicstarter
Sjaaky schreef op donderdag 18 november 2004 @ 21:45:
Zie de uitleg op php.net bij session_write_close
http://nl3.php.net/manual...n.session-write-close.php

edit:
Alleen wel raar dat je ook last hebt met verschillende browsers (en dus verschillende sessions)
nee, sorry dat laatste klopt dus niet, met verschillende sessie's werkt het prima.

EDIT: THNX, ik zie nu dat het zo niet kan, ik moet waarschijnelijk sessie beeindigen voor ik begin met downloaden. En de rest via database afhandelen.

[ Voor 18% gewijzigd door Verwijderd op 18-11-2004 22:08 ]


  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 20-09 23:02
Ik denk dat je wel meerdere keren op een pagina session_start en session_write_close kan zetten. Ook al is het vanuit performance oogpunt natuurlijk beter dit zo min mogelijk te doen.

Verwijderd

Topicstarter
Sjaaky schreef op donderdag 18 november 2004 @ 22:16:
Ik denk dat je wel meerdere keren op een pagina session_start en session_write_close kan zetten. Ook al is het vanuit performance oogpunt natuurlijk beter dit zo min mogelijk te doen.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php

ignore_user_abort( true );

session_start();

$file = "test.test"; // file to be send to the client
$speed = 10; // 10 kb/s download rate limit

if(file_exists($file) && is_file($file) && ( $_SESSION['download_time'] == 0 || $_SESSION['download_time'] < time() - 5 ) ) {

   header('Cache-Control: public');
   header("Content-Type: application/octet-stream");
   header("Content-Length: ".filesize($file));
   header("Content-Disposition: filename=" . $file);
   flush();
   
   session_write_close();
   
   $fd = fopen($file, "r");
   while(!feof($fd) || connection_status()!=0 ) {
         echo fread($fd, round($speed*1024));
       flush();
       sleep(1);
       @session_start();
       $_SESSION['download_time'] = time();
       @session_write_close();
   }
   @session_write_close();
   fclose ($fd);

} else {
    ?><a href=index.php>Download</a> is not possible, you are already downloading<?
}

?>


lijkt ook niet te werken, ff kijken als ik session_handler vervang door database ipv file based of het dan werkt.

Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 20-09 23:02
Het werkt bij mij wel onder IE(win) en Konqueror(linux). Firefox(win) en Mozilla(linux) blijven wachten tot de download klaar is voordat hij de andere pagina opent. Ik kan na enig debuggen niet anders concluderen dan dat dit aan de browsers zelf ligt.
Dus dan is bijna alles Ok. In browsers waar het wel werkt heb je het afgeschermt en in browser waar het niet werkt daar kan het gewoon niet. Is alleen lastig voor diegene verder wil surfen op je site en die gebruik maken van een mozilla browser. Maar goed dan moeten ze maar een echte browser gebruiken }) NOFI.

In je while conditie kan je beter && gebruiken ipv ||. Verder is het tijdens het debuggen handig om de headers uit te zetten en een normaal text bestand te downloaden.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sjaaky schreef op vrijdag 19 november 2004 @ 00:20:
Het werkt bij mij wel onder IE(win) en Konqueror(linux). Firefox(win) en Mozilla(linux) blijven wachten tot de download klaar is voordat hij de andere pagina opent. Ik kan na enig debuggen niet anders concluderen dan dat dit aan de browsers zelf ligt.
Dus dan is bijna alles Ok. In browsers waar het wel werkt heb je het afgeschermt en in browser waar het niet werkt daar kan het gewoon niet. Is alleen lastig voor diegene verder wil surfen op je site en die gebruik maken van een mozilla browser. Maar goed dan moeten ze maar een echte browser gebruiken }) NOFI.

In je while conditie kan je beter && gebruiken ipv ||. Verder is het tijdens het debuggen handig om de headers uit te zetten en een normaal text bestand te downloaden.
LOL, ik had het uiteindelijk niet eens meer in IE getest, ik gebruik tegenwoordig alleen maar firefox, en op het eind test ik of het in IE nog werk enz :P

ik ga het maar eens in de mailing list van firefox vragen hoe dit opgelost kan worden?

THNX voor je hulp!!
Pagina: 1