Archief - PHP: Afbeeldingslocatie verborgen houden

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

stoffer

Legacy Member
Ik zou een afbeelding op een site willen plaatsen waarvan de locatie verborgen moet blijven.

Te vergelijken met
<?
include("bestand.txt");
?>
om gegevens op te halen zonder dat de bezoeker weet uit welk bestand deze komen

Nog anders gezegd:
Stel dat ik een afbeelding heb op locatie: http://www.test.com/afb.JPG
dan wil ik niet dat bezoekers die locatie achterhalen maar wil ik de afbeelding wel laten zien wanneer ze bvb ingelogd zijn.

Ofwel zou de afbeelding niet mogen verschijnen wanneer de rechtstreekse url gebruikt wordt.

Heeft iemand hier een eenvoudige oplossing voor?

Lashknife

Legacy Member
eens de prent in de browser cache zit, kan je er niks tegen doen dat ze ze toch in hun bezit krijgen.
En anders proberen hotlinking met htaccess tegengaan? Kunnen ze de prent niet rechtstreeks refereren, maar moeten altijd via de pagina gaan.

Radiance

Legacy Member
Maak een image.php die als parameter een bv. id of naam van een bestand aanneemt.
Met fopen() kan je uw bestandje uitlezen, als je dan nog de juiste header()s meegeeft, dan kan je in je html gewoon het volgende placeren:

PHP:
<?php
ob_start();
// assuming you have image data in $imagedata
$length = strlen($imagedata);
header('Last-Modified: '.date('r'));
header('Accept-Ranges: bytes');
header('Content-Length: '.$length);
header('Content-Type: image/jpeg');
print($imagedata);
ob_end_flush();
?>

<img src="image.php?id=3" />

stoffer

Legacy Member
Lashknife zei:
eens de prent in de browser cache zit, kan je er niks tegen doen dat ze ze toch in hun bezit krijgen.
En anders proberen hotlinking met htaccess tegengaan? Kunnen ze de prent niet rechtstreeks refereren, maar moeten altijd via de pagina gaan.

Ik heb er geen problemen mee dat ze de afbeelding in hun bezit krijgen. Ik wil echter niet dat ze de locatie van de afbeelding te weten komen.
Ik heb zitten prutsen met htaccess maar dat lukte niet echt.

@Radiance:
Om te testen gebruik ik nu volgende code:
PHP:
test.php

<?php
	ob_start();

	$myFile = "afb.JPG";
	$imagedata = fopen($myFile, 'r');

	// assuming you have image data in $imagedata
	$length = strlen($imagedata);
	header('Last-Modified: '.date('r'));
	header('Accept-Ranges: bytes');
	header('Content-Length: '.$length);
	header('Content-Type: image/jpeg');
	print($imagedata);
	ob_end_flush();
?>

PHP:
main.php

<?php
	echo "<img src='test.php' />";
?>

afb.JPG zit in dezelfde map als de *.php bestanden

Ik krijg echter niets te zien, enig idee wat ik nog verkeerd doe?

dJeez

Legacy Member
stoffer zei:
Ik krijg echter niets te zien, enig idee wat ik nog verkeerd doe?
Ja, je leest een binair bestand in als een string en probeert dan via strlen de grootte van dat bestand te bepalen. Gebruik dus vb. filesize en readfile eens in je script.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan