0

我正在使用 CakePHP 2.4.2 在带有 RDS 数据库的 Amazon Elastic Beanstalk 服务器上运行 CMS 站点。从昨晚开始,我在日志中看到错误,并且某些页面因此无法加载(500 错误):

error: [PDOException] SQLSTATE[HY000]: General error: 1300 Invalid utf8 character string: '\x88\xB7'

我有时会看到相同的“utf8”字符集,但错误日志中有一堆不同的字符串,所以每次都是相同的错误,但不是相同的错误字符串。以下是我的日志中的其他一些字符串:

'\x88\xB7'
'\x88W'
'H\x85'
'\xB0\\x91\x84{\x7F'
'\xC0\x9C'
'\xE8V'
'\xD8\x0E'
'\xA4'

昨晚下班之前,我推出了一个 ebextension 配置,以将 Zend Opcode Caching 安装到服务器。我没有证据表明这是错误的根源,但似乎我对服务器所做的唯一更改可能会导致错误 - 并且是在它们开始出现之前所做的最后一次更改。我在下午 5 点左右推送代码,并在下午 6 点左右开始在日志中看到错误。

为了更好地衡量,这是我用来启用 opcache 的配置:

packages:
  yum:
    php55-opcache: []

我有几台服务器在生产中,没有 opcache 包,相同的设置运行良好,我也无法在我的本地测试盒上重现此类错误。

我是否可以在 opcache 中发现某种晦涩的错误,或者对于我所看到的内容是否有更合乎逻辑的结论?由于这些错误发生在我的代码深处,我什至不知道如何去调试它。我已经搜索了我的代码,以确保代码本身没有坏字符,但除此之外,我有点在黑暗中闲逛。

更新:

我调查了这是否是由 UTF8 字符串上的错误 strtolower() 转换引起的,但其中一个查询不包含用户输入的值,并且没有任何条件使用 UTF8 字符串,所以我不相信它可以被追踪到。失败的查询之一是查找我的登录控制器中可用的所有区域:

$regions = $this->Region->find('all', array('conditions' => array('do_not_display' => 0, 'active' => 1)));
4

0 回答 0