PHP-gen'd images won't display in HTML

This is a discussion on PHP-gen'd images won't display in HTML within the alt.comp.lang.php forums, part of the PHP Programming Forums category; I have an image-generating script myimage.php that's worked and that I've used for years. All it ...


Go Back   Usenet Forums > PHP Programming Forums > alt.comp.lang.php

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 12-28-2006
CPD
 
Posts: n/a
Default PHP-gen'd images won't display in HTML

I have an image-generating script myimage.php that's worked and that I've
used for years. All it does is increment a counter file and output a single
pixel in the color I provide. But on one particular web server I uploaded
to, the behavior is strange.

If I enter the URL http://www.domain.ext/myimage.php, the picture is
displayed as expected. But if I insert the script into HTML, like <img
src="myimage.php">, it fails to display and I get the broken image icon,
instead.

This has never happened before, but I do not know enough about PHP builds
and web server settings to figure this out.

Any suggestions? Thanks for any help!



Here's the code, if necessary:

$filename = trim($_GET['filename']);
$color = (trim($_GET['color']) == "") ? "000000" : trim($_GET['color']);

$count = '0';
$file_last_mod = 0;

// Set up filename whether or not provided

if(strlen($filename)) {
$filename .= ".count";
}
else {
$fname_end = strrpos($script_name, ".");
$fname_end = ($fname_end === false) ? strlen($script_name) :
$fname_end - 1;
$slash_pos = strrpos($script_name, "/");
$fname_start = ($slash_pos === false) ? 0 : $slash_pos + 1;
$script_name = (!strlen($filename)) ? $HTTP_SERVER_VARS['SCRIPT_NAME'] :
$filename;
$filename = substr($script_name, $fname_start, $fname_end - $slash_pos)
.. ".count";
}

// open and read file if it exists

if (file_exists($filename)) {
$file_last_mod = filemtime($filename);
$count = file_get_contents($filename);
}

// increment count

$count += 1;

// reopen file and write new count

$handle = fopen($filename, "w");
fwrite($handle, $count);
fclose($handle);

// Generate a 1 x 1 pixel image

$im = @imagecreate(1, 1)
or die("<!-- Cannot Initialize new GD image stream -->");

// Set up color if not provided

if (!strlen(trim($color))) $color = "000000";

// Set image color

$red = 0 + base_convert(substr($color, 0, 2), 16, 8);
$green = 0 + base_convert(substr($color, 2, 2), 16, 8);
$blue = 0 + base_convert(substr($color, 4, 2), 16, 8);
$img_color = imagecolorallocate($im, $red, $green, $blue);

// Output the created image according to available GD image support

if (function_exists("imagegif")) {
header("Content-type: image/gif");
imagegif($im);
} elseif (function_exists("imagejpeg")) {
header("Content-type: image/jpeg");
imagejpeg($im);
} elseif (function_exists("imagepng")) {
header("Content-type: image/png");
imagepng($im);
} elseif (function_exists("imagewbmp")) {
header("Content-type: image/vnd.wap.wbmp");
imagewbmp($im);
} else {
die("<!-- No image support on this PHP server -->");
}


Reply With Quote
  #2 (permalink)  
Old 12-28-2006
zorro
 
Posts: n/a
Default Re: PHP-gen'd images won't display in HTML

I tried your script and it works on my localhost. If you tried
http://www.domain.ext/myimage.php and it worked then we know the image
module is working.

So all i can think of is
1) The path to the image has a problem.
2) The file outputs some unwanted characters. Check that there is no
blank spaces at the top of the page or anywhere else that get output.
Try setting error_reporting(0) so that no warnings are output.

Reply With Quote
  #3 (permalink)  
Old 12-28-2006
zorro
 
Posts: n/a
Default Re: PHP-gen'd images won't display in HTML

When i save image.php in a utf-8 encoding it doesn't work because utf-8
inserts an invisible character at the top of the page. In that case the
file needs to be saved with another encoding.

