Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   php: speedlimit und maskierter link (https://www.delphipraxis.net/54217-php-speedlimit-und-maskierter-link.html)

Jan 29. Sep 2005 23:24


php: speedlimit und maskierter link
 
Hallo DPler!

Es stellt sich mir folgendes Problem:

Ich soll einen Downloadbereich schreiben, der folgende features besitzt:

1. Der Download soll in 3 Stufen in der Geschwindikeit drosselbar sein.

2. Der Link darf nicht benutzbar sein, ohne dass ein script vorher evaluiert ob du angemeldet bist oder nicht. (zum Schutz vor Direktverlinkung und zum Anmeldezwang) Daher darf der Direkte Link zu der Datei nicht erkennbar sein.

Ich habe versucht das problem durch 3 ftp accounts zu lösen und ein php skript, welches die Dateien von dem ftp-server an den user streamt, allerdings kriege ich das nicht hin.
Das öffnen des FTP servers kann ich und das schicken an den user, aber beides kombinieren, dazu fehlt mir der filestream vom ftp.

Kann mir da irgendjemand bei helfen?

Gruß
Jan

alcaeus 30. Sep 2005 08:33

Re: php: speedlimit und maskierter link
 
Moin Jan,

Zitat:

Zitat von Jan
2. Der Link darf nicht benutzbar sein, ohne dass ein script vorher evaluiert ob du angemeldet bist oder nicht. (zum Schutz vor Direktverlinkung und zum Anmeldezwang) Daher darf der Direkte Link zu der Datei nicht erkennbar sein.

hier kann ich dir nur die Loesung empfehlen, die auch ich verwende:
Du machst einen ordner "downloads" oder "files", in dem die Dateien landen. Das Verzeichnis wird mit einer .htaccess-Datei vor Zugriffen geschuetzt, somit kommt ohne php-Script schonmal keiner dran.
Im Script ueberpruefst du dann die Zugriffsrechte, setzt korrekte Header und schickst die Datei mit readfile() raus (wichtig: keinen "Location: Filename" machen). Fuer php gelten die .htaccess-Limits naemlich nicht ;)

Greetz
alcaeus

Jan 30. Sep 2005 13:33

Re: php: speedlimit und maskierter link
 
Hallo alcaeus,
soweit war ich schon gediehen, allerdings bekomme ich auf die art und weise kein Speedlimit hin.
Aber ich denke ich habe da einen Lösungsansatz mit sleep und print mal sehen ob i ch das hinkriege.
Gruß
Jan

generic 30. Sep 2005 14:12

Re: php: speedlimit und maskierter link
 
die downloads dürfen nicht direkt erreichbar sein.
dann baust du eine wrapper funktion welche wenn der aufruf richtig ist mit readfile die datei zurückliefert.

http://de3.php.net/manual/de/function.readfile.php

wenn du dann noch traffic shaping machen willst 2 möglichkeiten.

1) über linux iptables durch bestimmte ports routen.
2) readfile durch einen eigenen fopen konstrukt ersetzten und immer blöcke von 1k ausgeben mit warteschleife.
achtung - phpprogramme haben eine maximale ausführungszeit und outputbuffering darf nicht aktiviert sein.

generic 30. Sep 2005 14:28

Re: php: speedlimit und maskierter link
 
hab mal ne ref-lösung für dich geschrieben:

Code:
<?php
$filename = "benhur2-livecd-2.0.18.iso";
header("Content-Transfer-Encoding: binary");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=test.txt;");
header("Content-Length: ".@filesize($filename));

// timelimit aus!
set_time_limit(0);

// 1 kb pro sekunde

$handle = fopen ($filename, "r");
while (!feof($handle)) {
// hier das 1 kb
   $buffer = fgets($handle, 1024);
   echo $buffer;
// buffering umgehen
   ob_flush();
// hier die sekunde
   sleep(1);
}
fclose ($handle);

?>
genaueres shaping gekommst du mit dem usleep befehl hin - dieser ist aber nicht unter windows verfügbar!
wenn du das limit auf 0 setzt laeuft das script bis ende!

Flocke 30. Sep 2005 16:11

Re: php: speedlimit und maskierter link
 
Schöne Volleyvorlage!

Eine Anmerkung: bei Content-Disposition sollte man den Dateinamen in doppelte Anführungszeichen packen (falls mal Leer- oder Sonderzeichen drin sind).

Etwa so:
Code:
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');

Jan 30. Sep 2005 22:50

Re: php: speedlimit und maskierter link
 
Hallo generic!
Subba, genau so muss das!
Dankeschön!
Jan

generic 3. Okt 2005 00:56

Re: php: speedlimit und maskierter link
 
das script hat aber noch einen kleinen nachteil. der ist mir gerade noch aufgefallen.
das script laeuft natuerlich dann so lange bis der download komplett waere!

d.h. auch wenn der browser oder downloader geschlossen wird dann laeuft das script weiter!
so zumindest auf einen server passiert auf welchen ich das getestet habe.
das war ein iis6 (win2003-web) und php als isapi installiert.

ach ja, der server lief dann auch mit 100% cpu last. ggf. funktioniert das sleep unter windows nicht sauber.

Jan 3. Okt 2005 01:13

Re: php: speedlimit und maskierter link
 
Hallo generic!
Ich nutze das ganze unter linux mit usleep. Da geht das ganze sehr gut.
Danke für den Hinweis allerdings!
Bin mal weiter php webcrawler basteln!
Gruß
Jan!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz