PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   dateiname beim download (https://www.php-resource.de/forum/php-developer-forum/77821-dateiname-beim-download.html)

unnamedkh 09-11-2006 14:11

dateiname beim download
 
hi,
ich habe ein problem, an dem ich seit stunden sitze, aber ich komme einfach nicht weiter. Tut mir Leid, ich bin kein PHP-Crack.

Also ich will nen Download erzwingen und möchte dazu den Dateinamen anzeigen lassen. Da ich das mit nem downloadscript mache, gibt es da Probleme. Entweder zeigt er mit den Skriptnamen an oder die ID. Ich komme einfach nicht weiter.
Soweit bin ich (meine letzte Idee)

$datei = "data/test.txt"; // Name der Datei (Jede Zeile(=ID) ist der spezielle Dateiname)
$array = file($datei); // Datei in ein Array einlesen
$blub = $array[$_GET['id']]; //ist glaube ich sinnlos
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="'.$blub.'"');
readfile('filename');

was macht er? nichts ... er öffnet die pdf-datei im browser.

kann mir jemand bitte helfen!!! :)

Lg kevin.

P.S.: Falls jemand ne andere gute Idee hat, nehme ich die auch ... jedoch ist das Problem, dass die url der dateien jeweils unterschiedlich lang ist ;)

wahsaga 09-11-2006 14:24

Re: dateiname beim download
 
Zitat:

Original geschrieben von unnamedkh
was macht er? nichts ... er öffnet die pdf-datei im browser.
Wenn du das in deinem Browser für Ressourcen des Content-Types application/pdf so eingestellt hast, läuft doch also alles wunderbar ...


Wenn du wirklich entgegen dieser Nutzerentscheidung handeln willst, dann nutze einen Content-Type, den der Client höchstvermutlich nicht kennt, für den er also als Default-Aktion den Downloaddialog öffnet - Suchfunktion benutzen, das leidige Thema hatten wir schon sehr oft.

unnamedkh 09-11-2006 14:29

das ist mir klar. mir geht es auch nicht um das öffnen des dialogfeldes. das funktioniert ja, jedoch nicht mit dem dateinamen. den versuche ich halt so hinzubekommen, aber er hat scheinbar probleme mit der ausgabe des arrays...

denn wenn ich statt

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

das hier angebe

header('Content-Disposition: attachment; filename="'.$_GET['id'].'"');

gibt er die id als dateiname an ...

grüße

wahsaga 09-11-2006 14:33

Zitat:

Original geschrieben von unnamedkh
aber er hat scheinbar probleme mit der ausgabe des arrays...
"er" in diesem Falle == du?

Zitat:

PHP-Code:

$array file($datei); // Datei in ein Array einlesen
$blub $array[$_GET['id']]; //ist glaube ich sinnlos 


Wie sieht der Inhalt der Datei aus?
Was ergab deine Kontrollausgabe des eingelesenen Inhaltes, also print_r oder var_dump von $array? Gibt es dort einen Eintrag mit dem Key, den du in $_GET['id'] übergibst?

unnamedkh 09-11-2006 14:44

der inhalt sie bspw. so aus

1|test.pdf
2|test.pdf
3|test.pdf
test.pdf
test.pdf
test.pdf

die ids werde ich vorn noch wegnehmen.

var_dump von $_GET['id'] --> string(1) "1"
var_dump von $blub--> string(10) "2|test.pdf"

jahlives 09-11-2006 14:49

Ich würde mal
PHP-Code:

header("Content-Type: application/octet-stream"); 

für den zu sendenden Header machen.
Hast du dir mal $blub ausgeben lassen ? Ist das der korrekte Dateiname ? Und hast du auchmal $array mittels var_dump() augegeben lassen ? Sind das in etwa die erwarteten Ergebnisse ?

Gruss

tobi

jahlives 09-11-2006 14:51

Sorry aber du sagst ja selber, dass der Dateiname so nicht korrekt ist 2|test.pdf ist bestimmt kein Name den readfile() auf deiner Platte finden würde.
Und was bezweckst du mit dieser Zeile
PHP-Code:

readfile('filename'); 

Hast du denn eine Datei Names filename auf deiner Platte ? Ich meinte die sollte test.pdf heissen.

Gruss

tobi

unnamedkh 09-11-2006 15:14

ich habe es jetzt anders gemacht.

