download per php starten
hi
habe folgendes problem:
ich habe eine form, in der der user seine email-adresse eingeben muss. Diese wird dann auf richtigkeit überprüft, was soweit auch alles funktioniert.
Wenn der User seine mail angegeben hat, und auf den Submit-button klickt, und die mail "richtig" ist, soll ein download gestartet werden (files liegen auf dem server). Ansonsten natürlich nicht.
Logischerweise kann ich den link ja nicht direkt auf den button legen, weil er ja sonst ausgeführt wird, egal was die prüfung der Mail ergibt.
Was ich also brauche ist eine funktion, oder ein befehl mit dem ich einen download per php starten kann.
Danke schonma!
Mfg
Antwort schreiben
Antwort 1 von Supermax vom 29.08.2019, 14:41 Options
Du kannst die komplette Datei direkt durch das PHP-Script ausgeben lassen; das hat den Vorteil, daß du die Datei auch außerhalb des übers WWW erreichbaren Verzeichnisbaums ablegen kannst, wodurch ein Download ohne Überprüfung durch das Script praktisch nicht möglich ist (saubere Programmierung vorausgesetzt).
Der entsprechende Codeteil könnte für eine PDF-Datei z.B. so aussehen:
// Code der erst nach erfolgter Überprüfung ausgeführt wird
$f = fopen('[i]Dateiname[/i]','rb');
if ($f) {
header("Content-Type: application/pdf");
fpassthru($f);
fclose($f);
}
Statt fopen() und fpassthru() kann man auch readfile() verwenden.
Antwort 2 von _mpact vom 29.08.2019, 14:53 Options
hi
das problem is nur das das keine files sind die man lesen kann (also so mit buchstaben und wörtern) sonder zB zip-Files, oder ähnliches.
Antwort 3 von _mpact vom 29.08.2019, 15:01 Options
hab den code trotzdem mal mit nem pdf getestet. Das bekomm ich in meinem Browser geschrieben:
Zitat:
%PDF-1.4 %Çì¢ 5 0 obj <> stream xœ‘OK1Åïùs32f&ÿA ÕÖ¢H¥%‚ ž*„"Õïfcwׂ¡»—Ùɼ7ùíÛƒAb0ÝÛ›¸XGØ~‰=p¡5™C‚Ìs`cýhc fb%šÖ‹Cñ¹{‘ÐvOkü®7;¸*UJˆ”7ÑÙ&“| p! à<#(;!A•w¡Ù‚&ƒ¦ _ų¼Tºª‰g¹TSžå\éˆl¼òih–±9Q£‹d«óK¹Ä˜”ûnÓ™˜—Êt_¯ÖÃ÷ðD?ô§`¥ÊjÜ?Xg±eÑyK^N•fŒ™)Ë[¥š˜‚¼ŽçC5AiÉdäµÒ]ÎìåÃ8°ËEÝ´=£O†H.†+=*MÝ“åztš¶ó˜Ž’hò˜ÒñžÞhr ö1ŽIÕjRåüTá·¸W✔œendstream endobj 6 0 obj 329 endobj 16 0 obj <> stream xœµ‘MK1†ïù¹™3Éä ¤ÐÚâµÒDO B‘êÿ“ݶ»•ztsØa&ïÌ›y6\®ëÙË5;[¾údnR°MÒ˜èx2Rò܇í5Œ|üÎæ¬iÀ—ÛàcÅ6,‚_“èÇË5åªÕLäù•Õ¾Q—õrò
... usw...
Antwort 4 von Supermax vom 29.08.2019, 15:14 Options
Ob es sich um Text- oder binärdateien handelt sollte eigentlich egal sein, kann sein daß ich den MIME-Typ falsch angegeben habe - dieser muß natürlich für jeden Dateityp anders sein, für ZIP-Archive z.B. "application/zip". "application/octet-stream" gibt einen allgemeinen Byte-Strom an, die meisten Browser öffnen dann einen Download-Dialog.
Antwort 5 von _mpact vom 29.08.2019, 16:52 Options
danke für deine mühe!
habs jetzt mal mit JavaScript gelöst. einfach den php-tag schließen, javacode, und dann den php tag wieder öffnen.
"irgend ein php code"
?>
<script language="JavaScript">
<!--
var file ="<?php echo $filepath;?>";
window.location.href=file;
//-->
</script>
<?php
"irgend ein php code"
$filepath enthält den pfad und den dateinamen der gedownloaded werden soll.
Allerding hab ich nun ein neues Problem: Anstatt einem Download-fenster öffnet sich so ein Windows-Login-Fenster, das nach Benutzername und passwort fragt.
Ein Freund hat gesagt das liegt vllt an den MIMETYPES, konnte aber auch nich mehr dazu sagen.
Kann mir damt vllt jemand weiterhelfen?
Auf meinem Server läuft IIS 6 und php 5.2.3
thx