Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>Download von URl mit PHP

Download von URl mit PHP

tjost
tjost03.05.1113:50
Hi,

ich habe mit PHP eine URL ausgelesen, jetzt hätte ich gerne einen Download-Button der dann die Datei runterlädt. ist ein PDF.

Bitte sehr einfache so das ich es einfach in mein php File anfügen kann. Ich habe leider keine Ahnung.

Danke für die Hilfe
0

Kommentare

ChrisK
ChrisK03.05.1113:54
ähm ... wer soll die Datei runterladen? Dein Browser? Der Server auf dem das Script läuft? Soll der Browser einfach nur zu der URL des PDFs umgeleitet werden?

Und wenn es sehr einfach einzufügen sein soll, wäre es auch hilfreich das Script vorliegen zu haben.
„Wer anderen eine Bratwurst brät, hat ein Bratwurstbratgerät.“
0
tjost
tjost03.05.1113:56
Hi, also ich habe einfach nur php befehle angefügt.

$exv = $infomanualURL;

Damit wird die URL ausgelesen.

jetzt würde ich gerne ein Button haben damit man das PDF runterladen kann.

Ich kann den ganzen Text nicht zeigen da dort vertrauliche Informationen drinnen sind.

Danke
0
ChrisK
ChrisK03.05.1114:58
Wenn's auch einfach ein Link sein darf, sollte das hier schon reichen:
echo('<a href="'.$exv.'">Download</a>');
„Wer anderen eine Bratwurst brät, hat ein Bratwurstbratgerät.“
0
tjost
tjost03.05.1115:06
Hey, danke voll Porno, wie kann ich daraus jetzt einen Knopf machen?
0
justsports
justsports03.05.1116:52
Creating HTML push button link
0
micheee03.05.1118:54
...beschreibt meiner Meinung nach genau den Weg den man nicht gehen sollte.
Du brauchst deine Seite nicht Formulartags oder <input type="button"... /> vollpacken, wenn das Element welches du eigentlich einfügen möchtest ein Link ist.

Style lieber deinen Link mit Hilfe von CSS, zum Beispiel so:
<style type="text/css">
a {
 border: 2px outset;
 padding: 2px;
 text-decoration: none;
 }
 a:active {
 border: 2px inset;
 }
</style>
Mehr Infos zu CSS und Links z.B. hier: http://www.w3schools.com/css/css_link.asp
0
tjost
tjost04.05.1111:22
Danke für die Hilfe
0
ts
ts04.05.1113:49
Wenn man übrigens etwas größeres macht, dann sollte man eher weniger Funktionen wie „echo“ verwenden und anstatt dessen eine Bibliothek, wie z.B. smarty, einsetzen.
0
micheee04.05.1120:22
Nur noch als Nachtrag,

echo('<a href="'.$exv.'">Download</a>');
ist äquivalent zu dem (meiner Meinung nach) syntaktisch schöneren:

echo "<a href='{$exv}'>Download</a>";

0
ts
ts05.05.1118:36
Beides ist falsch.

Wenn man es auf diese Weise lösen will, dann eher so:
echo('<a href="' . htmlspecialchars($exv) . '">Download</>a');
0
appleguru
appleguru05.05.1119:29
Irgendwie hab ich den Eindruck, dass die Frage weniger mit PHP, als viel mehr mit HTML zu tun hat...
0
micheee05.05.1119:50
tjost, lass dich nicht rausbringen.
"falsch" ist meine Variante schonmal nicht, nur besser lesbar als die vorher gepostete.

