Я хочу, чтобы 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);
Конечно, вы бы поместили каждый образ данных в массив или что-то в этом роде.
Дайте мне знать, если это сработает.
Да, это возможно.
Сделай это:
Помните, что вы, вероятно, потеряете все преимущества кеша браузера при таком подходе …
Быстрый, но не очень безопасный и элегантный способ сделать это …
<?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