Reply With Quote
  #4 (permalink)  
Old 12-28-2006
Webtechnics - Info
 
Posts: n/a
Default Re: PHP-gen'd images won't display in HTML

I also had this problem, I can;t remember exactly how i solved it, but i
remember that you CAN'T set the image-source to a .php file.

If i now more, i'l let you know.



"CPD" <no@spam.pls> schreef in bericht
news:POudnZ4ec9eNgwnYnZ2dnUVZ_t2tnZ2d@comcast.com. ..
>I have an image-generating script myimage.php that's worked and that I've
>used for years. All it does is increment a counter file and output a single
>pixel in the color I provide. But on one particular web server I uploaded
>to, the behavior is strange.
>
> If I enter the URL http://www.domain.ext/myimage.php, the picture is
> displayed as expected. But if I insert the script into HTML, like <img
> src="myimage.php">, it fails to display and I get the broken image icon,
> instead.
>
> This has never happened before, but I do not know enough about PHP builds
> and web server settings to figure this out.
>
> Any suggestions? Thanks for any help!
>
>
>
> Here's the code, if necessary:
>
> $filename = trim($_GET['filename']);
> $color = (trim($_GET['color']) == "") ? "000000" : trim($_GET['color']);
>
> $count = '0';
> $file_last_mod = 0;
>
> // Set up filename whether or not provided
>
> if(strlen($filename)) {
> $filename .= ".count";
> }
> else {
> $fname_end = strrpos($script_name, ".");
> $fname_end = ($fname_end === false) ? strlen($script_name) :
> $fname_end - 1;
> $slash_pos = strrpos($script_name, "/");
> $fname_start = ($slash_pos === false) ? 0 : $slash_pos + 1;
> $script_name = (!strlen($filename)) ? $HTTP_SERVER_VARS['SCRIPT_NAME']
> : $filename;
> $filename = substr($script_name, $fname_start, $fname_end - $slash_pos)
> . ".count";
> }
>
> // open and read file if it exists
>
> if (file_exists($filename)) {
> $file_last_mod = filemtime($filename);
> $count = file_get_contents($filename);
> }
>
> // increment count
>
> $count += 1;
>
> // reopen file and write new count
>
> $handle = fopen($filename, "w");
> fwrite($handle, $count);
> fclose($handle);
>
> // Generate a 1 x 1 pixel image
>
> $im = @imagecreate(1, 1)
> or die("<!-- Cannot Initialize new GD image stream -->");
>
> // Set up color if not provided
>
> if (!strlen(trim($color))) $color = "000000";
>
> // Set image color
>
> $red = 0 + base_convert(substr($color, 0, 2), 16, 8);
> $green = 0 + base_convert(substr($color, 2, 2), 16, 8);
> $blue = 0 + base_convert(substr($color, 4, 2), 16, 8);
> $img_color = imagecolorallocate($im, $red, $green, $blue);
>
> // Output the created image according to available GD image support
>
> if (function_exists("imagegif")) {
> header("Content-type: image/gif");
> imagegif($im);
> } elseif (function_exists("imagejpeg")) {
> header("Content-type: image/jpeg");
> imagejpeg($im);
> } elseif (function_exists("imagepng")) {
> header("Content-type: image/png");
> imagepng($im);
> } elseif (function_exists("imagewbmp")) {
> header("Content-type: image/vnd.wap.wbmp");
> imagewbmp($im);
> } else {
> die("<!-- No image support on this PHP server -->");
> }
>



Reply With Quote
  #5 (permalink)  
Old 12-28-2006
zorro
 
Posts: n/a
Default Re: PHP-gen'd images won't display in HTML


Webtechnics - Info wrote:
> you CAN'T set the image-source to a .php file.


of course you can, he said it worked before and i also had it working

Reply With Quote
  #6 (permalink)  
