如果某些目录权限不正确,phpbb 3.1.6 会生成损坏的头像

标签 php nginx phpbb3

注意:已解决 - 请参阅下面的答案。保留问题以供引用。

某些东西导致 nginx 或 php 或 phpbb(或其他东西)在从 phpbb 下载的头像文件的开头添加 1 个字节。这会损坏文件。

为了排除 Cloudflare 等外部因素,我现在将 phpbb 设置为非 https,仅限本地主机,关闭压缩。

从下面的代码可以看出问题:

从本地主机获取文件 - 没有缓存或 cloudflare 干扰:

wget http://localhost/forum/download/file.php?avatar=4625_1413540046.jpg -O avatest_local.jpg
‘avatest_local.jpg’ saved [6419/6419]

测试文件

jpeginfo avatest_local.jpg
avatest_local.jpg  Not a JPEG file: starts with 0x0a 0xff  [ERROR]

找到相同的文件(phpbb 对文件名做了奇怪的事情)

find /var/www/forum/images/avatars/upload  -size 6419c
/var/www/forum/images/avatars/upload2a36dc33069249d6b1187fd84d7fc957_4625.jpg

测试那个文件并发现它是好的

jpeginfo /var/www/forum/images/avatars/upload/2a36dc33069249d6b1187fd84d7fc957_4625.jpg
./2a36dc33069249d6b1187fd84d7fc957_4625.jpg   80 x 80   24bit JFIF  N    6419

检查原始文件的前几个字节:

xdd /var/www/forum/images/avatars/upload/2a36dc33069249d6b1187fd84d7fc957_4625.jpg
0000000: ffd8 ffe0 0010 4a46 4946 0001 0101 013a  ......JFIF.....:
0000010: 013a 0000 ffed 0036 5068 6f74 6f73 686f  .:.....6Photosho
0000020: 7020 332e 3000 3842 494d 0404 0000 0000  p 3.0.8BIM......

检查下载文件的前几个字节并查看额外的位:

xdd avatest_local.jpg
0000000: 0aff d8ff e000 104a 4649 4600 0101 0101  .......JFIF.....
0000010: 3a01 3a00 00ff ed00 3650 686f 746f 7368  :.:.....6Photosh
0000020: 6f70 2033 2e30 0038 4249 4d04 0400 0000  op 3.0.8BIM...

从下载的文件中去掉第一位来证明这一点:

tail -c +2 avatest_local.jpg > avatest_fixed.jpg
jpeginfo avatest_fixed.jpg
avatest_fixed.jpg   80 x 80   24bit JFIF  N    6418

可能相关也可能不相关,但如果我使用 chrome header viewer inspector,头像的 http 响应 header 显示如下:

content-disposition inline; filename=4625.jpg

但是如果我使用redbot,它会显示:

Content-Disposition: inline; filename*=UTF-8''4625.jpg

并警告说

The Content-Disposition header doesn't have a 'filename' parameter.

然而,在官方 phpbb 板上,内容配置 header 似乎是正确的,尽管正如您在下面看到的,这似乎并不影响查看图像的其他方法。


总结:

  • 当下载或查看格式为 /download/file.php?avatar=4625_1413540046.jpg 的头像时,文件中添加了一个字节,使其无效。

  • 当查看像 /download/file.php?id=2871 这样的图像时,该图像完全有效并显示正常。

  • 当前在服务器上的所有图像文件都是有效的。

  • 我在“lint”模式下运行 php,所有文件似乎都有效。
  • 我已尝试在非 https 中以“本地主机”身份运行开发板,以完全消除外部因素。
  • 我已禁用所有扩展程序,甚至删除了它们的文件。
  • 此板已通过删除所有核心文件并复制新文件来升级。
  • Nginx 直接提供图像和其他文件非常好,同一台服务器上的其他软件运行良好。

服务器详细信息:

nginx 1.9.4
PHP 5.6.4-4ubuntu6.3
phpbb 3.1.6
Linux 3.19.0-30-generic #34-Ubuntu SMP Fri Oct 2 22:07:32 UTC 2015 i686 i686 i686 GNU/Linux

一整天都花在这上面,我自己和 phpbb 论坛都被搞糊涂了。自更新到 phpbb 3.1.6 后才开始发生。显然,这是我独有的问题。或者可能不是?

最佳答案

也许在 php 文件中 ?> 之后有一些空行?这可能是原因

关于如果某些目录权限不正确,phpbb 3.1.6 会生成损坏的头像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33224247/

相关文章:

perl - 如何在Nginx上使用FastCGI运行Perl脚本?

javascript - plupload 挂起且没有反馈

ruby-on-rails-3 - PHPBB 身份验证 + Rails

PHP 不会 POST 到 MySQL 数据库。

PHP 代码不会在站点中显示数据库中的所有结果,而是将它们显示在数据库中

php - 使用 Mysql 和 PHP 在表中汇总

nginx - 我如何在 nginx 中将子域作为 proxy_pass 值传递?

ruby-on-rails - force_ssl 在 Rails 中有什么作用?

phpbb - 允许访客查看主题但不能查看帖子

php - 如何找到两个月前或 N 个月前的最后一个星期一