error_log 被 "charset not supported, assuming utf-8" 条消息淹没
error_log flooded by "charset not supported, assuming utf-8" messages
问题: Wordpress 博客的错误日志被 "charset not supported, assuming 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 个唯一 "charsets":全部都是垃圾,大多数包括不可打印的字符,其他只是奇怪的东西:路径(不是我的!)、正则表达式、整数、十六进制值...:
#^[a-z]:[/\]#i
、meta_value
、0x7fe858ae2920
、/home/someone-elses-account-name/public_html/includes/functions.php
、...
这些值从何而来?
我从哪里开始解决这个问题?
这似乎是 PHP 中的一个已知错误,该错误很难重现,因此它被搁置了一段时间。
https://bugs.php.net/bug.php?id=71876
已提出各种解决方法,包括:
- 在 php.ini 中设置
internal_encoding=utf-8
或使用 ini_set('internal_encoding', 'utf-8');
- 确保
default_charset
在 php.ini 中 未设置
- 将字符集添加到函数调用中,例如
html_entity_decode($x, null, 'utf-8');
这些变通办法似乎有不同的结果。
问题: Wordpress 博客的错误日志被 "charset not supported, assuming 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 个唯一 "charsets":全部都是垃圾,大多数包括不可打印的字符,其他只是奇怪的东西:路径(不是我的!)、正则表达式、整数、十六进制值...:
#^[a-z]:[/\]#i
、meta_value
、0x7fe858ae2920
、/home/someone-elses-account-name/public_html/includes/functions.php
、...
这些值从何而来?
我从哪里开始解决这个问题?
这似乎是 PHP 中的一个已知错误,该错误很难重现,因此它被搁置了一段时间。
https://bugs.php.net/bug.php?id=71876
已提出各种解决方法,包括:
- 在 php.ini 中设置
internal_encoding=utf-8
或使用ini_set('internal_encoding', 'utf-8');
- 确保
default_charset
在 php.ini 中 未设置
- 将字符集添加到函数调用中,例如
html_entity_decode($x, null, 'utf-8');
这些变通办法似乎有不同的结果。