我有一个脚本,需要了解它是在HHVM还是标准Zend引擎下运行。
使用zend_version()输出不同的版本标签- PHP5为2.5,HHVM master为2.4.99,由于潜在的重叠,我觉得使用这种方法根本不安全。
使用phpversion()只是给我支持的PHP版本,由于潜在的重叠,我再次认为这是不安全的。
安全确定脚本在哪个运行时执行的最佳方法是什么?
我可能建议测试实际行为本身,而不是您使用的平台。即使您可以确定您是在运行PHP还是HHVM,一旦PHP或HHVM修复/更改此行为,您最终也需要知道准确的版本。例如,你可以使用GitHub注释中的代码,并比较其输出来测试你的平台显示哪种类型的行为。
这是可以区分行为的代码:
<?php
function start_elem($parser,$name,$attribs) {
echo "<$name>";
}
function end_elem($parser,$name)
{
echo "</$name>";
}
$parser=xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_set_element_handler($parser,"start_elem","end_elem");
$buf = '<F>';
echo xml_parse($parser,$buf,strlen($buf)==0);
或者,您也可以使用这个问题的答案,这表明HHVM定义了HHVM_VERSION
,而PHP(显然)没有,所以您可以使用它来确定运行时。