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

时间:2015-10-19 21:29:02

标签: php nginx phpbb3

注意:已解决 - 请参阅下面的答案。问题一直供参考。

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

为了排除像Cloudflare这样的外部因素,我现在将phpbb设置为非https,仅设置localhost,压缩关闭。

可以从以下代码中看到问题:

从localhost获取文件 - 没有缓存或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检查器,则头像的http响应标头显示以下内容:

content-disposition inline; filename=4625.jpg

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

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

并警告

  

Content-Disposition标头没有'文件名'参数。

但是,在官方phpbb主板上,内容处理标题似乎是正确的,尽管如下所示,这似乎不会影响其他查看图像的方法。

要点:

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

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

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

  • 我在" lint"中运行了php。模式和所有文件似乎都有效。
  • 我试过把电路板作为" localhost"在非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后才开始发生。显然,这是我独有的问题。或者可能不是?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

解决了它!

检查权限

https://www.phpbb.com/support/docs/en/3.0/kb/article/phpbb3-chmod-permissions/

chown -R forum:forum forum/

find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;

cd forum
chmod 777 cache store files images/avatars/upload/

关于chown -R论坛的第一点:论坛论坛/是我总是在更新之后做的事情,但chmod是我认为我很久以前做过的事情。当我更新电路板时,我没有触及任何这些目录。

我想知道3.1.6是否处理temp和缓存文件的方式与以前的版本不同?所有我能想到的是phpbb(或其他东西)试图缓存获取头像(?!)的响应,当它发现它不能时,它仍然发送文件,但是...带有一个额外的字节?!

但这甚至没有意义。完全没有。我根本无法解决这个问题,但我只能说重新做所有权限已经修复了它。

如果有人能解释可能发生的事情,我全都听见了!

答案 2 :(得分:0)

我遇到了类似的问题,结果是在config.php的开头意外插入了一个空行