Image maken

Status
Niet open voor verdere reacties.

mick93

Gebruiker
Lid geworden
31 mrt 2010
Berichten
90
Beste forumleden,

Ik zit met een probleem. Op "website.nl" heeft dit script altijd gefunctioneerd. Nu heb ik dit script (en de rest van de website) omgezet naar "website.com" en het werkt niet meer. Ziet iemand wat het probleem is? Hij moet mij een verificatiecode laten zien, maar dat doet hij dus niet. Hulp gevraagd en gewaardeerd!

Probleem doet zich ook bij een andere imagemaking script..

PHP:
<?php
session_start();

function SetHeaders($sImage)
{
	header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
	header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
	header('Content-type: image/png');
	header('Content-Lenght: '.strlen($sImage));

	return $sImage;
}

ob_start("SetHeaders");

if(!preg_match("/^http(s?)+[:\/\/]+(\w*)\.website\.com\//i", $_SERVER['HTTP_REFERER']))
{ die(); }

function randstr()
{
	$sHash = "0123456789";
	$iLength = strlen($sHash);
	$sStr = "";
	for($i = 0; $i < 4; $i++)
	{
		$sRand = rand(0, $iLength) - 1;
		$sStr .= substr($sHash, $sRand, 1);
	}
	return $sStr;
}

$string 				= randstr(4);
$_SESSION['mw_hash'] 	= md5($string.'1');

$angleTXT 				= rand(-80,80);
$hTXT 					= ($angleTXT < 0) ? 15 : 50;
$wTXT 					= rand(15,25);

$imgCreate 				= ImageCreate(75, 50);
$imgBg 					= ImageColorAllocate($imgCreate, 200, 200, 200);
$imgFg 					= ImageColorAllocate($imgCreate, rand(0,100),rand(0,100),rand(0,100));
$imgLi1 				= ImageColorAllocate($imgCreate,rand(100,200),rand(100,200),rand(100,200));
$imgLi2 				= ImageColorAllocate($imgCreate,rand(50,200),rand(100,200),rand(100,200));
$imgLi3 				= ImageColorAllocate($imgCreate,rand(50,200),rand(50,200),rand(50,200));
$imgLi4 				= ImageColorAllocate($imgCreate,rand(50,200),rand(50,200),rand(50,200));

ImageFill($imgCreate, 1, 1, $imgBg);
for($i=0;$i<5;$i++)
{ imageline($imgCreate, 0, rand(0,50), 75, rand(0,50), $imgLi1); }
for($i=0;$i<5;$i++)
{ imageline($imgCreate, 0, rand(0,50), 75, rand(0,50), $imgLi2); }
for($i=0;$i<5;$i++)
{ imageline($imgCreate, rand(0,75), 0, rand(0,75), 50, $imgLi3); }
for($i=0;$i<5;$i++)
{ imageline($imgCreate, rand(0,75), 0, rand(0,75), 50, $imgLi4); }

Imagettftext($imgCreate,17,$angleTXT,$wTXT,$hTXT,$imgFg,'font.ttf',$string)or die ("Please refresh");

imagepng($imgCreate);
ob_end_flush();
?>

Alvast bedankt!
 
Probleem doet zich ook bij een andere imagemaking script..


Dat klinkt heel erg alsof je de scripts hebt neergezet op een server waarop PHP geen GD library heeft geinstalleerd.

Als dat gebeurt dan worrdt je overspoeld met foutmeldingen maar die zie jij hier niet omdat je nergens iets aan foutcontrole doet, laat staan aan foutrapportage.
Je set altijd de headers, dus je kunt geen enkele foutmelding lezen want de browser interpreteert alles als een palatje.
Als de URL niet overeenkomt geeft je een lege die() dus je komt nooit te weten dat je op die regel bent gestopt (en de aanroepende code heeft ook geen enkel idee dat er iets fout ging, hij krijgt gewoon een leeg plaatje met HTTP status 200 dus hij denkt dat het zo hoord)
Je controleert niet of de Image functies werken en je poept als de URL klopt altijd gewon het plaatje uit ongeaht wat er in staat.

Wat gebeurt er uberhaubr in randstr()? Het ziet eruit ale een heel ingewikkelde manier om een getal tussen de 0 en X te genereren en je hebt er maar 4 in gebruik dus waarom niet gewoon mt_rand(1000,9999)?
 
Het probleem bij andere imagemaking scripts zat hem in de preg_match. Hier is dat echter niet het geval.
Het script is oorspronkelijk niet van mij. Vroeger zaten we op een .nl adres en was het geen probleem. Nu op een .com adres en ineens wel een probleem..
 
Mogelijks dacht je er al aan dat php.ini zie gdlibs moeten toegevoegd zijn
maar bekijk ook dit eff zie phpinf()
 
Als het een configuratie probleem zou zijn dan zouden geen van de script het doen (en die suggestie had ik ook al gegeven).

Zoals ik al zei: haal die ob_start() en setheaders() er tijdelijk even uit, dan zie je de foutmelding die PHP geeft, ipv een berg onzin op het scherm.
 
Als het een configuratie probleem zou zijn dan zouden geen van de script het doen (en die suggestie had ik ook al gegeven).

Zoals ik al zei: haal die ob_start() en setheaders() er tijdelijk even uit, dan zie je de foutmelding die PHP geeft, ipv een berg onzin op het scherm.

Als ik dat doe, krijg ik een wit scherm. Als ik het laat staan, krijg ik 'De afbeelding “img.php” kan niet worden weergegeven, omdat deze fouten bevat.
 
Dan heb ik toch sterk het vermoeden dat je niet langs de regular expression komt, want dat is eigenlijk de enige manier waarop dit script kan falen zonder enige uitvoer te geven.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan