繁体   English   中英

如何编写php文件脚本以显示图像 <img src=“/img.php?imageID=32” /> ?

[英]How do I script a php file to display an image like <img src=“/img.php?imageID=32” />?

我将横幅广告存储在mysql表中,或者我应该只说文件名,例如:'imagename.jpg'或'banner3.gif'。

显然我想跟踪这些横幅的加载时间,所以我想创建一个名为img.php的php文件并像这样调用它

<img src="/img/img.php?imageID=3" />

这会用id 3拉出图像,同时更新我的​​命中表等。

我知道如何更新我的命中表...但我正在尝试解决的是如何编码img.php文件,以便它只是检索文件名并将其打印到屏幕上,使其像常规图像一样工作。

到目前为止我已经......

<?php
header("Content-Type: image/jpeg");
// insert my db connect file
// update the hits table etc

$sql = 'SELECT * FROM ads WHERE id="' . $_GET['imageID'] .  '" ';
$res = mysql_query($sql);

$row = mysql_fetch_array($res);

$image = '/img/' . $row['file'];

imagejpeg($image);

// and this is where I'm at...

?>

我在上面的代码中遇到了一些问题,我已从各个地方提取到这里。 图像可以是png / gif / jpg,而标题内容类型似乎只有一种类型的空间。

有没有办法让这个文件适用于多种图像类型? 我想我应该首先查询表,计算文件扩展名,然后根据它插入标题函数。

但是当我做到这一点时,我实际上会做什么,然后我想让图像出现?

感谢您的帮助,这是最终的工作文件

<?php

// make sure we're only getting a number for the query b4 doing stuff
if(is_numeric($_GET['imid'])) {

include('thedbfile.php');

$types['jpg'] = 'image/jpeg';
$types['png'] = 'image/png';
$types['gif'] = 'image/gif';



$sql = 'SELECT file FROM ads WHERE id="' . $_GET['imid'] . '" ';
$res = mysql_query($sql);

$row = mysql_fetch_array($res);

$image = 'img/banners/' . $row['file'];

$extension = end(explode('.', $row['file']));


header('Content-Type: ' . $types[$extension]);

echo file_get_contents($image);


}

?>
echo file_get_contents($image);

但我怀疑你的图像实际上是/img/ (文件系统层次结构的顶层)。 是的,在您知道图像的类型听起来不错之后设置Content-type

PS你扩展了你的代码,我不知道imagejpeg($image)做了什么;-)

你可以尝试一个header('Location: <URL-TO-IMAGE>'); 完成图像后。

或者,您可以从文件名中检测扩展名,然后返回相应的MIME类型。

function mime2ext($mime){
    $m = explode('/',$mime);
    $mime = $m[count($m)-1];
    switch($mime){
        case 'jpg': return 'jpg'; break;
        case 'jpeg': return 'jpg'; break;
        case 'pjpeg': return 'jpg'; break;
        case 'png': return 'png'; break;
        case 'gif': return 'gif'; break;
    }
    return '';
}

function ext2mime($fname){
    $ext = end(explode('.',$fname));
    switch($ext){
        case 'jpg': return 'image/jpeg'; break;
        case 'jpeg': return 'image/jpeg'; break;
        case 'png': return 'image/png'; break;
        case 'gif': return 'image/gif'; break;
    }
    return '';
}

关于多个mime类型,没有多个mime类型。 只会发送最新的Content-Type。

看到:

<?php
header('Content-Type: image/jpeg');
header('Content-Type: image/png');
header('Content-Type: image/gif');
?>

内容类型是image / gif。

这样的事情将确保您正确地传递图像并确保它不被缓存,以便页面重新加载将触发新的获取...

//tell client abou tcontent type
header("Content-Type:image/jpeg");

//prevent caching
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Date in the past
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
header ("Cache-Control: no-cache, must-revalidate");  // HTTP/1.1
header ("Pragma: no-cache");                          // HTTP/1.0

//how big is it?
header("Content-Length:".filesize($image));

//send image data
readfile($image);

您可能希望将图像内容直接存储在数据库中。

如您所说,您需要从文件名中解析内容类型。 您还可以向数据库中添加包含扩展名的字段。

$extension = end(explode('.', $row['file']));

然后你必须创建一个包含标题content-type的数组:

$types['jpg'] = 'image/jpeg';
$types['png'] = 'image/png';

然后发送标题(您将要检查类型数组是否包含扩展键,如果不包含则返回错误)

header('Content-Type: ' . $types[$extension]);

然后加载你的图像

