• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

In PHP Variable "dauerhaft definieren" + Datei direkt nach download löschen

brainiac

Neues Mitglied
Hi! Wie kann ich eine Variable in PHP dauerhaft durch eine Eingabe definieren, so dass der Benutzer dies nur noch auf der I-Seite eingeben muss?
Ich will es für die Speicherung der MySQL-Daten verwenden.
Also, es soll ungefähr so aussehen:
PHP:
<form action="" method="post">
<input type="text" name="dauerhaft">
</form>
<?php
if ($_POST["dauerhaft"] != "") {
$variable = $_POST["dauerhaft"]; /* Dies will z.B. so haben, aber so ist es ja nur für die eine Sitzung. Es soll direkt in die Datei gespeichert sein. Etwa wie bei Beispiel 2 */
}
?>
Beispiel 2:
PHP:
<?php
$dauerhaft = "hallo Welt!";
?>

NÄCHSTE FRAGE:
Wie kann ich eine Datei die man über einen Link in einer PHP Datei erreicht direkt nach dem Download von ca (absolut Maximal) 30 Sekunden löschen?

Viele Grüße
Jonathan
 
Werbung:
Für das erste kannst du Cookies verwenden oder besser Sessions, was dann je nach Konfiguration auch ohne Cookies funktioniert.
Zu deiner zweiten Frage, im Prinzip nein. Denn du weiß ja nicht, wann der Download fertig ist. Aber vielleicht fällt ja jemand ein Trick ein.
 
Antwort1:
Dafür gibt es Sessions :) Google mal oder schau hier im Forum

Antwort2:
Du musst eine Prüf-Routine durchlaufen lassen sobald sich jemand auf der Seite bewegt, ob noch offene Downloads da sind, die länger als 30 sek offen sind. Dafür erstellst du einen Eintrag in der Datenbank oder einer Datei.
Dort steht dann der Dateiname und dann bis wann der Download gültig ist.
Du vergleichst dann die jetzige Zeit mit der aus der DB. Sollte es überschritten sein, wird die Datei gelöscht. Somit hast du nicht in echt 30 Sekunden. Aber die anderen leute müssen sich ja auf der Seite bewegen um was runter zu laden. Somit wird spätestens wenn jemand zweites den Download starten will die alte Datei gelöscht.
Außerdem kannst du ncht sagen, wann die Person fertig mit dem Download ist. Deswegen würde ich das Ganze schon höher stecken als 30 Sekunden.

Antwort 2b:
Möglich wäre noch ein Cron-Job, der die oben genannte Prüf-Routine startet. Jedoch alle 30 sek einen Cronjob auszuführen, der testet, ob der Download gelöscht werden kann, ist echt krass. Also Schließe diese Möglichkeit am besten aus :)
 
Werbung:
Vor allem wie sollte der cronjob das festellen? Du erhälst ja keine Rückmeldung vom Browser, wann er mit dem Download fertig ist.
 
Hm.. Ich will das nicht mit Cookies. Es soll in eine Installationsdatei vorkommen, deswegen muss es umbedingt richtig IN der Datei definiert sein, sodass eben Beispiel 2 oben herauskommt.

Antwort 2:
Ich habe schon eine Abfrage eingebaut, ob die Datei schon gelöscht worden ist, aber wenn die Leute direkt auf die Datei (Ohne vorher mein Script zu besuchen) gehen, dann habe ich schlechte Karten. Es würde auch reichen, wenn nur alle 20 Minuten oder so, das Zip-Archiv gelöscht wird...

Viele Grüße
Jonathan
 
Dann nochmal was zu Punkt1:
Du kannst dir eine Ini File schreiben. Und diese dann parsen lassen.
Eine Ini-File könnte folgendermaßen aussehen
Code:
pizza= Salami
name= Gilles
Es gibt den Befehl PHP: parse_ini_file - Manual
Habe mal die Ini ausgelesen und einen Var Dump gemacht. Folgendes kommt dabei raus:
array
'pizza' => string 'Salami' (length=6)
'name' => string 'Gilles' (length=6)

Kannst ja um deine ini zu schreiben str_replace benutzen.
Kannst ja vorher so etwas für deine Values nehmen:

Code:
pizza= [pizza]
name= [name]

Dann mit http://de.php.net/manual/de/function.str-replace.php jeweils die Daten ersetzen.

 
Werbung:
Hm.. Ich will das nicht mit Cookies.
Dann hast du nicht verstanden wie das Internet funktioniert. Du kannst keine PHP Variabel dauerhaft einem Benutzer zuordnen ohne dass du das beim Nutzer irgendwie abspeicherst.

Und zu deiner 2. Antwort. Wie gesagt es gibt keine Möglichkeit festzustellen, wann der Browser den Download beendet hat. Wenn du die Datei zu früh löscht, dann wird der Download scheitern.
Aber einen Download nur eine bestimmte Zeit gültig zu halten sollte im Rahmen einer Anwendung kein Problem sein. Du musst nur irgendwo abspeichern wie lange die Downloadlinks gültig sind.
 
Danke, habe schon eine gute Lösung gefunden, veröffentliche diese aber nicht, da sonst meine Systeme stark angreifbar sind. Es ist nunmal nicht perfekt.
Ich kapier das Internet schon, aber ich meinte eigentlich, dass nicht jeder Benutzer seine eigene Variable hat, sondern, dass es von jedem Zugriffspunkt diese Variable definiert ist.
PHP:
<?php
// Vorher
$a_1 = "";
// Nachher
$a_1 = "z.B. Definiert";
?>
Es sollen dort nämlich die MySQL-Daten direkt in der Datei als Variable gespeichert werden.

