WinFuture-Forum.de: [php/shell] Script Zum Verschieben Von Ordnern - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[php/shell] Script Zum Verschieben Von Ordnern


#1 _Benji_

  • Gruppe: Gäste

geschrieben 25. Oktober 2006 - 16:42

hallo,

ich hab etwas größeres vor. kurz der hintergedanke.

es geht um die entwicklung eines onlineshops - programmiert wird das ganze in php. in dem kundenbereich werden downloads angeboten die der kunde vorher bezahlt hat.

allerdings möchte ich keine statischen download links anbieten weil diese keinen cdkey etc benötigen zum installieren. es handelt sich u.A. um soundplugins.
also versuche ich mittels eines dynamischen scripts download-urls zu erzeugen die einen begrenzten zugriffszeitraum haben. im prinzip das gleiche was winfuture mit ihren downloads macht.

mir steht ein linux root webserver zur verfügung auf dem ich berechtigungen für php scripte geben kann. nun ist meine überlegung vom php script aus ein shellscript aufzurufen welches die files in temporäre ordner schiebt und diese nach ablauf der zeit wieder entfernt. die löschung der ordner wird wohl mittels eines cronjobs erfolgen.

so nun mein eigentliches problem:
es wäre das erste mal das ich ein projekt mit solcher komplexibilität entwickle. wie genau würde ein aufruf von php aus auf das shellscript aussehen? wie kann ich mein vorhaben mittels der shell lösen? was ist zu beachten? wie kann ich einen "timer" auf die datei legen so das der cronjob sie wieder löscht?

leider weiß ich nicht ganz genau wonach ich danach googlen muss da sich hier mehrere sachen überschneiden.

wenn jemand einen link, ein tutorial, oder ideen, lösungsvorschläge hat etc wäre ich sehr dankbar!

gruß
benji
0

Anzeige



#2 Mitglied ist offline   crw 

  • Gruppe: aktive Mitglieder
  • Beiträge: 48
  • Beigetreten: 22. September 06
  • Reputation: 0

geschrieben 25. Oktober 2006 - 17:06

schreib dir doch einfach ein script dass einen key erwartet. wenn der key (der für jede bestellung eindeutig ist) stimmt wird die datei die gedownloaded werden soll ausgegeben. Wenn du diese datei außerhalb des document-roots plazierst kann sie nur über dieses script aufgerufen werden.
0

#3 _Benji_

  • Gruppe: Gäste

geschrieben 25. Oktober 2006 - 17:30

hmm dann ist der download aber immernoch statisch, dh er könnt den link kopieren und überall verbreiten.
jaja ich weiß filesharing gibts auch noch, davor kann ich mich jedoch nicht schützen. möcht jedoch die urls so gut es geht dynamisch halten.
0

#4 Mitglied ist offline   crw 

  • Gruppe: aktive Mitglieder
  • Beiträge: 48
  • Beigetreten: 22. September 06
  • Reputation: 0

geschrieben 31. Oktober 2006 - 15:22

Nein, der Kunde bekommt ja nur den Link zu dem php-script. Dieses erwartet einen Parameter und nur wenn dieser korrekt ist wird die Datei "ausgegeben" somit hat der Kunde keinerlei Informationen wo sich die eigentliche Datei befindet. Wenn du in den Parameter noch einen Timestamp schreibst oder eine art "Blacklist" für bereits verwendete Parameter anlegst kannst du auch ein mehrfaches herunterladen verhindern.
0

#5 Mitglied ist offline   MNG 

  • Gruppe: aktive Mitglieder
  • Beiträge: 293
  • Beigetreten: 29. März 06
  • Reputation: 0

geschrieben 31. Oktober 2006 - 19:58

Moin,

am Einfachsten dürfte das über die Session möglich sein. Kunde, der sich einloggt, bekommt in seine Session eine bestimmte Variable gesetzt. Die Downloads sind dann über PHP-Skripte verfügbar und prüfen, ob in der Session die jeweilige Variable gesetzt ist. Nur wenn das der Fall ist, gibt das Skript die Datei her, sonst kommt ein freundliches "Sorry". Die Session wird, je nach Einstellung, nach einer bestimmten Zeit ungültig. Alternativ könnte das Download-Skript die Variable aus der Session entfernen, dann wäre ein Download nur ein einziges mal (pro Login) möglich.
Tutorial zu PHP und Sessions: http://tut.php-q.net/sessions.html
Alternativ könntest du Download-Rechte in einer Datenbank ablegen. Das wird dann aber komplizierter.
0

#6 _Benji_

  • Gruppe: Gäste

geschrieben 01. November 2006 - 15:56

das problem löst auch sessions nicht!
selbst wenn ich eine session einbaue und per php den download starten lasse wird die url zum file ausgegeben der eindeutig bleibt. somit könnte man ihn weitergeben und das möcht ich durch die temporären ordner verhindern!
0

#7 Mitglied ist offline   MNG 

  • Gruppe: aktive Mitglieder
  • Beiträge: 293
  • Beigetreten: 29. März 06
  • Reputation: 0

geschrieben 01. November 2006 - 20:42

