[PHP] Download externe bestanden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Intheweb
  • Registratie: April 2005
  • Laatst online: 20:04
Zo, dit is mijn case die ik even moet zien te kraken.

Wat is het probleem
Momenteel ben ik bezig met het bouwen van een Media Asset Management systeem. Dit systeem slaat alle toegevoegde bestanden toe aan een database die meer info bevat zoals projecten, klanten en dergelijke die aan de bestanden zijn gekoppeld.

Nu zit er aan de front-end een play-out in de vorm van een script. In dit geval download.php

De server waar de bestanden op staan staat los van de server waarop het script draait.

Het moet niet mogelijk zijn voor gebruikers dat ze de fysieke locatie zien van het bestand.
Nu is het lokaal mogelijk om dit te regelen door de bestanden lokaal op te vragen en in te laden in de header. Maar is dit ook mogelijk met remote bestanden.

Moeten die bestanden altijd in worden geladen op die server waar ook dat script draait of kan je ook daarom heen het bestand inladen.

Alvast bedankt!

Doe maar een onsje meer...


Acties:
  • 0 Henk 'm!

  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 05-09 21:19

Wacky

Dr. Lektroluv \o/

Heb je al geprobeerd door een extern bestand in te laden via fopen() en weer te outputten via fwrite()? Volgens mij moet dit gewoon lukken.

Nu ook met Flickr account


Acties:
  • 0 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
Probeer het eens uit, zou ik zeggen ;)

Nee maar ff serieus, als de php instellingen toestaan dat een remote file als een lokale file geopend kan worden (standaardinstelling) dan is er niks aan de hand en kan je gewoon een url als bestandnaam aangeven.

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Mja, je OP bevat niet echt genoeg informatie om te kunnen zeggen of dit zonder problemen zal werken. Je vertelt bijvoorbeeld niet of je op IIS of op Apache draait, of onder Windows/Linux.

Als de bestanden via het netwerk opgevraagd zullen worden zal iig voor windows de user waaronder Apache draait netwerk rechten moeten hebben op de fileserver bak.

Je kan dit heel simpel allemaal oplossen door gewoon op de PHP bak een netwerk share te mounten naar een drive en vanaf daar de files door te fpassthru()'en, maar let wel op die user rechten, da's een valkuil :)

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Je kan in je download het juiste bestand opzoeken en vervolgens de juiste header sturen (http://php.net/header). Als je een attachment header stuurt en de filename meegeeft, krijgt de gebruiker gewoon die filename voorgeschoteld, en heeft geen idee dat het eigenlijk ergens anders vandaan komt.

Verder geef je daarna het bestand door met readfile (http://php.net/readfile), waarbij in de manual de volgende opmerking staat:
Tip: Je kunt een URL als bestandsnaam gebruiken met deze functie als de "fopen wrappers" aan staan. Zie fopen() voor meer informatie.
Het ligt dus aan je fopen wrappers of dat gaat lukken. Anders moet je passthrou server (die met download.php) als buffer spelen door het bestand te downloaden, tijdelijk op te slaan en vervolgens aan de gebruiker te geven. Maar dat kost natuurlijk wat meer tijd :)

Acties:
  • 0 Henk 'm!

  • sjhgvr
  • Registratie: Januari 2004
  • Laatst online: 04-08 14:27
Server A: Bevat bestanden
Server B: Site waar t downloadscript op draait.

Ik zou zeggen: Configureer Server A zo, dat alleen Server B toegang heeft tot de bestanden.
En maak t download script zo, dat t bestand van Server A gelezen word (lees buffer) en die dan naar de downloader toegooid.

oisd.nl


Acties:
  • 0 Henk 'm!

  • Intheweb
  • Registratie: April 2005
  • Laatst online: 20:04
Wat betreft server config is alles Unix en PHP.

Fysiek staan de servers ver van elkaar af. Mediapark en Amsterdam

De server met het script willen we niet zo graag veel dataverkeer door heen laten stuwen.
De server met de mediabestanden hebben we onbeperkte datalimiet.

Een oplossing als fpassthru() en fopen() gaan allemaal via de scriptserver, deze buffert de data en geeft het dan via zijn server weer uit. Dus genereert dit ook weer extra dataverkeer op de scriptserver wat dus niet de bedoeling is.

Doe maar een onsje meer...


Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 10:08

Spockz

Live and Let Live

Kun je dan niet een soort sessie systeem opstellen? Een klant wil via de frontserver een bestand downloaden, jij geeft vervolgens door aan de fileserver. Je stuurt de klant door naar de fileserver met een bepaalde code die geldig is voor een x-tijd. :)

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!

  • sjhgvr
  • Registratie: Januari 2004
  • Laatst online: 04-08 14:27
Downloadscript stuurt user IP naar bestandenserver, zodat die vervolgens toegang krijgt?

[ Voor 3% gewijzigd door sjhgvr op 02-02-2007 16:35 ]

oisd.nl


Acties:
  • 0 Henk 'm!

  • Intheweb
  • Registratie: April 2005
  • Laatst online: 20:04
Spockz schreef op vrijdag 02 februari 2007 @ 16:21:
Kun je dan niet een soort sessie systeem opstellen? Een klant wil via de frontserver een bestand downloaden, jij geeft vervolgens door aan de fileserver. Je stuurt de klant door naar de fileserver met een bepaalde code die geldig is voor een x-tijd. :)
DaPi schreef op vrijdag 02 februari 2007 @ 16:35:
Downloadscript stuurt user IP naar bestandenserver, zodat die vervolgens toegang krijgt?
Thnx voor je reactie. Maar ben bang dat dit ook niet ook niet helemaal het probleem oplost.
Want alsnog word je naar de download server gebracht.

Het is meer het punt dat we vele actie's via het script willen laten lopen zoals het kunnen inladen van .flv bestanden in flashscripts. En omdat flash soms wat loopt te rotzooien met de headers kan een redirect soms niet werken.

[ Voor 29% gewijzigd door Intheweb op 02-02-2007 16:37 ]

Doe maar een onsje meer...


Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 10:08

Spockz

Live and Let Live

Sorry, maar je hebt twee opties. Of je laat de client iets downloaden via de mediaserver of via de fileserver. De bestanden moeten ergens vandaan komen. Als ze niet direct van de fileserver vandaan mogen komen dan zullen ze van de mediaserver moeten komen, deze zal ze daarom zelf van de fileserver afhalen.
Dit levert echter een dubbele load op. En dit wil je niet.

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!

  • Intheweb
  • Registratie: April 2005
  • Laatst online: 20:04
Tja, er zit niks anders op. Ik ga het in de groep gooien.

In iedergeval bedankt en zal proberen een update te geven hoe we het hebben opgelost.

Doe maar een onsje meer...


Acties:
  • 0 Henk 'm!

  • Intheweb
  • Registratie: April 2005
  • Laatst online: 20:04
Excusses voor deze late reactie:

Ik wil toch nog even laten weten dat we het hebben gelaten bij een header redirect in PHP.
Dit is de meest eenvoudige manier en we kunnen voor de header redirect genoeg dingentjes doen zoals loggen.

[ Voor 8% gewijzigd door Intheweb op 02-05-2007 09:09 ]

Doe maar een onsje meer...

Pagina: 1