Im Übrigen schlägt mit ts' Vorschlag der Versuch eine Datei mit Namen "Test>.txt" zu verlinken fehl... also keine so Spitzenidee. Schau dir lieber mal urlencode() an, das ist schon eher dafür gedacht...
0
ts
ts05.05.1122:22
micheee
"falsch" ist meine Variante schonmal nicht, nur besser lesbar als die vorher gepostete.
Nun, ungültiges HTML/XHTML würde ich jedenfalls definitiv nicht als richtig bezeichnen. Mit einem XML-Parser im Browser gibt's dann nur eine Fehlermeldung.
micheee
Im Übrigen schlägt mit ts' Vorschlag der Versuch eine Datei mit Namen "Test>.txt" zu verlinken fehl... also keine so Spitzenidee.
Ich schrieb eher. Es war als Anregung gedacht über Sonderzeichen nachzudenken. Im Übrigen sind ?:<>*/\| in Dateinamen nicht zu empfehlen.
micheee
Schau dir lieber mal urlencode() an, das ist schon eher dafür gedacht...
Meiner Meinung nach ist urlencode dafür nicht bestimmt.
0
micheee06.05.1110:56
ts
micheee
"falsch" ist meine Variante schonmal nicht, nur besser lesbar als die vorher gepostete.
Nun, ungültiges HTML/XHTML würde ich jedenfalls definitiv nicht als richtig bezeichnen. Mit einem XML-Parser im Browser gibt's dann nur eine Fehlermeldung.
Single Quotes sind völlig valide um Attributwerte zu verpacken, siehe auch:
Extensible Markup Language (XML) 1.0 (Fifth Edition)
W3C Recommendation 26 November 2008 :
[Definition: the content of the AttValue (the text between the ' or " delimiters) as the attribute value.]
.

Zu den Sonderzeichen liegst du richtig, das einzige was htmlentities dann aber noch escapen würde wäre das ampersand und die Quotes... und Quotes in Dateinamen sollten definitiv nicht durch ihre htmlentities ersetzt werden sondern durch...
ts
Meiner Meinung nach ist urlencode dafür nicht bestimmt.
ein Äquivalent welches der Browser wieder in einen gültigen Dateinamen übersetzen kann. Und dafür ist urlencode tatsächlich eher gedacht als htmlentities...

0
ts
ts06.05.1112:38
micheee
Single Quotes sind völlig valide um Attributwerte zu verpacken, siehe auch
Darauf habe ich mich gar nicht bezogen, denn ich schrieb „Beides ist falsch.” und bezog mich damit auf die Behandlung von Sonderzeichen in der jeweiligen URI in beiden Versionen.
micheee
Quotes in Dateinamen sollten definitiv nicht durch ihre htmlentities ersetzt werden
Warum nicht? Die Ausgabe ist valide und die Lösung functioniert anscheinend. Ein ' wird übrigens bei Nutzung von ENT_QUOTES zu &#039; umgewandelt.

Die Funktion urlencode ist meiner Meinung nach z.B. zum escapen von GET-Parametern gedacht.
Die Funktion ist geeignet, wenn ein String innerhalb eines Queryparts eines URL verwendet werden soll, und man einen komfortablen Weg benötigt, Variablen an die nächste Seite zu übergeben.
<?php
echo '<a href="mycgi?foo=', urlencode($userinput), '">';
?>

Zur Klärung baue ich mal ein kleines Minimalbeispiel:
<!DOCTYPE html >
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
<title>hello</title>
</head>
<body>
<p>
<?php
    echo('<a href="' . urlencode('http://example.com/t"est?ad&b=c'). '">Download1a</a>');
    echo('<a href="./' . urlencode('http://example.com/t"est?ad&b=c'). '">Download1b</a>');
    echo('<a href="' . htmlentities('http://example.com/t"est?ad&b=c'). '">Download2</a>');
?>
</p>

</body>
</html>
Ich transformiere es mal zu HTML, der besseren Übersicht wegen füge ich ein paar Zeilenumbrüche ein.
<!DOCTYPE html >
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
<title>hello</title>
</head>
<body>
<p>

<a href="http%3A%2F%2Fexample.com%2Ft%22est%3Fad%26b%3Dc">Download1a</a>
<a href="./http%3A%2F%2Fexample.com%2Ft%22est%3Fad%26b%3Dc">Download1b</a>
<a href="http://example.com/t&quot;est?ad&amp;b=c">Download2</a>

</p>
</body>
</html>
Beispiel ist valide => beide Lösungen sind valide.

Betrachtet man nun Download1a fällt sofort auf, dass es identisch zu Download1b ist. Wie soll man auf eine externe Domain verweisen? Ein selbst erstellter Parameter c sollte eventuell urlencodet werden.

Download2 kann auf externe Adressen verweisen…und ist valide. GET Parameter in der URI müssten eventuell mit urlencode behandelt werden. Der Ersteller schrieb aber, dass er die URL ausgelesen hat urlencode eher unnötig.

Mein Ziel war es zum Denken anzuregen. So einige Funktionen in PHP haben mehr als nur einen Parameter, siehe htmlentities. Ganz offensichtlich gibt es noch andere Spielwiesen wie z.B. die charset-Angabe.
0
micheee06.05.1113:48
...ich weiß ja worauf du hinaus willst, trotzdem verändert ein htmlentities den Dateinamen, weil der Webserver keine Ahnung von htmlentities hat.
Was bei deinem Link passiert ist, dass der Browser deine htmlentities zurückwandelt und einen Link baut der dann einen Request schickt der uU urlencoded ist.


Und deswegen ist es eigentlich auch sowieso egal, am Thema des Threads sind wir ja schon lange vorbei, aber trotzdem

Genau dieses Vorgehen schlägt auch das zugehörige RFC vor: .

Curl kommt entsprechend nur mit urlencoded links klar, mit htmlentity-escapten Links nicht:
michael$ curl -I "http://localhost/test&#039;&amp;.php"
HTTP/1.1 404 Not Found
--
$ curl -I http://localhost/test%27%26.php
HTTP/1.1 200 OK
--
$ curl -I "http://localhost/test'&.php"
HTTP/1.1 200 OK

Es hängt also vom Browser ab, der in deinem Fall die "htmlentity escapten" Urls abgreift und on-the-fly zu urlencoded respektive UTF8 Links umbaut.
Deswegen fällt dieses Problem auch normalerweise nicht ins Gewicht. Trotzdem sind die Urls "http://localhost/test&#039;&amp;.php" und "http://localhost/test%27%26.php" nicht die gleichen.

0
ts
ts06.05.1116:22
Ich würde nicht sagen, dass wir am Thema vorbei sind. Wir diskutieren schließlich darum, wie man eine Verknüpfung korrekt erzeugt.

Du beziehst dich wohl auf „2.1. Percent-Encoding”? In 2.2 über reservierte Zeichen steht aber „they may (or may not) be defined as delimiters” und zu den reservierten Zeichen gehören auch & danach müsste dann <a href="http://example.com/test?ad&b=c">Download</a> korrekt sein. Wenn man das so in den W3C-Validator eingibt, dann…gibt es einen Fehler mit dem Hinweis anstatt dessen &amp; zu benutzen.

curl versteht kein HTML, es ist nur ein einfaches Programm zum Übertragen von Dateien.

Das Protokoll gehört doch mit zur URI, also könnte man dieses auch escapen:
curl http%3A%2F%2Fexample.com%2Ft%22est%3Fad%26b%3Dc
curl: (6) Couldn't resolve host 'http%3A%2F%2Fexample.com%2Ft%22est%3Fad%26b%3Dc'

Hmm.
0
micheee06.05.1117:41
...ja und URLs verstehen auch kein HTML, deswegen kennen Sie auch keine Character Entities, dort kommt eben der Browser ins Spiel, von daher ist dein Ansatz mit htmlentities im Browser richtig
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.