Сделайте так, чтобы страница PHP выводила статическое изображение - PullRequest
2 голосов
/ 26 сентября 2010

Я хочу, чтобы PHP мог отправлять 1 из 3 изображений, в зависимости от параметра $_GET[]. У меня есть изображения как три отдельных PNG прямо сейчас, и я хотел бы, чтобы PHP-скрипт включал их в себя, а затем возвращал указанное изображение. Итак, я хочу один PHP-скрипт вместо 3-х изображений. Это возможно? Мне не нужно создавать специальные изображения на лету, просто распечатайте одно из них. Спасибо!

Ответы [ 4 ]

4 голосов
/ 26 сентября 2010

Если ваши изображения находятся в файлах, используйте функцию PHP readfile () и отправьте заголовок типа содержимого перед его выводом:

<?php
$imagePaths = array(
    '1' => 'file1.png',
    '2' => 'file2.png',
    '3' => 'file3.png',
);

$type = $_GET['img'];

if ( isset($imagePaths[$type]) ) {
    $imagePath = $imagePaths[$type];
    header('Content-Type: image/png');
    readfile($imagePath);
} else {
    header('HTTP/1.1 404 File Not Found');
    echo 'File not found.';
}
?>

EDIT:
Вы также можете встраивать свои изображения в скрипт, кодируя их, например. как Base64 , затем вставьте их как строки в PHP, а затем декодируйте их там с помощью base64_decode , чтобы получить их:

<?php
$imageData = array(
    '1' => '...', // Base64-encoded data as string
    ...
);

$type = $_GET['img'];

if ( isset($imageData[$type]) ) {
    header('Content-Type: image/png');
    echo base64_decode($imageData[$type]);
} else {
    header('HTTP/1.1 404 File Not Found');
    echo 'File not found.';
}
?>

Вы также можете использовать PHP для кодирования изображения в командной строке. Просто запустите этот PHP-скрипт в командной строке (php script.php image1.png image2.png image3.png > output.php), сохраните его вывод и включите его в ваш скрипт:

<?php
$imageData = array();

foreach ($argv as $index => $imagePath)
    $imageData[(string)($index + 1)] = base64_encode(file_get_contents($imagePath));

echo '$imageData = '.var_export($imageData, true).';';
?>
2 голосов
/ 26 сентября 2010

Я не проверял следующее, но оно должно работать.Используйте этот скрипт, чтобы получить код PHP, который будет содержать данные изображения.

Чтобы получить изображение:

$image = base64_encode(file_get_contents("image.png"));
// The string $image now contains your image data.

Получите эту (потенциально большую) строку в своем коде, где вы хотите изображение,для каждого изображения.Распечатайте его и скопируйте, а затем вставьте.Импортируйте его как текстовый файл через Интернет.Это ваше дело.

Затем, чтобы напечатать изображение (только изображение, как если бы это был PHP-скрипт), выполните:

header("content-type: image/png");
print base64_decode($image);

Конечно, вы бы поместили каждое изображениеданные в массиве или что-то в этом роде.

Дайте мне знать, если это работает.

1 голос
/ 26 сентября 2010

Да, это возможно.

Сделайте это:

  1. Напишите скрипт php, решающий, какое изображение выводить.
  2. Установите соответствующие заголовки с помощью функции header () (т. Е. Типа контента)
  3. Откройте файл, прочитайте его и отправьте в выходной поток.

Помните, что при таком подходе вы, вероятно, потеряете все преимущества кэша браузера ...

0 голосов
/ 26 сентября 2010

Быстрый, но не очень безопасный и элегантный способ сделать это ...

<?php
switch($_GET['type']){
 case "1":
    $image = "image1.png";
    break;
 case "2":
    $image = "image2.png";
    break;
 case "3":
    $image = "image3.png";
    break;
}
header('Content-Type: image/png');
readfile($image);
?>

Мораль истории: используйте header () и readfile () = D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...