[php] file handling

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
Ik heb een script gebouwd maar loop ergens vast. Ik heb op een linux pc verschillende shares gemount. De shares kan ik mbv php al lekker uitlezen. Alleen wil ik een file doorsturen naar de browser zodat je deze gaat downloaden. Net zoals je een ander bestand download.

Nu heb ik echt geen flauw idee hoe je dit doet.

Ik heb dus een lijst met bestanden met teveel verschillenden soorten extenties. Als ik op zo'n file klik moet hij dus deze gaan opslaan.
Ik dacht eerst gewoon <a href=linkie naar file> bladibladibla. Maar ik werk buiten de scope van mijn apache (deze zit in /var/www/html en mijn links zitten in /mnt/...)

Hoe pak ik zoiets aan?

if broken it is, fix it you should


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Een van die manieren om dit door te voeren is door gebruik te maken van die functie, fpassthru(). (Daar staat ook een klein voorbeeldje).

Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Let dan wel op maximum execution tijden en dergelijke :).

Een andere manier zou gewoon zijn om de betreffende directory te symlinken in je apache dir, en even de juiste rechteninstellingen te doen, waardoor je wél gewoon apache kan gebruiken.

Of wat dacht je van een andere webserver draaien op een andere poort, die die betreffende directories wel kan openen. Dan doe je gewoon :

code:
1
<a href="http://www.mijnsite.nl:81/bestand.doc">Bestand</a>


Of een andere poort. Nadeel is dan weer dat sommige mensen gefirewalled zijn en geen andere poorten dan 80 kunnen benutten.

Acties:
  • 0 Henk 'm!

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
Ik denk dat symbolic links het makkelijkst zijn. Doe je dit in linux zelf, of moet er ook nog iets in apache ingesteld worden?

if broken it is, fix it you should


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:51

Creepy

Tactical Espionage Splatterer

elgringo schreef op maandag 31 oktober 2005 @ 15:13:
Ik denk dat symbolic links het makkelijkst zijn. Doe je dit in linux zelf, of moet er ook nog iets in apache ingesteld worden?
Pak de docs van Apache er eens bij zou ik zeggen. Er is een optie FollowSymlinks o.i.d. (de preciese benaming kan je dus zelf opzoeken :P ). Die moet wel aan staan. Verder regel je een symlink in Linux zelf inderdaad.

Maar ik zie niet in waarom je fpasstru niet zou gebruiken tenzij je redelijk grote bestanden hebt.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
Creepy schreef op maandag 31 oktober 2005 @ 16:05:
[...]

Pak de docs van Apache er eens bij zou ik zeggen. Er is een optie FollowSymlinks o.i.d. (de preciese benaming kan je dus zelf opzoeken :P ). Die moet wel aan staan. Verder regel je een symlink in Linux zelf inderdaad.

Maar ik zie niet in waarom je fpasstru niet zou gebruiken tenzij je redelijk grote bestanden hebt.
Ik heb oa isoos van dvd's :D dus dat duurt lang

if broken it is, fix it you should


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Als alle bestanden altijd, ongeacht de extensie, gedownload moeten worden, kun je het best een PHP-bestand aanroepen welke het te downloaden bestand doorgeeft;

Bijvoorbeeld iets als;
aanroep; download.php?bestand=blaat.jpg
PHP:
1
2
3
4
5
6
7
8
9
$padNaarBestanden = "/usr/local/buiten_de_root/";
if(file_exists($padNaarBestanden . $_GET['bestand'])) {
  header("Content-disposition: attachment; filename={$_GET['bestand']}");
  header("Content-Type: application/force-download");
  header("Content-Transfer-Encoding: binary");
  header("Pragma: no-cache");
  header("Expires: 0");
  readfile($padNaarBestanden . $_GET['bestand']);
}

[ Voor 12% gewijzigd door frickY op 01-11-2005 20:09 ]


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

denk dan wel heel goed na over beveiliging. Als je het gewoon op die manier doet, zonder je $_GET te checken, komen mensen op een gegeven moment uit bij /etc/passwd etc. Daar hoef je geen bezwaar tegen te maken natuurlijk, maar... ;)
Pagina: 1