2014-07-15 33 views
2

我有一個腳本,需要了解腳本是否在HHVM或標準Zend引擎下運行。以編程方式獲取實際的PHP運行時

使用zend_version()會輸出不同的版本標籤 - 對於PHP5 2.5和2.5.99作爲當前的HHVM master,並且由於潛在的重疊,使用這種方法根本不安全。

使用phpversion()只是給了我支持的PHP版本,再次我不認爲這是安全的,由於可能的重疊。

什麼是安全地確定到底是哪運行腳本執行的最佳途徑?

+0

最安全的方法是不檢查這一點。問自己爲什麼需要這種檢查並找到另一種方式,例如通過檢查是否有一些您想使用的功能可用(function_exists,package_exists)。 – GolezTrol

+0

我知道,但在這種情況下,它是必要的,因爲Zend和HHVM以相互排斥的方式實現相同的功能,導致在HHVM下運行的代碼在php5下破壞。有關此問題的詳細信息,請參閱此票證:https://github.com/facebook/hhvm/issues/1391 – csvan

+1

密切相關:http://stackoverflow.com/questions/20777815/how-to-programmatically-check-if -hunning-on-hhvm – Quasdunk

回答

1

我可能會建議爲實際行爲本身,而不是你所使用的平臺測試。即使您可以確定您是在運行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(顯然)沒有,這樣你就可以用它來確定運行時間。

+0

提及'HHVM_VERSION',這是問題的正確答案。 –

相關問題