Toon posts:

[PHP] download via script, geen toegang in browser

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

Verwijderd

Topicstarter
Hallo,

ik weet hoe je een download kunt aanbieden via een script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$file = "test.zip";
$name = "bestand1.zip";


if ($fp=@fopen($file,"r"))
    {  
        header("Content-type: application/octet-stream");  
        header("Content-Disposition: attachment; filename=" . $name);  
        header("Pragma: no-cache");  
        header("Expires: 0");  
        @fpassthru($fp);  
    }
?>

Maar hoe kan ik voorkomen dat hetzelfde bestand rechtstreeks vanuit de browser kan worden gedownload ?

Ik heb wat zitten kloten met rechten, maar telkens kan heb ik via het script ook geen rechten meer.
De bestanden voor de root zetten is hier helaas geen optie.

Wie heeft een andere oplossing (of de juiste rechten) ?

Bedankt.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Buiten de webroot zetten.

Programmer - an organism that turns coffee into software.


  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 05-06 07:37
kan je niet met .htaccess rommelen ?

  • flat
  • Registratie: Mei 2000
  • Niet online
ja, gewoon de files in een bepaalde dir zetten, en daar een .htaccess in zetten
of gewoon vage filenames verzinnen, maar de eerste oplossing is mooier, beter en makkelijker

"Happiness is a way of travel, not a destination."
--Roy Goodman


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op zondag 04 november 2001 17:38 schreef razor-x het volgende:
kan je niet met .htaccess rommelen ?
dat kan natuurlijk ook, maar persoonlijk ben ik er geen voorstander van.
code:
1
2
3
<FILES "2.php" >
deny from all
</FILES>

voor 2.php mag je natuurlijk elke andere file naam in vullen

Programmer - an organism that turns coffee into software.


  • razor-x
  • Registratie: Februari 2001
  • Laatst online: 05-06 07:37
Op zondag 04 november 2001 17:42 schreef LuCarD het volgende:

[..]

dat kan natuurlijk ook, maar persoonlijk ben ik er geen voorstander van.
code:
1
2
3
<FILES "2.php" >
deny from all
</FILES>

voor 2.php mag je natuurlijk elke andere file naam in vullen
nee een anti leech ding bedoel ik :)

Verwijderd

Topicstarter
Op zondag 04 november 2001 17:44 schreef razor-x het volgende:

[..]

nee een anti leech ding bedoel ik :)
Hoe werkt dat dan ?
Waar vind ik een overzicht van de mogelijke opbouw van .htaccess ?

alle files in .htaccess zetten is erg lastig (veranderen elke dag)

Kan ik in .htaccess aangeven dat alle files in een directorie (incl. subdirectory) niet te bekijken zijn via de browser, maar dus wel toegankelijk zijn via een php script ?

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Tuurlijk....

maak een sub dir aan en zet daar alle bestanden in die je wil laten downloaden via het script.

Maak dan een .htaccess in met het volgende
code:
1
deny from all

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Bedankt !

  • Grijns
  • Registratie: Januari 2000
  • Laatst online: 21-08 12:37
Hoe werkt dit voor een jpg ?

ik heb dit gedaan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&lt;?php
$file = &quot;banners\banner.jpg&quot;; 
    
if ($fp=@fopen($file,&quot;r&quot;)) 
    {   
    header(&quot;Content-type: image/jpg&quot;);   
    header(&quot;Content-Disposition: inline; filename=&quot; . $file);   
    header(&quot;Pragma: no-cache&quot;);   
    header(&quot;Expires: 0&quot;);   
    @fpassthru($fp);   
    } 
else {

    echo &quot;&lt;HTML&gt;ERROR&lt;/HTML&gt;&quot;;

}
?&gt;


maar hij begint nu heel erg lang te laden en laat geen plaatje zien... ik doe iets fout.. maar wat?

Verwijderd

Haal die @ voor fpassthru() eens weg en ook die voor fopen(), het is wel handig om een eventuele foutmelding te zien :)

  • Grijns
  • Registratie: Januari 2000
  • Laatst online: 21-08 12:37
heej ,das vreemd. nu opeens laat hij me wel ene bestandje download... maarja das dus niet de bedoeling. hij moet em laten zien... tis trouwens een vreemd/fout bestand. gewoon wat zooi dus.

huidiuge code
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
&lt;?php
$file = &quot;banners\banner.jpg&quot;;
$name = &quot;banner.jpg&quot;;
    
if ($fp=@fopen($file,&quot;r&quot;)) 
    {   
    header(&quot;Content-type: image/jpg&quot;);   
    header(&quot;Content-Disposition: inline; filename=&quot; . $name);   
    header(&quot;Pragma: no-cache&quot;);   
    header(&quot;Expires: 0&quot;);   
    @fpassthru($fp);   
    } 
else {

    echo &quot;&lt;HTML&gt;ERROR&lt;/HTML&gt;&quot;;

}
?&gt;


het gedownloade bestandje is te klein en geen plaatje.. vreemd.
zonder @ krijg ik trouwens geen errors ofzo.

Verwijderd

haal deze regel is weg:

code:
1
header(&quot;Content-Disposition: inline; filename=&quot; . $file);

  • Grijns
  • Registratie: Januari 2000
  • Laatst online: 21-08 12:37
Verwijderd schreef op 02 november 2002 @ 17:58:
haal deze regel is weg:

code:
1
header(&quot;Content-Disposition: inline; filename=&quot; . $file);
dan laat ie me een naamloos bestandje downlaoden...

  • Grijns
  • Registratie: Januari 2000
  • Laatst online: 21-08 12:37
na ff checken blijkt de gedownloade stukje de eerste 65 bytes van het bestandje... moet ik fpassthru soms forceren door te lezen?

-edit-

aha, nieuwe code en gebeurt meer, het volledige plaatje wordt gedownload. woohoo

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
&lt;?php
$file = &quot;banners\banner.jpg&quot;;
$name = &quot;banner.jpg&quot;;
    
if ($fp=fopen($file,&quot;r&quot;)) {   
    header(&quot;Content-type: image/jpg&quot;);   
    header(&quot;Content-Disposition: inline; filename=&quot; . $name);   
    header(&quot;Pragma: no-cache&quot;);   
    header(&quot;Expires: 0&quot;);   

    readfile($file);
} 
else {

    echo &quot;&lt;HTML&gt;ERROR&lt;/HTML&gt;&quot;;

}
?&gt;


-edit-

yep dit doet het, dit script kan gebruikt om file/pics te showen vanuit dirs die beveiligd zijn. mooi. thanks
Pagina: 1