2010-09-25 71 views
2

我希望PHP能够发送3个图像中的1个,具体取决于参数$_GET[]。我现在将图像作为三个独立的PNG,并希望PHP脚本将它们嵌入其中,然后返回指定的图像。所以,我想要一个PHP脚本而不是3个图像。这可能吗?我不需要即时创建特殊图像,只需打印其中一个。谢谢!让PHP页面输出静态图像

回答

4

如果您的图片文件,使用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.'; 
} 
?> 

编辑:
您还可以通过编码它们例如嵌入您的图片脚本作为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 script.php image1.png image2.png image3.png > output.php)这个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).';'; 
?> 
+0

非常感谢Archimedix!我会看看,这正是我需要的! – 2010-09-25 22:16:38

+0

工作正常!谢谢! – 2010-09-25 22:19:29

+0

使用类似这样的方法('header()'输出内容类型期望并使用'readfile')导致IE9默认为Quirks作为文档模式。可以做任何事情告诉IE不要怪,这只是一个图像? [示例](http://www.homeeducatormom.com/wp-content/uploads/2012/11/orange-scarf1.jpg)(不是我的网站) – veeTrain 2013-07-23 19:35:08

1

是的,这是可能的。

这样做:

  1. 写PHP脚本决定哪些图像输出。
  2. 使用header()函数(即内容类型)设置适当的标头
  3. 打开文件,读取它并将其发送到输出流。

请记住,你可能会从浏览器的使用这种方法缓存丢失任何好处......

+0

这不会仍然需要有图像作为单独的文件?有什么方法将它们嵌入到脚本中? – 2010-09-25 22:05:17

+0

他为什么要放宽浏览器缓存?图像仍然通过具有GET参数的唯一URL进行定位。 – doc 2010-09-25 22:06:35

+0

你为什么要嵌入一个脚本的图像? – 2010-09-25 22:07:28

0

一种快速,但没有真正安全的,也没有优雅的方式来做到这一点...

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

这个故事的寓意是:用头()和ReadFile的()= d

2

我没有测试以下,但它应该工作。使用此脚本获取将包含图像数据的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); 

当然,你可以把每个图像数据在阵列或类似的东西。

让我知道它是否有效。

+0

它的工作原理。首先,我用newdoc语法尝试过它,它也起作用,但这种解决方案更好。 – doc 2010-09-25 22:32:48

+0

谢谢,doc。我很高兴它的工作。 – eje211 2010-09-25 22:51:59