[PHP] Bestand laten downloaden en tegelijk verder surfen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik maak gebruik van een onzichtbaar iframe om een octet stream te versturen:
code:
1
echo '<iframe name="onzframe" src="videodownload.php" id="onzframe"></iframe>';


In videodownload.php staat vervolgens deze code:
code:
1
2
3
4
5
include_once("../include.php"); 
if ($_SESSION["Sendfile"] !== "") { 
    SendFile($_SESSION["Sendfile"]); 
    $_SESSION["Sendfile"] = ""; 
}


De functie sendfile is als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function SendFile($FileName) 
{ 
  //http://www.dynamicflow.nl/test/1.wmv"; 
  //header("Content-Type: " . mime_content_type($FileName)); 
  // if you are not allowed to use mime_content_type, then hardcode MIME type 
  // use application/octet-stream for any binary file 
  // use application/x-executable-file for executables 
  // use application/x-zip-compressed for zip files 
  header("Content-Type: application/octet-stream"); 
  header("Content-Length: " . filesize($FileName)); 
  header("Content-Disposition: attachment; filename=\"$FileName\""); 
  header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
  $fp = fopen($FileName,"rb"); 
  fpassthru($fp); 
  fclose($fp); 
}


Mijn vragen zijn de volgende:

- Ik zou graag een naam mee geven aan het bestand. Dus de standaard naam die de gebruiker in zijn download scherm te zien krijgt aanpassen, hoe doe ik dit?

- Een groter probleem is dat in deze opzet de gebruiker niet verder kan surfen op de site terwijl de download bezig is. Pas als de download helemaal klaar is kan de gebruiker weer naar een andere pagina. Dit moet uiteraard beter geregeld worden maar hoe doe ik dit? Eerder werkte ik zonder iframe en liet ik de stream versturen vanuit de hoofdpagina (index.php) maar dan had ik precies hetzelfde probleem..

thanx!!

Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 21-09 10:08

Spockz

Live and Let Live

Het eerste kun je oplossen door in je header iets anders bij 'filename' te zetten.

Het tweede komt doordat je het downloaden laat activeren door een sessievariabele. Deze variabele wordt pas weer leeggemaakt op het moment dat de download voltooid is. Tot die tijd zal dus elke keer de download opnieuw gestart worden als dat bestand (videodownload.php) aangeroepen wordt.

Gebruik voortaan [code=php], dan krijg je syntaxhighlighting

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

Verwijderd

1: Wat zou die Content-Disposition header doen volgens jou? En dan met name de filename parameter.
2: Waarom zou er een pagina, venster of iframe nodig zijn om een HTTP connectie in stand te houden?

Ik weet niet wat je je allemaal in je hoofd hebt gehaald, maar natuurlijk is het prima te doen om een download te laten doorgaan terwijl de gebruiker kan verder surfen. Het is eigenlijk niet te doen om te zorgen dat dat niet kan.

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Als ben op 'download' klikt, moet je zorgen dat er een popup verschijnt, een blanco, en daarin bied je de download aan.

Heb je ook een online voorbeeld?

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • WormLord
  • Registratie: September 2003
  • Laatst online: 21-09 10:10

WormLord

Devver

Zoals je het nu doet is je session gelocked tijdens de download.
Je kan dat voorkomen door voor de download even session_write_close aan te roepen.

Verwijderd

Topicstarter
bedankt voor alle reacties!

dat met die filename dat lukt nu prima, dat me dat zelf niet opgevallen was:-P

Verder lukt het me nu ook om de gebruiker gewoon verder te laten surfen tijdens het downloaden. Het probleem zat inderdaad in die sessie, dat is nu dus opgelost.

Wel heb ik één andere vraag. Ik gebruikt een iframe, omdat ik nadat de download wordt aangeroepen nog meer content op de pagina wil neerzetten. Ik doe dus zoiets:
PHP:
1
2
echo '<iframe name="onzframe" src="videodownload.php" id="onzframe"></iframe>';
echo 'hier nog meer content';


enige probleem dat ik nu nog heb is dat mijn download geblokkeerd wordt door IE. Uiteraard zet ik er bij dat men de download alsnog kan starten door in de balk die dan verschijnt te klikken, maar ik zou ook graag een link aanbieden waarmee men de download alsnog kan starten (zoals je vaak ziet). Echter, welke opzet moet ik hiervoor gebruiken? Als ik namelijk via de link op eenzelfde manier de download weer opstart dan wordt deze opnieuw geblokkeerd. Hoe zorg ik er dus voor als men op de link voor het opnieuw downloaden klikt, dat dit dan wel ineens goed gaat?

Ik kan geen direct link maken naar het bestand, omdat de downloads afgeschermd moeten worden (alleen bepaalde gebruikers hebben toegang), het bestand moet dus via php verstuurd worden.

Iemand een oplossing?

Verwijderd

Topicstarter
hier moet toch een oplossing voor zijn? Ik zie het zo vaak op andere pagina's, iemand die me ff kan vertellen hoe dat werkt?

Verwijderd

Popup met een force-download? Lijkt me opzich toch niet heel erg moeilijk om te maken?

Verwijderd

Topicstarter
mmm die term force-download kende ik nog niet :*)
bedankt!!, na even daarop gegoogled te hebben was het inderdaad zo opgelost
Pagina: 1