PHP链接到根文件夹之外的图像[一个href,不是img src]


PHP Link to image outside root folder [a href, not img src]

这是我的情况:图像存储在根文件夹之外。我可以使用外部 php 文件(应该是)访问它们,然后file_get_contents然后echo然后img src它,然后它会完美显示。

我安装了厚箱,

我想发生的是当用户单击图像时,它将显示在放大的厚箱中

<a href="img.jpg" class="thickbox"><img src="my_image_processing.php?img=img.jpg" />

我正在尝试在单击时创建一个图库。发生的情况是厚箱显示,但图像没有。不是图像,而是乱码/垃圾代码以带有问号的黑色菱形显示。我想这是图像的原始代码。

我怎样才能将其输出为图像而不是原始代码

<a href> 's

补充:我只是多玩了一下。当我删除厚箱类时,a href实际上有效。它会在下一页上正常显示图像。不幸的是,当我附加厚框类时,它显示了厚框,但它显示了原始代码

尝试:

header ("Content-type: image/jpeg");

如果您看到原始图像数据为文本,则可能是您的浏览器无法将输出识别为图像。您可以使用上面的标题行指示正确的 MIME 类型。

也可能发生错误,错误消息使图像文件不可读(因为流不是标头,而是以错误消息开头)。在这种情况下,您应该在字符之前看到错误消息。

在您的示例中,您直接使用 jpg 文件,它应该是这样的:

<a href="my_image_processing.php?img=img.jpg" class="thickbox"><img src="my_image_processing.php?img=img.jpg" />

也就是说,读取隐藏文件夹并返回图像的 php 页面。

厚框识别由文件扩展名链接的资源的类型,以确定它是否是要显示的图像。它还会在确定扩展名时忽略查询字符串。因此,您有以下选择:

  • 使用一些自定义 URL 重写并使您的脚本正常工作,例如使用 URL my_image_processing/img.jpg而不是my_image_processing.php?img=img.jpg(搜索有关"mod_rewrite"的更多信息),
  • 重写 ThickBox 的代码(或搜索选项参数,允许您在不更改代码的情况下更改该识别机制 - 我没有找到任何),或
  • 实现
  • 其他库,允许您实现所需的内容(并允许您以预期的方式使用外部脚本),

一件事是让 Thickbox 认为它加载了图像,而不是将页面加载到框架中,第二件事是 - 正如 vbence 指出的那样 - 将适当的 MIME 类型添加到随脚本返回的图像中:您应该添加带有"内容类型"信息的适当标题。

编辑:

负责显示图像的代码开始如下[原文如此!

var baseURL;
 if(url.indexOf("?")!==-1){ //ff there is a query string involved
  baseURL = url.substr(0, url.indexOf("?"));
 }else{ 
     baseURL = url;
 }
 var urlString = /'.jpg$|'.jpeg$|'.png$|'.gif$|'.bmp$/;
 var urlType = baseURL.toLowerCase().match(urlString);
if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images

如果您选择自己修改脚本,您可能希望添加另一种类型('php'),但您应该意识到后果。

编辑2:

如果您使用"更改插件"选项,则有一些替代方案(ColorBox),这使您无需深入研究代码即可决定是否应将*.php链接视为图像。只需在文档中查找photo选项(当设置时photo=true应按预期运行)。

您可能忽略了用于显示图像的 http 标头。

header("Content-type: image/jpeg");
header("Content-Disposition: attachment;");