echo file_get_contents($image);

应该这样做。 请注意,出于安全原因,您必须检查ImageID参数是否为整数:

if(!ctype_digit($_GET['ImageID'])) // error

最后,您只需要将消息正文中的图像数据与正确的听众一起转动。 我的代码看起来像:

header("Content-type: $mime");
echo $this->mBinaryJunk;

您需要根据图像的实际类型正确设置$ mime类型。 您可以通过在原始查找文件时存储它,或从文件名中检测它来执行此操作。

尝试显示来自 PHP 脚本的回显图像和 ` <img src="“…”`" tag< div><div id="text_translate"><p> 目标:</p><p> 1)我在 web 根目录之外有一个图像文件夹,其中放置了来自 web 应用程序的所有图像(每个图像路径都保存在数据库表中);</p><p> 2) 我想根据用户的请求获取该图像。</p><p> 很简单,对吧?</p><p> 我做了:</p><p> a) 创建一个 class 来读取图像(具有我记得的所有安全功能和保护措施)。 它(成功地)返回使用相应的 mime 类型编码(base64)的图像。</p><p> b) 出于演示目的,我创建了一个 index.php,它具有:</p><p> &lt;img src="agivenscript.php?img=name.jpeg"&gt;</p><p> 我在这里唯一的目标是从我的 web 应用程序中的任何其他地方调用一个脚本,该脚本输出具有相应 mime 类型的 base64 编码图像。</p><p> c) 创建了一个脚本“agivenscript.php”,它通过 GET 接收图像名称,实例化我的 class 并在一切顺利时获取 base64 编码图像。 然后它与图像相呼应。</p><p> 怎么了:</p><ul><li> 当我做 output - 使用 echo '&lt;img src="'. $output64encodedwithmimetype. '"&gt;'; - 在 agivenscript.php 中,它就像一个魅力;</li><li> 此外,如果我将 $output64encodedwithmimetype 内容直接放在 index.php 的 src 标记中,它也可以工作。</li><li> 但是,当我尝试&lt;img src="agivenscript.php?img=name.jpeg"&gt;时它不起作用。</li></ul><p> 由于 base64 编码的图像显然很好(并且具有 mime 类型),我错过了什么? 任何想法?</p><p> 预先感谢。</p></div>

[英]Trying to display an echoed image from a PHP script in and `<img src=“…”` tag

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 尝试显示来自 PHP 脚本的回显图像和 ` <img src="“…”`" tag< div><div id="text_translate"><p> 目标:</p><p> 1)我在 web 根目录之外有一个图像文件夹,其中放置了来自 web 应用程序的所有图像(每个图像路径都保存在数据库表中);</p><p> 2) 我想根据用户的请求获取该图像。</p><p> 很简单,对吧?</p><p> 我做了:</p><p> a) 创建一个 class 来读取图像(具有我记得的所有安全功能和保护措施)。 它(成功地)返回使用相应的 mime 类型编码(base64)的图像。</p><p> b) 出于演示目的,我创建了一个 index.php,它具有:</p><p> &lt;img src="agivenscript.php?img=name.jpeg"&gt;</p><p> 我在这里唯一的目标是从我的 web 应用程序中的任何其他地方调用一个脚本,该脚本输出具有相应 mime 类型的 base64 编码图像。</p><p> c) 创建了一个脚本“agivenscript.php”,它通过 GET 接收图像名称,实例化我的 class 并在一切顺利时获取 base64 编码图像。 然后它与图像相呼应。</p><p> 怎么了:</p><ul><li> 当我做 output - 使用 echo '&lt;img src="'. $output64encodedwithmimetype. '"&gt;'; - 在 agivenscript.php 中,它就像一个魅力;</li><li> 此外,如果我将 $output64encodedwithmimetype 内容直接放在 index.php 的 src 标记中,它也可以工作。</li><li> 但是,当我尝试&lt;img src="agivenscript.php?img=name.jpeg"&gt;时它不起作用。</li></ul><p> 由于 base64 编码的图像显然很好(并且具有 mime 类型),我错过了什么? 任何想法?</p><p> 预先感谢。</p></div> 一个php文件作为img src 在标签中回显图像文件<img src="">在 php 中 如何在extjs中将php文件设置为img src 使用php文件作为img src 来自 php 文件的 img src 来自 getImage.php 的图像不会显示在 img src 中 Zend Framework:img src标签中的PHP脚本导致图像损坏 正确的文件路径img src,图片未加载PHP HTML PHP-如何将图像源显示为img
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM