[PHP] Redirecten na een download

Pagina: 1
Acties:
  • 255 views sinds 30-01-2008
  • Reageer

  • pgussow
  • Registratie: Maart 2003
  • Laatst online: 18-08 16:13
Situatie:
Als iemand een willekeurige file wil downloaden van mijn site moet hij een een license page voor zijn neus krijgen die hij moet accepten voordat hij de file kan downloaden. Na de download moet hij terug gestuurd worden naar de page vanaf waar hij op die download link heeft geklikt.

Wat heb ik tot nu toe gedaan:
- Via de mod_rewrite en de RewriteRule alle download links opvangen en af laten handelen door een download.php dit werkt.
- In die download.php laat ik de license zien met een checkbox van 'I agree' dit werkt.
- Als de checkbox gechecked word en de gebruiker klikt op de download-button(oftewel: een form-submit) krijgt hij de daadwerkelijke file. dit werkt.
- Na de download (of als de download eenmaal begonnen is) moet de browser terug naar de page waar hij vandaan komt. dit werkt (nog) niet.

Probleem:
Het laatste puntje. En ik weet eigenlijk ook niet hoe ik dat kan oplossen. Want de download.php die serveert de daadwerkelijke file. Dus ik kan daar geen HTML/JS script aan hangen omdat het gewoon een bestand is dat op schijf word opgeslagen. Ook kan ik de Redirect header niet gebruiken. Immers: hij moet eerst de file downloaden (of in ieder geval de download starten) voordat hij de redirect doet.
Op Google heb ik allerlei zoektermen gebruikt: Redirect after submit, Redirect after download, etc

Iemand enig idee hoe ik dit kan oplossen (of mij de juiste Google termen geven om verder te zoeken)?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:10

TeeDee

CQB 241

Dit is vrij lastig te realiseren. Waarom? HTTP is in principe stateless. De gebruiker klikt ergens op, wordt er naar toe verzonden en feitelijk is het dan over.

Heart..pumps blood.Has nothing to do with emotion! Bored


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

Snake

Los Angeles, CA, USA

Op het moment dat hij op de form-submit duwt, open je een nieuw venster met daarin de download. Dan ontwijk je het probleem :)

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


  • Icelus
  • Registratie: Januari 2004
  • Niet online
Zelf heb ik dit opgelost door in een sessie de $_SERVER['REQUEST_URI'] op te slaan en deze weer aan het eind (bij de download of bijv. tussendoor) te gebruiken.

Developer Accused Of Unreadable Code Refuses To Comment


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

Snake

Los Angeles, CA, USA

Wat je ook kan is onsubmit = iframe openen met daarin de download.

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


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 18-11 20:57
Microsoft doet het ook zo :)

Op een willekeurige pagina klik je op een download-link, er wordt een kleine popup geopend met als pad het gevraagde bestand. Ondertussen wordt de gebruiker doorverwezen naar een andere pagina met daarop een thank-you-tekst.

Voorbeeldje in code (ongetest):
HTML:
1
2
3
4
5
6
7
8
9
10
<script type="text/javascript">
var fileURL = "http://download.microsoft.com/download/4/d/a/4da3a5fa-ee6a-42b8-8bfa-ea5c4a458a7d/dotnetfx3setup.exe";

function downloadFile()
{
  window.open(fileURL, 'downloadwin', 'width=100 height=100 top=10 left=10 scrollbars=no resizable=no address=no toolbar=no status=no');
}
</script>

<a href="/dlty.html" onclick="downloadFile()">Klik hier om het .NET Framework 3.0 te downloaden</a>

Edit: verrek, het werkt nog ook, zie http://got.alex-media.nl/dl.html

Nog wel een tip: zorg ervoor dat er op de 'thank you'-pagina alsnog een link is naar het bestand, voor de mensen die eventueel popups blocken :p

[ Voor 14% gewijzigd door Alex) op 07-06-2007 16:27 ]

We are shaping the future


  • pgussow
  • Registratie: Maart 2003
  • Laatst online: 18-08 16:13
Een popup zie ik niet zo zitten vanwege alle popup blockers en IE7.

Het iFrame-verhaal zou misschien kunnen werken. Maar dan heb je volgens mij nog 2 problemen:
1. Wanneer weet je dat de browser daadwerkelijk is begonnen met downloaden zodat je de huidige page kan redirecten via JavaScript?
2. Stel je zou het met een iframe doen, dan heb je zo iets:
HTML:
1
2
3
4
5
6
7
<html>
    <body>
       <iframe 
           src="/download.php?id=3" 
           onload="window.location = '/files/index.html';"/>
   </body>
</html>


Hoe weet je nou zeker dat die gebruiker op accept heeft geklikt? Het enige dat ik mij voor kan stellen is dat je een sessie aanmaakt en bijhoud en serverside in de session bewaard dat ie geaccept heeft.
Icelus schreef op donderdag 07 juni 2007 @ 16:22:
Zelf heb ik dit opgelost door in een sessie de $_SERVER['REQUEST_URI'] op te slaan en deze weer aan het eind (bij de download of bijv. tussendoor) te gebruiken.
Hoe bedoel je precies 'aan het eind (bij de download of bijv. tussendoor) te gebruiken'?
Waar gebruik je die URL dan weer en hoe?

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 18-11 20:57
Als je een iframe geeft zal Internet Explorer gaan zeuren dat er een bestand wordt gedownload en moet de gebruiker eerst op een infobalk klikken. Met een popup heb je dat niet...

Edit:
Zie http://got.alex-media.nl/dl2.html.

Bij de eerste pagina wordt er in dat iframe - zodra er op de link wordt geklikt - een file geladen om te downloaden, echter verschijnt er niks doordat de pagina wordt geünload. Op de volgende pagina krijg je een infobalk...

[ Voor 43% gewijzigd door Alex) op 07-06-2007 16:41 ]

We are shaping the future


  • GlowMouse
  • Registratie: November 2002
  • Niet online
Is het geen optie om de gebruiker eerst terug te sturen naar de pagina waar hij vandaan kwam, en die pagina dan zo aan te passen dat de download gestart wordt (bv met JS redirecten naar de download)?

[ Voor 3% gewijzigd door GlowMouse op 07-06-2007 17:56 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
JS = WEB, PRG >> WEB

Ik zou overigens gewoon een meta refresh gebruiken op de "thank you" pagina die verwijst naar de download.

[ Voor 73% gewijzigd door RobIII op 07-06-2007 18:07 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 18-11 20:57
Als je een meta-refresh o.i.d. gebruikt krijg je van IE die informatiebalk, als je die wilt voorkomen is een popupje echt the only way to go...

We are shaping the future


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Alex) schreef op donderdag 07 juni 2007 @ 18:25:
Als je een meta-refresh o.i.d. gebruikt krijg je van IE die informatiebalk, als je die wilt voorkomen is een popupje echt the only way to go...
Die informatiebalk is er niet voor niets; ik zou niet weten waarom je die zou willen voorkomen.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 18-11 20:57
In mijn ogen is die infobalk een gevalletje "het iets te goed willen doen" en is hij hinderlijk bij normaal gebruik. Hoeveel sites zijn er niet die wijzen naar die balk en erbijzetten: "klik erop en klik op 'download'"?

We are shaping the future


  • pgussow
  • Registratie: Maart 2003
  • Laatst online: 18-08 16:13
Ik ben uiteindelijk toch maar voor Alex zijn oplossing gegaan. Die werkt redelijk goed. Bedankt voor het meedenken!
Pagina: 1