[PHP/Apache/Linux] Plaatje van buiten webroot beschikbaar ma

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik hoop dat dit het juiste forum is. Het gaat om het volgende: ik heb op een linux-server in een bepaalde directory een hoop plaatjes staan. Deze directory staat niet onder de apache (1.3) webroot. Nu kan ik met PHP gewoon in deze map lezen en schrijven. Ik kan bijvoorbeeld een script maken wat het aantal bestanden in die map telt, en dat aantal op een webpagina weergeeft. Ik kan alleen niet in het script het plaatje zelf afbeelden (met [img]lokatie/van/het/bestand[/img]) omdat apache daar niet kan komen. Ik vroeg me nu af of er een manier is dat het bestand op een of andere manier mbv PHP toch kan worden weergegeven op een webpagina?

Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 14:31
Kijk eens naar readfile.

Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 19:07

alienfruit

the alien you never expected

Maakt dat nou eigenlijk nog uit qua performances of je het plaatje meteen inlaad of dat je het via PHP doet?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

alienfruit schreef op maandag 25 juli 2005 @ 10:44:
Maakt dat nou eigenlijk nog uit qua performances of je het plaatje meteen inlaad of dat je het via PHP doet?
Ja, natuurlijk maakt het verschil of dat je apache alles volledig laat afhandelen, of ook nog een scriptengine moet starten ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Rob
  • Registratie: Februari 2000
  • Niet online

Rob

alienfruit schreef op maandag 25 juli 2005 @ 10:44:
Maakt dat nou eigenlijk nog uit qua performances of je het plaatje meteen inlaad of dat je het via PHP doet?
Dat maakt uit, maar op een matig bezochte site merk je daar niets van.

In the beginning the Internet was a bunch of smart users with dumb terminals. Now...


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 19:07

alienfruit

the alien you never expected

Aha, natuurlijk beetje dom |:(

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Tnx! Met readfile() lukt het overigens niet, die is alleen voor tekst-bestanden, maar de gerelateerde fucntie fpassthru() doet het werk precies!!

Acties:
  • 0 Henk 'm!

  • [ti]
  • Registratie: Februari 2000
  • Niet online
Waarom maak je niet gewoon een symlink (ln -s) in de webroot naar je plaatjes directory (buiten de webroot)? Met fpassthru e.d. gaat het wel werken, maar zal de client niet cachen (tenzij je nog moeilijker gaat doen)...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Symlinks volgen staat uit in de apache-configuratie. Zou ik wel aan kunnen zetten, maar eigenlijk vind ik 't zo ook wel goed. Het aantal bezoekers van de site is minimaal (alleen ik en een paar scriptkiddo's die portscans uitvoeren en de plaatjes nooit zullen zien :)) Verder is 't ook een beetje spelen/leren dus hoeft 't niet allemaal de beste performance te zijn. Wel bedankt voor je suggestie!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmmm .. toch nog een complicatie: als ik fpassthru() gebruik werkt dat (het plaatje wordt getoond in een browser) tenzij ik het tussen <html>-tags zet. Dus als ik een simpel script maak
PHP:
1
2
$fp = fopen($filename, "rb");
fpassthru($fp);


en dat open in mn browser wordt het plaatje getoond. Maak ik er echter van
PHP:
1
2
3
4
echo "<html><head></head><body>";
$fp = fopen($filename, "rb");
fpassthru($fp);
echo "</body>";


dan zie je het plaatje niet maar een gigantische reeks letters (het plaatje binair, of hexa, of wat is het). Is daar nog omheen te werken? Ik wil eigenlijk van het plaatje een hyperlink maken, dus 'm tussen <a href="iets"></a> tags zetten. Of wordt het dan toch het makkelijkst om de symlink-optie te volgen?

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Fpassthru stuurt het bestand, inclusief headers, en als je daar <html> bijzet worden zowel de headers gewijzigd als het bestand veranderd.
<a href="iets"></a>
Dan doe je toch iets als:

code:
1
<a href="iets">[img]"plaatjesscript.php?plaatje=test.jpg"></a[/img]

plaatjesscript.php kun je $_GET['plaatje'] uit laten lezen, en die weer laten geven. Wel even checken of er niet iets gebeurt als ../../../gek/bestand.jpg

Wat meer uitleg:
De output van PHP moet gewoon HTML of een downloadbaar bestand worden. Als je html typt, kun je daar ook niet de hex/binary code van een plaatje tussenzetten, daar link je ook naartoe met een img-tag.

[ Voor 69% gewijzigd door GlowMouse op 25-07-2005 15:26 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
GlowMouse schreef op maandag 25 juli 2005 @ 15:23:
Dan doe je toch iets als:
[snip]
Tnx! Dat doet de trick :)

Acties:
  • 0 Henk 'm!

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 20-09 00:06
Je kan dit soort dingen het beste regelen in de Apache configuratie, behoudens je daar de toegang toe hebt:

http://httpd.apache.org/docs/1.3/mod/mod_alias.html#alias
Pagina: 1