PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |
|

30-04-2006, 11:17
|
Fireball22
Newbie
|
|
Registriert seit: Apr 2006
Beiträge: 29
|
|
Download bei Aufruf
Hallo,
ich würde gerne selber einen Download-Counter basteln!
Ich habe mir das ganze so gedacht:
Der Download-Link geht direkt auf eine PHP-Datei, diese heißt z. B. treiber.php
Diese Datei öffnet eine Textdatei, und erhöht den Stand dort immer um 1, bei einem Aufruf.
Gleichzeitig muss die PHP-Datei aber automatisch den Download der .zip Datei starten.
Wie ist dieser automatische Download in einer PHP-Datei möglich?
Fireball22
|

30-04-2006, 12:19
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
|
|
Ein Ansatz wäre dieser hier:
treiber.php
PHP-Code:
<?php
// Counter erhöhen
file_put_contents($logfile, file_get_contents($logfile)+1);
// Download starten
readfile($_GET['file']);
?>
$logfile sollte natürlich den Pfad zur Datei enthalten, in der die Zahl der Downloads festgehalten wird, die gewünschte Datei (der Download) sollte per URL (?file=foobar.txt) übergeben werden und evtl. wäre das Senden von typischen Headern vor readfile() angebracht (Beispiele dazu unter http://php.net/header).
|

30-04-2006, 13:00
|
Fireball22
Newbie
|
|
Registriert seit: Apr 2006
Beiträge: 29
|
|
Vielen Dank für deine Hilfe!
Das hier ist ja die Musterlösung, ich hätte das ganz anderst, komplizierter gemacht.
Ich hätte erst mit fopen("anzahl.txt",r+) gearbeitet...
Fireball22
|

30-04-2006, 13:13
|
Fireball22
Newbie
|
|
Registriert seit: Apr 2006
Beiträge: 29
|
|
Lokal auf meinem Rechner unter WAMP läuft alles soweit perfekt, aber leider funktioniert folgendes nicht auf dem Webserver, nachdem ich es hochgeladen habe:
PHP-Code:
/* if($_GET['file'] == "fakemailerv1.zip")
{
$logfile = "downloads_fakemailerv1.txt";
}
*/
$logfile = "downloads_fakemailerv1.txt";
// Counter erhöhen
file_put_contents($logfile, file_get_contents($logfile)+1);
// Download starten
readfile($_GET['file']);
URL: http://www.michis-homepage.net/extra...kemailerv1.zip
Der kennt anscheinend nicht mal die Funktion, an was könnte das liegen?
Hat das was mit Register-Globals zu tun?
Zitat:
Fatal error: Call to undefined function: file_put_contents() in /var/www/vhosts/michis-homepage.net/httpdocs/extras/scripting/download.php on line 11
|
Fireball22
|

30-04-2006, 14:06
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
|
|
Ein Blick ins Manual hätte dir verraten, dass es diese Funktion erst seit PHP5 gibt.
Bau dir die Funktionen file_*_contents() einfach mit fopen, fread/fwrite und fclose nach. Umgib sie mit
if (!function_exist(...)) {}, damit es bei einem PHP-Update keine Konflikte gibt.
|

30-04-2006, 14:14
|
Fireball22
Newbie
|
|
Registriert seit: Apr 2006
Beiträge: 29
|
|
Habe glaub den Fehler gefunden!
Es liegt warscheinlich daran, dass diese Funktion nur von PHP 5 unterstüztzt wird, ich habe aber auf meinem Server 4.3.10 installiert.
Fireball22
|

30-04-2006, 14:15
|
Fireball22
Newbie
|
|
Registriert seit: Apr 2006
Beiträge: 29
|
|
Hehe, da war wieder "jemand" schneller
Fireball22
|

30-04-2006, 15:56
|
Fireball22
Newbie
|
|
Registriert seit: Apr 2006
Beiträge: 29
|
|
So, jetzt läuft soweit alles, so siehts aus:
PHP-Code:
<?php
if(!isset($_GET['file']))
{
header('Location: [/URL]http://www.michis-homepage.net/scripting.php[/url]');
exit();
}
if($_GET['file'] == "fakemailerv1.zip")
{
$logfile = "downloads_fakemailerv1.txt";
}
// $logfile = "downloads.txt";
// Counter erhöhen
// file_put_contents($logfile, file_get_contents($logfile)+1);
// Download starten
if (function_exist)
{
$datei = fopen($logfile,"r+");
$stand = fgets($datei,10000);
if($stand == "0")
{
$stand = 0;
}
$stand++;
rewind($datei);
fwrite($datei,$stand);
fclose($datei);
}
else
{
// Counter erhöhen
file_put_contents($logfile, file_get_contents($logfile)+1);
}
readfile($_GET['file']);
?>
Läuft alles, nur die Ausgabe gefällt mir nicht so ganz
http://www.michis-homepage.net/extra...kemailerv1.zip
Fireball22
|

30-04-2006, 16:28
|
Fireball22
Newbie
|
|
Registriert seit: Apr 2006
Beiträge: 29
|
|
Habe jetzt noch folgendes hinzugefügt und es geht nun:
PHP-Code:
header("Content-Type: application/zip");
header ( "Content-Length: " . filesize($_GET['file']) );
header("Content-Disposition: attachment; filename= \"fakemailerv1.zip\"");
readfile($_GET['file']);
Aber ist das eigentlich alles richtig, und ist oben auch alles richitg?
Fireball22
|

30-04-2006, 16:45
|
boris-schneider
Junior Member
|
|
Registriert seit: Apr 2006
Ort: Hessen/FFM
Beiträge: 208
|
|
Zitat:
Original geschrieben von Fireball22
Aber ist das eigentlich alles richtig, und ist oben auch alles richitg?
|
Kauf dir doch bitte mal ein gescheites PHP-Buch oder lese dich mal durch die unzähligen PHP Tutorials im Netz durch anstatt hier bei jeder kleinen änderung zu fragen ob das so richtig ist oder nicht.
Wenn etwas nicht funktioniert ist die warscheinlichkeit groß das etwas nicht stimmt, dann liest man sich kurz durch's manual, probiert etwas herum und sicher funktioniert es dann auch richtig.
Hilfestellung !== Ständig wegen jeder Scheisse den Hintern abgewischt zu bekommen (...sorry..)
Sers
Der Boris
|

30-04-2006, 16:58
|
Fireball22
Newbie
|
|
Registriert seit: Apr 2006
Beiträge: 29
|
|
Nein, aber es ist genauso, wenn du einen Schüler einen Aufstatz schreiben lässt.
Dieser wird seine Rechtschreibfehler auch nicht selber erkennen.
Bei mir läuft im Moment alles problemlos, aber ich möchte halt trotzdem gerne mal von anderen die Meinung hören, ob man noch was verbessern könnte, ob alle Funktionen gehen und ich evtl. diese nicht nur überschrieben habe, und und und...
Aber wenn alles richitg ist, dann passt das und ich kann mich freuen
Fireball22
|

30-04-2006, 17:13
|
boris-schneider
Junior Member
|
|
Registriert seit: Apr 2006
Ort: Hessen/FFM
Beiträge: 208
|
|
Zitat:
Original geschrieben von Fireball22
Nein, aber es ist genauso, wenn du einen Schüler einen Aufstatz schreiben lässt.
Dieser wird seine Rechtschreibfehler auch nicht selber erkennen.
|
Wenn er aber in einen Duden schaut sicherlich schon, selbiges kannst du bei PHP im manual machen!
Viele Fragen würden sich einfach erübrigen wenn man etwas recherchiert und die manuals durchblättert, mehr wollte ich damit auch garnicht sagen
Sers
Der Boris
|

30-04-2006, 17:39
|
Fireball22
Newbie
|
|
Registriert seit: Apr 2006
Beiträge: 29
|
|
Die PHP-Manual kann aber sicherlich nicht sagen ob das alles so Sinn macht und alles soweit passt und keine Sicherheitsrisiken im Script entstehen!
Fireball22
|

30-04-2006, 17:46
|
boris-schneider
Junior Member
|
|
Registriert seit: Apr 2006
Ort: Hessen/FFM
Beiträge: 208
|
|
Zitat:
Original geschrieben von Fireball22
Die PHP-Manual kann aber sicherlich nicht sagen ob das alles so Sinn macht und alles soweit passt und keine Sicherheitsrisiken im Script entstehen!
|
Wenn dein Beispiel dem beispiel aus dem manual gleicht kannst du sicher sein das es so sinn macht
Was die Sicherheistrisiken angeht hast du dies nicht gefragt, ergo wäre dies eine spezifizierte frage und berechtigt, anders als die anderen
So genug Off-Topic für heute.
Sers
Der Boris
|

30-04-2006, 18:01
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
|
|
PHP-Code:
<?php
// was'n das bitte?
if (function_exist) {
$datei = fopen($logfile,"r+");
$stand = fgets($datei,10000);
// Und das?
if ($stand == "0") {
$stand = 0;
}
$stand++;
rewind($datei);
fwrite($datei,$stand);
fclose($datei);
} else {
// Wie jetzt, ich denk die Funktionen gibts bei dir nicht?
file_put_contents($logfile, file_get_contents($logfile)+1);
}
// Wenn die Datei im selben Verzeichnis liegt und
// genauso heißt, wie es der User in der URL sieht,
// ist es für ihn ein leichtes, deinen Counter zu umgehen.
readfile($_GET['file']);
?>
Insgesamt also ziemlicher Murks! Dreh mal dein error-reporting auf scharf!
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|