【问题标题】:PHP Link to image outside root folder [a href, not img src]PHP链接到根文件夹外的图像[a href,不是img src]
【发布时间】:2011-08-23 17:22:50
【问题描述】:

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

我已经安装了thickbox,我想要发生的是当用户点击图像时,它会显示在放大的thickbox中

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

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

如何在

中将其输出为图像而不是原始代码
<a href> 's

添加:我只是多玩了一点。当我删除thickbox 类时,a href 确实有效。它在下一页上正常显示图像。不幸的是,当我附加thickbox类时,它显示了thickbox,但它显示了原始代码

【问题讨论】:

  • 根据您所说的(直接访问 my_image_processing.php?img=img.jpg 有效),我猜想问题出在厚盒上(实际的错误或您的错误)。仔细检查您是否遵循了所有 instructions,包括 macFFBgHack.png 位。如果您仍然遇到问题,我建议您编辑/重新标记您的问题,并包括所有与thickbox 相关的脚本/链接/样式标签(所有相关的 HTML),并告诉我们您使用的 jquery 和thickbox 版本。由于某种原因,thickbox 似乎没有发送 jpeg MIME 类型的图像。
  • 是的,问题与Thickbox有关,但事实上,Thickbox将内容识别为页面(假设*.php不是图像)并且不查看@ 987654328@ 标头中发送的信息。可能的解决方案在我的答案之内。

标签: php image hyperlink root thickbox


【解决方案1】:

在您的示例中,您直接使用 jpg 文件,它应该类似于:

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

即读取隐藏文件夹并返回图片的php页面。

【讨论】:

  • 是的,对不起,我是这样写的。几天来我一直在为此烦恼
  • @user657896 我更新了我的代码,对php页面的调用应该在两个地方,也在&lt;a&gt;
【解决方案2】:

试试:

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

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

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

【讨论】:

  • 我已经尝试将该标题附加在顶部,甚至在代码之后。两者都不起作用。
  • 问题是Thickbox不使用MIME类型信息来显示内容(见我的回答)。但是无论如何都应该添加 Content-type。
【解决方案3】:

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

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

【讨论】:

  • 他说使用处理页面时图像显示正常,这不是问题。
  • 我猜 OP 不希望文件被提示下载,而只是显示。
【解决方案4】:

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

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

一件事是让 Thickbox 认为它加载的是图像,而不是页面到框架中,第二件事是 - 正如 vbence 所指出的 - 为您使用脚本返回的图像添加适当的 mime 类型:您应该添加带有“Content-Type”信息的适当标题。

编辑:

负责显示图片的代码如下[原文如此!]:

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'),但您应该知道后果。

EDIT2:

如果您使用“更改插件”选项,还有一些替代方案 (ColorBox),这使您无需深入研究代码即可决定是否应将 *.php 链接视为图像.只需在the documentation 中查找photo 选项(设置photo=true 时应如您所愿)。

【讨论】:

  • 好的,我刚刚尝试将其重写为 my_image_processing/image.jpg。我不再得到垃圾了,但现在它只是显示为空白。当我再次删除课程时,它可以正常工作。我会试试你的编辑 1 和 2...
  • 在编辑thickbox.js 本身时,我尝试在urlString 中添加|\.php$ 和/或添加
  • 和/或添加 urlType == '.php' ,但它似乎不起作用;仍然只是一个空白屏幕。您将如何继续添加该更改?抱歉,我对 javascript 不太熟悉
猜你喜欢
  • 2013-05-05
  • 2013-04-29
  • 2016-10-26
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
相关资源
最近更新 更多