Viele Grüße
Jonathan
 
Dann hast du nicht verstanden wie das Internet funktioniert. Du kannst keine PHP Variabel dauerhaft einem Benutzer zuordnen ohne dass du das beim Nutzer irgendwie abspeicherst.

Er hatte ja was von Installation geschrieben im 2. Post. Nehme an, es soll eine einmalige Installation stattfinden, bei der die Werte gesetzt werden.
Ähnlich läuft es glaub ich phpBB Board statt. Dort wird eine Datei geschrieben, in der die Admins stehen.

Mir ist auhc noch Möglichkeit Nummer 2 eingefallen dafür:

schreibe anstatt eine ini-Datei einfach eine PHP Datei, welche du dann immer wieder einbettest (oder wie sollte man include übersetzen :D) in deine Seiten.

Edit:
So nebenbei von wegen Angreifbarkeit. Die ini-File kann geparsed werden, auch wenn sie in einem incht zugreifbaren bereich liegt (htaccess ist das Stichwort)
Somit hat nur das Script Zugriff auf die Daten. Verwende keine unsicheren Daten.
 
Werbung:
Ich kapier das Internet schon, aber ich meinte eigentlich, dass nicht jeder Benutzer seine eigene Variable hat, sondern, dass es von jedem Zugriffspunkt diese Variable definiert ist.
Dann sind deine Erläuterungen reichlich unverständlich. Soweit ich das jetzt verstehe, willst du ganz einfach nur eine Datei lesen, ändern und schreiben. warum sagst du das nicht gleich so?
 
Ich meinte es so wie Gilles... Kann ich wirklich eine PHP-Datei erstellen mit dem Inhalt "<?php
$var = "var";
?>"
? Ich denke bei der Stelle $var wird er nicht mitmachen, weil er var definieren will... Wie überspringe ich das, dass da wirklich $var steht?

Viele Grüße
Jonathan
 
In PHP macht es einen Unterschied zwischen " und '
PHP:
$var = "LOL";
echo "Blaa $var";
echo 'Blaa $var';
im ersten Beispiel wird Blaa LOL ausgegeben. Im 2. hingegen Blaa $var.
Somit lässt sich dann auch wunderbar die Datei schreiben.
PHP:
fwrite($handler,'<?php \r\n$var = "'. $var .'";\r\n$var2 = "'. $var2 .'"; \r\n?> ';
sollte in der File etwa so etwas ergeben:

PHP:
<?php
$var = "LOL";
$var2 = "ROFL";
?>
 
Werbung:
Danke, hat funktioniert. Jetzt weiß ich auch mal, dass es differenzen zwischen ' und " gibt :D

Viele Grüße
Jonathan
 
Werbung:
Double-Post-Action ^^
Sorry sonst hätte man nicht gesehen, dass ich noch was wichtiges hinzugefügt hätte.

Alsoo. Zu deinem Datei runterladen und danach direkt wieder löschen.
Ich nehme an du lässt sie temporär kopieren vom orginal und willst sie dann wieder löschen. Ich habe eine bessere Idee.

Du brauchst dafür folgendes: Eine Datenbank mit 2 Tabellen.
In der einen stehen die Dateien und in der anderen die Downloads.
Tabelle 1 könnte dann so aussehen.

Code:
id: int [B]PK[/B]
filename: varchar/text
showname: varchar

tabelle2:

Code:
id: int [B]PK[/B]
downstring: varchar
downstart: DateTime
downend: DateTime
fileid: int  [B]FK[/B]

Kannst dann eine Datei machen, die zum Beispiel zu download.php führt mit dem downstring als parameter. Anhand des parameters wird erkannt ob der Download gestartet werden kann. Wenn dem so ist kannst du über den Header einstellen, dass der Content Typ ein download ist. Es wird dann als Filename der filename aus der tabelle angegeben und dem user wird beim Download dann der Showname angezeigt.

PHP:
<?php

header('Content-type: application/x-www-form-urlencoded');

header('Content-Disposition: attachment; filename="'. $filename .'"');

readfile($showName);

?>

ich weiß nur nicht ob x-www-form-urlencoded immer hinhaut ^^

Aber das so als Anstoß
 
Werbung:
Sorry, dass ich erst jetzt damit komme:
Kann ich es nicht auch so machen, dass einfach nur der Name der Datei "falsch" dem Browser übermittelt wird, aber die richtige Datei übertragen wird?
Ich meine es so:
Es existiert eine Datei mit dem Namen "Datei.rar". Man klickt auf Download und statt Datei.rar wird z.B. "hallo.rar" dem Browser angezeigt und auf der Platte wird auch hallo.rar gefunden, aber wenn man jetzt direkt vom Server hallo.rar laden will, wird sie nicht gefunden, weil es ja nur Datei.rar gibt. Weiß jemand wie ich das meine? Wenn ja, bitte Antworten, wie ich den Namen "fälsche"

Viele Grüße
Jonathan
 
Du kannst den Leuten aber nicht vorgaukeln, dass sie grade datei.rar laden, da dies keine php datei ist. Entweder existiert datei.rar wirklich oder du machst es wie ich es oben geschildert habe :)
 
Zurück
Oben