Old 12-28-2006
Hendri Kurniawan
 
Posts: n/a
Default Re: PHP-gen'd images won't display in HTML

Might be the http header

CPD wrote:
> I have an image-generating script myimage.php that's worked and that I've
> used for years. All it does is increment a counter file and output a single
> pixel in the color I provide. But on one particular web server I uploaded
> to, the behavior is strange.
>
> If I enter the URL http://www.domain.ext/myimage.php, the picture is
> displayed as expected. But if I insert the script into HTML, like <img
> src="myimage.php">, it fails to display and I get the broken image icon,
> instead.
>
> This has never happened before, but I do not know enough about PHP builds
> and web server settings to figure this out.
>
> Any suggestions? Thanks for any help!
>
>
>
> Here's the code, if necessary:
>
> $filename = trim($_GET['filename']);
> $color = (trim($_GET['color']) == "") ? "000000" : trim($_GET['color']);
>
> $count = '0';
> $file_last_mod = 0;
>
> // Set up filename whether or not provided
>
> if(strlen($filename)) {
> $filename .= ".count";
> }
> else {
> $fname_end = strrpos($script_name, ".");
> $fname_end = ($fname_end === false) ? strlen($script_name) :
> $fname_end - 1;
> $slash_pos = strrpos($script_name, "/");
> $fname_start = ($slash_pos === false) ? 0 : $slash_pos + 1;
> $script_name = (!strlen($filename)) ? $HTTP_SERVER_VARS['SCRIPT_NAME'] :
> $filename;
> $filename = substr($script_name, $fname_start, $fname_end - $slash_pos)
> .. ".count";
> }
>
> // open and read file if it exists
>
> if (file_exists($filename)) {
> $file_last_mod = filemtime($filename);
> $count = file_get_contents($filename);
> }
>
> // increment count
>
> $count += 1;
>
> // reopen file and write new count
>
> $handle = fopen($filename, "w");
> fwrite($handle, $count);
> fclose($handle);
>
> // Generate a 1 x 1 pixel image
>
> $im = @imagecreate(1, 1)
> or die("<!-- Cannot Initialize new GD image stream -->");
>
> // Set up color if not provided
>
> if (!strlen(trim($color))) $color = "000000";
>
> // Set image color
>
> $red = 0 + base_convert(substr($color, 0, 2), 16, 8);
> $green = 0 + base_convert(substr($color, 2, 2), 16, 8);
> $blue = 0 + base_convert(substr($color, 4, 2), 16, 8);
> $img_color = imagecolorallocate($im, $red, $green, $blue);
>
> // Output the created image according to available GD image support
>
> if (function_exists("imagegif")) {
> header("Content-type: image/gif");
> imagegif($im);
> } elseif (function_exists("imagejpeg")) {
> header("Content-type: image/jpeg");
> imagejpeg($im);
> } elseif (function_exists("imagepng")) {
> header("Content-type: image/png");
> imagepng($im);
> } elseif (function_exists("imagewbmp")) {
> header("Content-type: image/vnd.wap.wbmp");
> imagewbmp($im);
> } else {
> die("<!-- No image support on this PHP server -->");
> }
>
>

Reply With Quote
  #7 (permalink)  
Old 12-28-2006
Michael Fesser
 
Posts: n/a
Default Re: PHP-gen'd images won't display in HTML

..oO(Webtechnics - Info)

>I also had this problem, I can;t remember exactly how i solved it, but i
>remember that you CAN'T set the image-source to a .php file.


That's wrong. The value of the 'src' attribute is a URL, and a URL just
points to a resource somewhere on a network. It doesn't matter if the
referenced resource is a static file and delivered as-is or if it is
generated by a script. A ".php" in a URL is absolutely meaningless.

Micha
Reply With Quote
  #8 (permalink)  
Old 12-29-2006
Ric
 
