我们在HHVM上运行WordPress,并且由于不区分大小写的常量,一些插件会抛出警告,这意味着define()
与可选的第三个参数$case_insensitive = true
一起使用。 AFAIK HHVM从来没有,也永远不会对不区分大小写的常量提供实际支持,警告表明尽管成功编译,但实际行为将表现为不使用该参数。
虽然我认识到不区分大小写的常量是愚蠢的,没有它们也没关系,但我也不想说服各种第三方WP插件开发人员为他们可能不喜欢的平台(HHVM)更新他们的代码不要用。像这样的东西的分叉插件是一个排水管。
SO:我希望HHVM配置会使这些通知无效
如果开发人员真正利用不区分大小写的优势,我愿意冒险,因为我怀疑他们这样做,我可以更容易地测试,以确保他们不会永远管理分叉插件。
如果没有配置选项我可以忍受,但我找不到任何答案。 Google,SO和ServerFault所以我认为我会成为一个要求并在SEO中获得有用结果的人。
违规代码示例:
define("qq_enabled", "enabled", true);
通知示例:
Warning: Case insensitive constant names are not supported in HipHop in /var/www/sites/globalvoices_test/_plugins/quantcast-quantifier/quantcast-quantifier.php on line 52
注意:我不是要求一种方法来启用不区分大小写的常量,我接受它们因性能原因而不受支持。我只是不希望看到有关它们堵塞我的日志的警告。
答案 0 :(得分:1)
如果不更改HHVM并重新编译,则无法隐藏此消息。但你可以:
WarningFrequency
设置为更高的数字,仅在每N个警告https://github.com/facebook/hhvm/wiki/runtime-options 或
或
作为一项有趣的练习,我通过HHVM代码进行了跟踪,看看是否有可能以某种方式在没有代码更改的情况下禁用此消息。
让我们看看代码。调用raise_warning(...)
(source)
bool HHVM_FUNCTION(define, const String& name, const Variant& value,
bool case_insensitive /* = false */) {
if (case_insensitive) {
raise_warning(Strings::CONSTANTS_CASE_SENSITIVE);
}
return Unit::defCns(name.get(), value.asCell());
}
只要case_insensitive为true,就会调用 raise_warning(...)
。它仅使用表示错误消息的字符串调用(在头文件中定义)。这看起来并不太好,到目前为止,没有简单的方法可以在raise_warning中唯一地识别此消息,因此可能无法使用标准流程进行过滤。让我们看看raise_warning(...)
实际上做了些什么。 (source)
void raise_warning(const std::string &msg) {
if (warning_freq_check()) {
raise_warning_helper(false, msg);
}
}
raise_warning(...)
调用warning_freq_check()
,基本上确定是否应该记录警告,允许您只打印每N个警告。
正如您所知,在代码中此时没有任何唯一的方法可以从任何其他消息中识别此消息。消息将设置为WARNING级别。除了频率检查(这只是防止打印大量相同的信息)
其他不推荐选项包括
raise_warning()
中的ext_std_misc.cpp
来电并重新编译hhvm