【问题标题】:Detecting whether the program is run through HipHop or regular CLI/mod_php检测程序是通过 HipHop 还是常规 CLI/mod_php 运行
【发布时间】:2011-08-07 23:49:49
【问题描述】:

我想知道是否有人找到了检测 PHP 脚本/程序是通过 Facebook 的 HipHop 还是“常规”环境(CLI、mod_php、CGI)运行的方法。

目前我正在使用的解决方法是寻找未实现的功能(例如 PHP 5.3 功能)并检查所述功能的可用性。当然,这是一个相当狡猾的 hack(并且不可移植),因为随着 HipHop 的成熟,将实现越来越多的功能。

【问题讨论】:

  • 只是好奇,知道什么有好处? php_sapi_name 说什么?
  • 我刚试过,如果从命令行调用二进制文件,php_sapi_name 返回“cli”。我想进行环境检测,因为我想在 HipHop 下运行时加载不同的配置。

标签: php environment hiphop


【解决方案1】:

$_ENV['HPHP'] 在 HipHop 下运行时设置为 1。

感谢 nicolasff 的解决方案

参考:https://github.com/facebook/hiphop-php/issues/382#issuecomment-1754648

【讨论】:

    【解决方案2】:

    我认为这种方法根本行不通——因为 HipHop 会静态编译您项目中的所有代码,因此您不能包含任何 HipHop 无法理解的代码路径或函数调用,即使它们在运行时被跳过。基本上,要让您的项目在 HipHop 下运行,您必须编写大部分(如果不是全部)代码,并假设它正在被使用。

    【讨论】:

    • 嗯,你可以完美地运行function_exists 来查看是否定义了一个函数。如果它不存在,它不应该崩溃。编译过程可能会自动将其解析为布尔值并简化整个表达式,但它确实有效。这只是不雅。
    • 你可以随心所欲地调用function_exists(),但之后无法调用函数——间接调用语法$x()在HipHop中是禁止使用的,并且对函数的显式调用HipHop 没有实现的会导致编译失败,即使它在 function_exists() 调用之后。
    猜你喜欢
    • 1970-01-01
    • 2011-01-01
    • 2011-05-11
    • 2010-12-31
    • 1970-01-01
    • 2011-03-23
    • 2020-01-05
    • 1970-01-01
    • 2011-09-17
    相关资源
    最近更新 更多