Posts: n/a
Default Re: PHP-gen'd images won't display in HTML

CPD schrieb:
> I have an image-generating script myimage.php that's worked and that I've
> used for years. All it does is increment a counter file and output a single
> pixel in the color I provide. But on one particular web server I uploaded
> to, the behavior is strange.
>
> If I enter the URL http://www.domain.ext/myimage.php, the picture is
> displayed as expected. But if I insert the script into HTML, like <img
> src="myimage.php">, it fails to display and I get the broken image icon,
> instead.
>
> This has never happened before, but I do not know enough about PHP builds
> and web server settings to figure this out.
>
> Any suggestions? Thanks for any help!
>
>
>
> Here's the code, if necessary:
>
> $filename = trim($_GET['filename']);
> $color = (trim($_GET['color']) == "") ? "000000" : trim($_GET['color']);
>
> $count = '0';
> $file_last_mod = 0;
>
> // Set up filename whether or not provided
>
> if(strlen($filename)) {
> $filename .= ".count";
> }
> else {
> $fname_end = strrpos($script_name, ".");
> $fname_end = ($fname_end === false) ? strlen($script_name) :
> $fname_end - 1;
> $slash_pos = strrpos($script_name, "/");
> $fname_start = ($slash_pos === false) ? 0 : $slash_pos + 1;
> $script_name = (!strlen($filename)) ? $HTTP_SERVER_VARS['SCRIPT_NAME'] :
> $filename;
> $filename = substr($script_name, $fname_start, $fname_end - $slash_pos)
> . ".count";
> }
>
> // open and read file if it exists
>
> if (file_exists($filename)) {
> $file_last_mod = filemtime($filename);
> $count = file_get_contents($filename);
> }
>
> // increment count
>
> $count += 1;
>
> // reopen file and write new count
>
> $handle = fopen($filename, "w");
> fwrite($handle, $count);
> fclose($handle);
>
> // Generate a 1 x 1 pixel image
>
> $im = @imagecreate(1, 1)
> or die("<!-- Cannot Initialize new GD image stream -->");
>
> // Set up color if not provided
>
> if (!strlen(trim($color))) $color = "000000";
>
> // Set image color
>
> $red = 0 + base_convert(substr($color, 0, 2), 16, 8);
> $green = 0 + base_convert(substr($color, 2, 2), 16, 8);
> $blue = 0 + base_convert(substr($color, 4, 2), 16, 8);
> $img_color = imagecolorallocate($im, $red, $green, $blue);
>
> // Output the created image according to available GD image support
>
> if (function_exists("imagegif")) {
> header("Content-type: image/gif");
> imagegif($im);
> } elseif (function_exists("imagejpeg")) {
> header("Content-type: image/jpeg");
> imagejpeg($im);
> } elseif (function_exists("imagepng")) {
> header("Content-type: image/png");
> imagepng($im);
> } elseif (function_exists("imagewbmp")) {
> header("Content-type: image/vnd.wap.wbmp");
> imagewbmp($im);
> } else {
> die("<!-- No image support on this PHP server -->");
> }
>
>

Reply With Quote
  #9 (permalink)  
Old 12-29-2006
CPD
 
Posts: n/a
Default Re: PHP-gen'd images - FOUND IT!

Folks, thanks for all the good tips and discussion. It got my brain
cranking, and it turned out to be a permissions issue. Always took for
granted that perms 446 was sufficient, but somehow on this server, it had to
be 447. Not sure why because the counter file is only read from and written
to, but it works now!

Thanks again, and have a Happy New Year!

"CPD" <no@spam.pls> wrote in message
news:POudnZ4ec9eNgwnYnZ2dnUVZ_t2tnZ2d@comcast.com. ..
>I have an image-generating script myimage.php that's worked and that I've
>used for years. All it does is increment a counter file and output a single
>pixel in the color I provide. But on one particular web server I uploaded
>to, the behavior is strange.
>
> If I enter the URL http://www.domain.ext/myimage.php, the picture is
> displayed as expected. But if I insert the script into HTML, like <img
> src="myimage.php">, it fails to display and I get the broken image icon,
> instead.
>
> This has never happened before, but I do not know enough about PHP builds
> and web server settings to figure this out.
>
> Any suggestions? Thanks for any help!
>
>
>
> Here's the code, if necessary:
>
> $filename = trim($_GET['filename']);
> $color = (trim($_GET['color']) == "") ? "000000" : trim($_GET['color']);
>
> $count = '0';
> $file_last_mod = 0;
>
> // Set up filename whether or not provided
>
> if(strlen($filename)) {
> $filename .= ".count";
> }
> else {
> $fname_end = strrpos($script_name, ".");
> $fname_end = ($fname_end === false) ? strlen($script_name) :
> $fname_end - 1;
> $slash_pos = strrpos($script_name, "/");
> $fname_start = ($slash_pos === false) ? 0 : $slash_pos + 1;
> $script_name = (!strlen($filename)) ? $HTTP_SERVER_VARS['SCRIPT_NAME']
> : $filename;
> $filename = substr($script_name, $fname_start, $fname_end - $slash_pos)
> . ".count";
> }
>
> // open and read file if it exists
>
> if (file_exists($filename)) {
> $file_last_mod = filemtime($filename);
> $count = file_get_contents($filename);
> }
>
> // increment count
>
> $count += 1;
>
> // reopen file and write new count
>
> $handle = fopen($filename, "w");
> fwrite($handle, $count);
> fclose($handle);
>
> // Generate a 1 x 1 pixel image
>
> $im = @imagecreate(1, 1)
> or die("<!-- Cannot Initialize new GD image stream -->");
>
> // Set up color if not provided
>
> if (!strlen(trim($color))) $color = "000000";
>
> // Set image color
>
> $red = 0 + base_convert(substr($color, 0, 2), 16, 8);
> $green = 0 + base_convert(substr($color, 2, 2), 16, 8);
> $blue = 0 + base_convert(substr($color, 4, 2), 16, 8);
> $img_color = imagecolorallocate($im, $red, $green, $blue);
>
> // Output the created image according to available GD image support
>
> if (function_exists("imagegif")) {
> header("Content-type: image/gif");
> imagegif($im);
> } elseif (function_exists("imagejpeg")) {
> header("Content-type: image/jpeg");
> imagejpeg($im);
> } elseif (function_exists("imagepng")) {
> header("Content-type: image/png");
> imagepng($im);
> } elseif (function_exists("imagewbmp")) {
> header("Content-type: image/vnd.wap.wbmp");
> imagewbmp($im);
> } else {
> die("<!-- No image support on this PHP server -->");
> }
>



Reply With Quote
  #10 (permalink)  
Old 01-04-2007
Dr. No
 
Posts: n/a
Default Re: PHP-gen'd images won't display in HTML

Webtechnics - Info wrote:
> I also had this problem, I can;t remember exactly how i solved it, but i
> remember that you CAN'T set the image-source to a .php file.
>
> If i now more, i'l let you know.
>
>
>


Yea, that simply isn't correct. I use .php files to send images with no problem.
The PHP script simply needs to generate the correct header before it writes any
data. For a JPEG, you'd include a line like this in your script:

header ('Content-Type: image/jpeg');


If your script is called foo.php, you can load the image like this:

<img src="foo.php" alt="A dynamic image." />

The browser will use the header rather than the extension to determine the file
type. PHP can pass any type of data to the browser using this method. One
application I wrote passes Word, Excel, PDF, HTML, JPEG, GIF, and PNG files
through the same wrapper script, and could pass anything that has a mime type by
placing the correct mime type into the database. PHP can output just about
anything to a web browser.
Reply With Quote
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT +1. The time now is 07:13 PM.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.0.0