Moin,

Zitat

selbst wenn ich eine session einbaue und per php den download starten lasse wird die url zum file ausgegeben der eindeutig bleibt. somit könnte man ihn weitergeben und das möcht ich durch die temporären ordner verhindern!

Falsch. Die URL des Downloads IST das PHP-Skript. Dieses öffnet die entsprechende Datei und
gibt sie an den Browser des Benutzers weiter. Die URL der Datei geht nie nach draussen. Du kannst die Datei sogar in ein Verzeichnis auf dem Server ablegen, das von aussen nicht zugänglich ist, eben weil nur das Skript auf die Datei zugreift.
0

#8 Mitglied ist offline   telemail 

  • Gruppe: Mitglieder
  • Beiträge: 13
  • Beigetreten: 04. November 06
  • Reputation: 0

geschrieben 07. November 2006 - 12:52

Hallo,

also Kopieren, Verschieben und Löschen von Ordnern ist doch gar kein Problem und die Sherllbefehle können dierekt in PHP aufgerufen werden.

Im folgenden Fall werden bei einem eventuell bereits vorhandenen alten Directory gleichen Namens alle Files darin gelöscht. Anderenfalls wird so ein Verteichnis für temporäre Dateien angelegt. Und danach werden die Files kopiert.

if(file_exists("$destdir"))
{
	exec("rm $destdir/*");
}
else mkdir("$desdir");
exec("cp $srcdir/* $destdir");


Von PHP aus ein Direktory zu löschen, sieht so aus:

if(file_exists("$tempdir"))
{
	exec("rm $tempdir/*");
	rmdir("$tempdir");
}


Bei flachen Verzeichnissen geht es auch ganz gut mit PHP. Bei mehreren Unterverzeichnisebenen dagegen wird es kompliziert ohne Rootrechte, die PHP leider nicht hat.

Gruß telemit
0

#9 Mitglied ist offline   mo 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.796
  • Beigetreten: 17. Juni 02
  • Reputation: 0
  • Wohnort:Ulm / BaWü

geschrieben 07. November 2006 - 15:54

urx. bitte lasse keine system (exec) calls aus php zu... wenn du ein wenig auf die sicherheit des shops hältst.

wiesoweshalbwarum kannst du die auslieferung der dateien denn nicht mit einem php-skript erledigen? wie mng schon sagt, dem skript wird dann einfach per session-variable mitgeteilt, um welche datei es sich handelt. sessions sind aber browser-gebunden (an einer eindeutigen ID, einem keks festgemacht). wie die session variablen aussehen, das weis der browser nicht einmal, er kennt nur seinen session-keks. löscht du die download-anforderung/erlaubnis nach erhalt des downloads, kannst du den session-eintrag löschen und der browser hat keine möglichkeit, das nicht zuzulassen bzw. davon überhaupt kenntnis zu erlangen.

bei winfuture hat die "verzeichnisverschieberei" einen guten grund...

aber erstmal. wir verschieben gar keine verzeichnisse. wir machen symlinks auf ein verzeichnis, das außerhalb des htdocs-roots liegt. wir hätten die dateien auch am liebsten über php ausgeliefert, das datenaufkommen ist dafür aber zu groß und wir wollten nicht das risiko eingehen, am ende die bandbreite nicht voll ausnutzen zu können.
(eigentlich wäre es kein problem gewesne... aber wir hatten ja noch keine ahnung ;D).

also bitte bitte bitte, lass die "verzeichnisverschieben"-idee fallen und mach es gleich richtig.

grüsse,
mo
I'm mó. mo's good twin.
0

#10 Mitglied ist offline   telemail 

  • Gruppe: Mitglieder
  • Beiträge: 13
  • Beigetreten: 04. November 06
  • Reputation: 0

geschrieben 07. November 2006 - 17:43

Beitrag anzeigenZitat (mo: 07.11.2006, 15:54)

urx. bitte lasse keine system (exec) calls aus php zu... wenn du ein wenig auf die sicherheit des shops hältst.
...
aber erstmal. wir verschieben gar keine verzeichnisse. wir machen symlinks auf ein verzeichnis, das außerhalb des htdocs-roots liegt. wir hätten die dateien auch am liebsten über php ausgeliefert, das datenaufkommen ist dafür aber zu groß und wir wollten nicht das risiko eingehen, am ende die bandbreite nicht voll ausnutzen zu können.
(eigentlich wäre es kein problem gewesne... aber wir hatten ja noch keine ahnung ;D).
...
also bitte bitte bitte, lass die "verzeichnisverschieben"-idee fallen und mach es gleich richtig.
grüsse,
mo


Ja genau, das mit exec ist ein Sicherheitsrisiko, es geht auch mit Files einzeln Kopieren mit PHP-Befehlen. Ich hatte das umgekehrte Problem, nämlich probehalbes Hochladen in ein CRM-System. Die Änderungen waren dann nur für diesen einen User sichtbar und wurden danach wieder gelöscht.

Aber für das Downloaden gibt es ja keine Veränderung der Files. Da sind dann Symlinks das Ideale (Befehl symlink).

Gruß telemail
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0