Archief - PHP: Afbeelding dimensies

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.

R3Deye

Legacy Member
Ik probeer de dimensies te weten komen van png afbeeldingen die gemaakt worden (niet ge-saved, maar directe browser output) dmv een php-gd script dat imagecreatefrompng() gebruikt om een nieuwe afbeelding te genereren.

Had eerst geprobeerd met GetImageSize() maar blijkt onmogelijk;

PHP:
$arr = GetImageSize('image.php?id=xxx'); 
$w = $arr[0];
$h = $arr[1];
// Warning: getimagesize(): Read error!
Had gedacht dat het mss dan wel zou lukken met de volgende methode vermits de gegenereerde afbeeldingen van het type png was, maar dit lukt ook niet;

PHP:
$img = ImageCreateFromPNG('image.php?id=xxx');
$w = imagesx($img);
$h = imagesy($img);
// Warning: imagecreatefrompng(): 'image.php?id=xxx' is not a valid PNG file.
Iemand een idee hoe ik dit zou kunnen oplossen?

killgore

Legacy Member
probeer eens:
PHP:
$arr = GetImageSize('http://www.jouwsite.com/image.php?id=xxx');

Imho zal de lib in je php build nu rechtstreeks dat bestand proberen openen (omdat het een lokaal is), en wat gebeurt er dan: hij vindt natuurlijk het bestand img.php?id=xxx niet, want dit bestaat niet. Zelfs al zou hij inzien dat hij img.php gewoon moet openen zal het nog niet werken want hij zal gewoon php code zien.

Door de url als argument te geven zal de gd lib de content van die pagina opvragen, waardoor jouw parser eigenlijk wel wordt aangeroepen ;).

R3Deye

Legacy Member
Hi killgore,

Ik krijg nog steeds dezelfde errors voor beide methodes als ik het volledig url opgeef.
Ik krijg de indruk dat in alle gevallen het image.php bestand steeds in binairy mode geopend word om in te lezen zonder dat deze eerst geexecuteerd word op voorhand.

Of anders mis ik iets in men image.php bestand, van welk de basis contents neerkomt op dit;
PHP:
header("Content-type: image/png");
$img = ImageCreateFromPNG('path/naar/xxx.png');
ImagePNG($img);
ImageDestroy($img);

R3Deye

Legacy Member
Ok, heb het probleem gevonden, het zat toch in men image.php script, voor ik de png header zet in men image.php script deed ik dit;

PHP:
$domain='xxx';
$host=apache_request_headers();
if (!eregi($domain,$host[Referer])){
    // deny
}else{ 
    // allow
    header("Content-type: image/png");
    // etc ...
}

apache_request_headers() zorgt niet voor een probleem, maar wel de eregi() funktie;
image.php executeren dmv getimagesize() dan kom ik bij 'Deny' terecht,
image.php executeren dmv <img .../> dan kom ik wel bij 'Allow' terecht.

De referer value blijft leeg als ik getimagesize() gebruik, ik vermoed dat ik hier niet omheen kan zeker?

servi

Legacy Member
dat is omdat de referrer allicht leeg zal zijn, een referrer kan immers pas gevuld zijn als daarvoor een andere pagina bezocht is geweest, wat in uw geval waarschijnlijk niet zo is.

Je moet dus eigenlijk je referrer-controle aanpassen :
PHP:
// laat ook het domein localhost als referrer toe
$domain='xxx|localhost'; 
$host=apache_request_headers(); 
// laat ook gebruikers toe die direct naar die pagina surfen (zoals dus die getimagesize-function )
if (!empty($host['Referer']) && !eregi($domain,$host['Referer'])){ 
    // deny 
}else{  
    // allow 
    header("Content-type: image/png"); 
    // etc ... 
}

dJeez

Legacy Member
Is er een specifieke reden om de code die de dimensies van de afbeelding bepaalt in een ander script te zetten?

Nu, los daarvan: op basis van wat je hier post staan de afbeeldingen schijnbaar in een aparte folder. Je kan dus net zogoed alle afbeeldingen in die folder overlopen en via getimagesize de grootte ervan rechtstreeks ophalen.
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