【问题标题】:Mediawiki Image Authentication: The image "URL.*" cannot be displayed because it contains errorsMediawiki 图像验证:图像“URL.*”无法显示,因为它包含错误
【发布时间】:2014-01-14 20:09:01
【问题描述】:

我正在寻求有关以下问题的帮助,该问题今天一直困扰着我。我目前正在构建一个 wiki,目前正在使用以下规范:

操作系统:Windows XP x86 媒体维基 1.19.1 阿帕奇 2.4.2 PHP 5.4.4 MySQL 5.5.25a phpMyAdmin 3.5.2 PHP缓存3.1.14.TS.VS9.X86.XP

我前段时间为 wiki 配置了图像验证,它必须运行良好。

这是按照通常的程序完成的:

  • 我修改了 $wgUploadPath 值为 "= "/wiki/img_auth.php";"
  • 我在“/wiki/images”文件夹的 .htaccess 中添加了“全部拒绝”。

这具有修改图像 URL 并拒绝访问 /images 文件夹本身的预期效果。该 URL 现在是 "http://x.x.x.x/wiki/img_auth.php/f/f0/2012-12-07_071358.png",而不是 "http://x.x.x.x/bawiki/images/f/f0/2012-12-07_071358.png"

但是,本周早些时候情况发生了变化,我不知道为什么或如何。图像已从 wiki 中消失。导航到页面http://x.x.x.x./wiki/index.php/File:2012-12-07_071358.png,然后导航到图像本身会带来两个问题:

  • 在 Firefox 中,虽然 URL 正确显示为 "http://x.x.x.x/wiki/index.php/File:2012-12-07_071358.png",但显示以下消息:无法显示图像 "http://x.x.x.x/wiki/img_aug.php/f/f0/2012-12-07_071358.png",因为它包含错误
  • 在 IE 中,图像仅显示为“红色 X”。

这发生在:

  • .jpg 文件、.png 文件、.tif/tiff 文件、.bmp 文件(至少)。

其他文件类型,如 .PDF、.AVI、.7Z 等,均由 wiki 正确提供。

所有图像在服务器上仍然正常可用;我可以直接在服务器上打开它们中的任何一个(所以我知道它们实际上并不包含错误)。我还可以查看 wiki 上未使用图像身份验证的任何其他图像(例如徽标)。

我安装了 Firebug 并在加载图像时查看了结果:

请求头是:

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Cache-Control   max-age=0
Connection  keep-alive
Cookie  wikiUserName=username; wikiUserID=1; wiki_session=f67501dd979ec4f4939251b1bf9a9a5c
Host    x.x.x.x
If-Modified-Since   Fri, 02 Nov 2012 16:54:29 GMT
Referer http://x.x.x.x/wiki/index.php/File:2012-12-07_071358.png
User-Agent  Mozilla/5.0 (Windows NT 5.1; rv:26.0) Gecko/20100101 Firefox/26.0

响应标头:

Cache-Control   private
Connection  close
Date    Tue, 14 Jan 2014 20:00:18 GMT
Server  Apache/2.4.2 (Win32) OpenSSL/1.0.1c PHP/5.4.4
Vary    Cookie

图像请求的最终状态是“304 未修改”,将光标悬停在任何字段上都会显示:“加载给定 URL 失败”。

如果我通过在 .htaccess 中注释 $wgUploadPath 和“全部拒绝”来删除图像身份验证,我可以再次正确查看图像。但是,这不是我可以接受的配置。

我试图查找以前出现过的此类问题,但找不到任何具体的东西。任何人都可以提出解决方案吗?如果您希望我提供任何其他细节,我会尽力回答问题。

图片鉴权手册:http://www.mediawiki.org/wiki/Manual:Image_Authorization img_auth.php 脚本:http://pastebin.com/TDaZex9Y

【问题讨论】:

  • 您是否在某处缺少 .htaccess 文件?您的浏览器端 url 与服务器报告的错误完全不对应,这意味着发生了重写(或者更确切地说,没有发生)。
  • 对不起,我没有写正确的错误信息(我现在编辑了 OP)。错误消息指的是其中包含“img_auth.php”的 URL。我还添加了脚本的 pastebin。从我所见,我似乎没有错过 .htaccess。可能涉及的将是 htdocs/wiki 的 .htaccess,它本质上是所有人的允许,以及 htdocs/wiki/images 的 .htaccess,它是所有人的拒绝。然而,这个过程的重点是 /images 被设置为拒绝所有人,并且访问其内容的唯一方法是通过 img_auth.php
  • 您是否启用了任何会导致 img_auth.php 转储错误消息的功能?诸如 PHP 警告之类的任何消息都会破坏本应是二进制数据输出的内容。您可以尝试直接导航到图片 URL,看看是否能注意到任何内容。
  • 好吧,在其生产配置中激活了图像身份验证,我无法直接看到图像。该图像将位于“x.x.x.x/wiki/images/5/56/2012-12-07_063326.png”(示例文件),但此访问被 /images 中的 .htaccess 拒绝。现在,我可以删除那里的“全部拒绝”,它允许访问该文件夹。然后,虽然 img_auth.php URL 不起作用,但我实际上能够看到图像,这意味着服务器能够提供图像。
  • (跟进)。我认为问题可能出在 img_auth.php 本身,但我无法理解的是,如果 img_auth.php 出错,它应该显示另一条错误消息。我远非 php 专家,但它的代码显然包含错误检查。如果它确实返回了错误,它应该显示为函数 wfforbidden 返回的两个参数。

标签: php image apache mediawiki


【解决方案1】:

检查您的 PHP 日志。看起来图像正在交付,但处于乱码状态。如果不实际查看文件就无法判断它是否为 tru,但如果 PHP 警告开始出现并且 display_errors 处于打开状态,您可能会在 .php 脚本输出前添加错误消息。

【讨论】:

    【解决方案2】:

    似乎二进制图像前面有一个新行,导致图像文件乱码。一些 php 代码发送了这个错误的新行。

    【讨论】:

    猜你喜欢
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多