1

问题: Wordpress 博客的错误日志被“不支持字符集,假设为 utf-8”消息淹没;在 24 小时内增长 0 字节至 450 Mb(如果统计数据正确,则页面浏览量约为 28k)。

详细信息:我在共享主机帐户上托管了一个由 Wordppress 提供支持的博客。它已经运行了多年,直到不久前这才成为问题,但我无法确定开始发生这种情况的确切时间范围。几个月前,我开始超出允许的资源(主要是内存),所以他们把我转移到了不同​​的服务器,我不得不升级帐户以获得更高的允许资源使用率。旧服务器运行的是 php5,这个是 php7。最新的 WP + 大约 15 个流行的插件,都是各自的最新版本。主题很古老,从一开始就存在。

昨天我删除了站点根目录中 9 GB(!) 的错误日志,今天,24 小时后它的 500 MB。所有行都相似:

[datetime] PHP Warning:  html_entity_decode(): charset `keep-ali0' not supported, assuming utf-8 in /home/accountname/public_html/wp-includes/formatting.php on line 5124
[datetime] PHP Warning:  htmlentities(): charset `/[^0-9\.]/' not supported, assuming utf-8 in /home/accountname/public_html/wp-content/plugins/wp-super-cache/wp-cache-base.php on line 5
... etc.

我解析了旧的 2 GB 日志:

  • 它们来自 13 个文件:3 个核心 WP 文件,其他来自 6 个不同的插件
  • 仅来自这些函数:htmlentities(), htmlspecialchars(),html_entity_decode()
  • 超过 1000 个独特的“字符集”:都是垃圾,大多数包括不可打印的字符,其他只是奇怪的东西:路径(不是我的!),正则表达式,整数,十六进制值...... :#^[a-z]:[/\\]#i,,,,......meta_value0x7fe858ae2920/home/someone-elses-account-name/public_html/includes/functions.php

这些价值观从何而来?

我什至从哪里开始解决这个问题?

4

1 回答 1

1

看来这是 PHP 中的一个已知错误,它很难重现,所以它停留了一段时间。

https://bugs.php.net/bug.php?id=71876

已经提出了各种解决方法,包括:

  • internal_encoding=utf-8在 php.ini 中设置或使用ini_set('internal_encoding', 'utf-8');
  • 确保default_charset未在 php.ini中设置
  • 将字符集添加到函数调用中,例如html_entity_decode($x, null, 'utf-8');

这些变通办法似乎有不同的结果。

于 2018-12-07T04:28:51.140 回答