На странице PHP выводится статическое изображение

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

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

 <?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.'; } ?> 

РЕДАКТИРОВАТЬ:
Вы также можете вставлять свои изображения в сценарий, кодируя их, например, как 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 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).';'; ?> 

Я не тестировал следующее, но он должен работать. Используйте этот скрипт для получения кода 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. Напишите сценарий php, определяющий, какое изображение нужно выводить.
  2. Установите соответствующие заголовки с помощью функции header () (Ie Content-type)
  3. Откройте файл, прочитайте его и отправьте в выходной поток.

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

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

 <?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