ich hole mir den Namen als Get-Variable. Der Dateiname wird mir jetzt auch perfekt angezeigt. aber jetzt gibt es ein anderes Problem und ich habe keine Ahnung, woran das liegen könnte: Er kann die Datei nicht mehr öffnen. Grund: "Dateityp nicht unterstützt oder Datei beschädgit (z.b. wenn sie als Dateianhang geschickt wurde und nicht korrekt dekodiert wurde)"

Eine Idee?

das sieht jetzt so bei mir aus:

header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$_GET['name'].'.pdf"');
readfile('filename');

jahlives 09-11-2006 15:40

Liest du die Posts anderer Leute auch :confused:
PHP-Code:

readfile('filename'); 

oder warum hast du immer noch diese nutzlose Zeile drin. Er findet die Datei nicht. Weil du keine hast die 'filename' heisst !
Ist der Groschen (Eurocent) jetzt gefallen ???

Gruss

tobi

unnamedkh 09-11-2006 16:00

sry, das hatte ich schon verändert. das alte war nur noch im zwischenspeicher. tut mir leid.

so zieht das jetzt alles aus ...

#Header("Location: ".$url);
header("Expires: Mon, 10 Jan 1970 01:01:01 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$_GET['name'].'.pdf"');
readfile($url) or die("File not found.");


fehler:
<br />
<b>Warning</b>: readfile(http://test.de/blub/blub/blub/Einheit_01.pdf
) [<a href='function.readfile'>function.readfile</a>]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
in <b>/var/www/vhosts/test.de/httpdocs/test/counter/count.php</b> on line <b>86</b><br />
File not found.

wahsaga 09-11-2006 16:05

Vielleicht solltest du mal keinen HTTP-URL an readfile übergeben, sondern einen Pfad/Dateinamen aus dem lokalen Dateisystem des Servers ...?

unnamedkh 09-11-2006 16:12

das habe ich auch schon probiert, da kommt das:

<br />
<b>Warning</b>: readfile(../../blub/blub/blub/test.pdf
) [<a href='function.readfile'>function.readfile</a>]: failed to open stream: No such file or directory in <b>/var/www/vhosts/test.de/httpdocs/test/counter/count.php</b> on line <b>86</b><br />
File not found.

aber ich bin mir zu 100% sicher, dass der file existiert und auch das die adresse/der pfad stimmt!!

tut mir echt Leid, dass ich das nicht klappen will.

grüße

P.S.: Denkt dran, ich bin kein php-pro ... ich versuch ja mein Bestes!

wahsaga 09-11-2006 16:24

Wenn du dir "100%ig sicher" bist, und PHP aber anderer Meinung ist - tja, wem glaube ich dann wohl eher ...?

unnamedkh 09-11-2006 16:37

mmh, natürlich mir, weil ich die url, die er mir als "falsch" angibt, direkt im browser eingebe (oder halt reinkopiere) und schups (wunderwerk der technik) öffnet er die pdf datei ... mmh, wem glaube ich jetzt mehr? dem fehler oder meinen augen?

so, jetzt mal wieder etwas sachlicher (btw: seid ihr immer so schlecht gelaunt bzw. gereizt oder nur bei mir??).

noch jemand eine idee, oder soll ich euch mal das komplette script geben? ich kenn mich wie gesagt mit php nicht so gut aus, so dass es sein kann, dass ich nen gedankenfehler habe. ich häng es mal dran:

PHP-Code:

function counten($url)
{
global 
$email;
#Header("Location: ".$url);
header("Expires: Mon, 10 Jan 1970 01:01:01 GMT");
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$_GET['name'].'.pdf"');
readfile($url) or die("File not found."); 


wahsaga 09-11-2006 16:47

Zitat:

Original geschrieben von unnamedkh
mmh, natürlich mir, weil ich die url, die er mir als "falsch" angibt, direkt im browser eingebe (oder halt reinkopiere) und schups (wunderwerk der technik) öffnet er die pdf datei ...
Und was hat ein URL mit dem Dateisystem zu tun?

Die Angabe bei readfile bezieht sich, wenn du sie relativ machst, natürlich auf den Ausführungsort des Scriptes.
Ist der Pfad unter dem Gesichtspunkt immer noch richtig ...?
Zitat:

mmh, wem glaube ich jetzt mehr? dem fehler oder meinen augen?
Wenn soll ich mehr glauben - PHP, dass eine eindeutige Fehlermeldung ausgibt, oder dem x-ten hier reingeschneiten Newbee, der es besser zu wissen meint?


Und den Code brichst du bitte schnellstens um, so wie es in den Regeln steht.


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:09 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG