AdamGold
AdamGold

Reputation: 5051

PHP inside img src

Trying to see what actions can be performed with a PHP script that is being called via an image src like so:

<img src="http://example.com/script.php" />

Now, I have tried to include the PHP header() function in script.php:

<?php
header("Location: http://example.com");

I have also tried to echo an image url expecting the img to display it, which it didn't:

<?php
echo 'http://example.com/image.png';

Are there any ways of doing such things with a PHP script that is being called in the img src attribute?

Upvotes: 2

Views: 4423

Answers (5)

DumperJumper
DumperJumper

Reputation: 87

Are there any ways of doing such things with a PHP script that is being called in the img src attribute?

Yes, but the PHP Script has to output image data only, as stated in various other answers.

With that being said, just read the image and output it to the stream with readfile

header('Content-Type: image/png');
readfile($file);
exit();

I know I might be a couple years late to really help you, but the accepted answer just isn't true (anymore).

Upvotes: 0

Coert Metz
Coert Metz

Reputation: 892

You should keep in mind that the src tag should directly point to an image file. However, it is possible to use PHP to create an image, for exmaple by using the GD library:

http://php.net/manual/en/book.image.php

So using:

<img src="http://example.com/script.php" />

is possible, as long as script.php really outputs an image file, for example by using the example as described here:

http://www.php.net/manual/en/image.examples-png.php

I used this kind of processing in the past to overlay texts on JPG images for a broker website (e.g. new, sold, for rent, etc.).

Upvotes: 0

Diego Pino
Diego Pino

Reputation: 11576

Your script.php should return the output of an image with the correct headers. For instance:

<img src="/html/img/script.php" />

// Script.php

$file = "tiger.jpeg";
$type = "image/jpeg";
header("Content-Type: $type");
header("Content-Length: " . filesize($file));
readfile($file);

Upvotes: 1

birgire
birgire

Reputation: 11378

Check out the readfile() as a way to output your image file from your script.php

readfile($file);

Read more about it here in the manual:

http://php.net/manual/en/function.readfile.php

where Example #1 gives an idea of how to set up the headers.

The manual also states that:

readfile() will not present any memory issues, even when sending large files, on its own.

and

A URL can be used as a filename with this function

ps: This was the way Wordpress Multisite used to open user uploaded (e.g. images) files.

Upvotes: 1

Pekka
Pekka

Reputation: 449385

Are there any ways of doing such things with a PHP script that is being called in the img src attribute?

No. A resource that is used as a src for an img tag needs to output image data, nothing else.

There are some exceptions, eg. a header("location: ....") redirect, but the redirect needs to point to another valid image resource, not a web site as you show in your example.

Upvotes: 1

Related Questions