以编程方式获取实际的PHP运行时


Get actual PHP runtime programmatically

我有一个脚本,需要了解它是在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(显然)没有,所以您可以使用它来确定运行时。