我有一個腳本,需要了解腳本是否在HHVM或標準Zend引擎下運行。以編程方式獲取實際的PHP運行時
使用zend_version()會輸出不同的版本標籤 - 對於PHP5 2.5和2.5.99作爲當前的HHVM master,並且由於潛在的重疊,使用這種方法根本不安全。
使用phpversion()只是給了我支持的PHP版本,再次我不認爲這是安全的,由於可能的重疊。
什麼是安全地確定到底是哪運行腳本執行的最佳途徑?
我有一個腳本,需要了解腳本是否在HHVM或標準Zend引擎下運行。以編程方式獲取實際的PHP運行時
使用zend_version()會輸出不同的版本標籤 - 對於PHP5 2.5和2.5.99作爲當前的HHVM master,並且由於潛在的重疊,使用這種方法根本不安全。
使用phpversion()只是給了我支持的PHP版本,再次我不認爲這是安全的,由於可能的重疊。
什麼是安全地確定到底是哪運行腳本執行的最佳途徑?
我可能會建議爲實際行爲本身,而不是你所使用的平臺測試。即使您可以確定您是在運行PHP還是HHVM,但只要PHP或HHVM修復/更改此行爲,您最終都需要知道確切的版本。您可以使用例如this GitHub comment中的代碼並比較其輸出以測試您的平臺所展現的行爲類型。
這是可以區分的行爲代碼:
<?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);
或者,你也可以只使用答案this question,這表明HHVM界定HHVM_VERSION
,而PHP(顯然)沒有,這樣你就可以用它來確定運行時間。
提及'HHVM_VERSION',這是問題的正確答案。 –
最安全的方法是不檢查這一點。問自己爲什麼需要這種檢查並找到另一種方式,例如通過檢查是否有一些您想使用的功能可用(function_exists,package_exists)。 – GolezTrol
我知道,但在這種情況下,它是必要的,因爲Zend和HHVM以相互排斥的方式實現相同的功能,導致在HHVM下運行的代碼在php5下破壞。有關此問題的詳細信息,請參閱此票證:https://github.com/facebook/hhvm/issues/1391 – csvan
密切相關:http://stackoverflow.com/questions/20777815/how-to-programmatically-check-if -hunning-on-hhvm – Quasdunk