Archief - PHP: fout in header()

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.

Kipp^Smith

Legacy Member
PHP:
<?PHP

$bestand = $_GET["bestand"];

$size = filesize($bestand);

header("Content-Type: application/unknown");
header("Content-length: $size");
header("Content-Disposition: attachment; filename=$bestand");

?>

Als deze code nu in test.php staat, en ik voer test.php?bestand=afbeelding.jgp uit (waarbij afbeelding.jpg in dezelfde map als test.php staat), dan krijg ik wel een downloadkadertje, maar de grootte is altijd 0 byte...

Ah ja: als ik een onbestaand bestand opgeef, krijg ik het zelfde resultaat.
Ik neem aan dat hij mijn test.jpg gewoon niet kan vinden.

Iemand een idee?
Alvast bedankt.

Edit: ook Content-Type: application/octet-stream doet niets.

Kipp^Smith

Legacy Member
killgore zei:
doe eens een file_exists op $bestand

Hij kan de size berekenen, dus ik was er vrij zeker van dat $bestand juist is.

Afijn, echo file_exists($bestand); geeft 1, dus true...

Iets anders?

killgore

Legacy Member
Voor de rest: zover ik mij kan herinneren is dit niet meer dan een common bug ;) die je dus niet kan omzeilen.

Met gewoon een location header kom je ook al redelijk ver, er zullen enkel sommige bestanden in de browser zelf geopend worden (afbeeldingen bv.)

stealth_wing[MO]

Legacy Member
Als je geen file doorstuurt, is het normaal dat de grootte 0 byte is ;)

Headers zijn headers. Ze bevatten enkel metadata (dus geen echte data, alleen info over de data).

Na je headers moet je de content van de file naar de output sturen. Bv. print("Test"); zou het woordje Test in de file moeten zetten.

zero2one

Legacy Member
als het altijd jpg bestanden zijn kan je dit gebruiken:

PHP:
$bestand = $_GET["bestand"];


if ( is_file($bestand) )	// checken of het een file is en dan zenden
	{ 
	header("Content-type: image/jpg; filename=$bestand"); 
	header("Content-Length: " . filesize($bestand)); 
	readfile($file); 
	exit; 
	}

Kipp^Smith

Legacy Member
Shitterend!

PHP:
<?PHP

$bestand = $_GET["bestand"];

$size = filesize($bestand);

header("Content-Type: application/octet-stream");
header("Content-length: $size");
header("Content-Disposition: attachment; filename=$bestand");

readfile($bestand); 

?>

Werkt perfect. Hartelijk dank!

zero2one

Legacy Member
af en toe eens te rade gaan in die fantastische on-line documentatie kan helpen:

php.net

kijk naar het voorbeeld voor pdf (laatste voorbeeld voor de User Contributed Notes)
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