【问题标题】:What is the PHP7 version of $_SERVER['HOME']$_SERVER['HOME']的PHP7版本是什么
【发布时间】:2017-12-12 13:34:24
【问题描述】:

最近,我安装了一个包含 PHP7 的新 Ubuntu 服务器。以前,在 PHP5.3 上(或者它可能是 PHP5 的更高版本,我可以使用 $_SERVER['HOME'] 返回服务器的主路径(即 /var/www/)。但是,这在 PHP7 中是不可能的,因为$_SERVER['HOME'] 已不复存在。

如果我有一个文档根目录为 /var/www//httpdocs 的站点,我如何获得 /var/www/ 部分。我无法对其进行硬编码,因为我的测试服务器(Synology NAS)不使用 PHP7 并且无法升级到 PHP7,因此,我需要使用一个对于 PHP5 和 PHP7 来说是常量的变量,它返回相同的结果来讨论与 PHP5 中 $_SERVER['HOME'] 的结果相同。

我尝试使用$_ENV['HOME'],但是当执行简单的die($_ENV['HOME']); 时,这似乎不会从我的系统中打印任何内容。

有人可以帮我摆脱痛苦吗?

谢谢

【问题讨论】:

  • 请注意:$_SERVER["HOME"] 从来都不是 PHP 提供的标准标头。这可能是因为网络服务器现在也是不同的版本。只需发送print_r($_SERVER) 即可找到所需的内容。
  • 谢谢@apokryfos。我确实尝试过,但我唯一能看到的是文档根目录,但我需要它成为文档根目录的父级。也许我需要看一下“string dirname (string $path [, int $levels = 1]);”。你同意吗?
  • 好吧,首先你可以尝试getenv("HOME"),在更糟糕的情况下尝试exec("echo ~"),让它更可靠一点。如果不是,那么假设您在所有环境中都保持类似的设置,那么您的建议将起作用。

标签: php server php-7


【解决方案1】:

好的,感谢@apokryfos,我已经解决了这个问题。我也许应该提到我想在文档根目录之外包含一个文件(哎呀,我的错)。

getenv('HOME') 出于某种未知原因在我的服务器上返回一个空字符串,但我用来克服这个问题的方法是使用 dirname 选项。

最终结果是:

set_include_path(get_include_path().PATH_SEPARATOR.dirname($_SERVER['DOCUMENT_ROOT'],1)."/includes");

再次感谢您的帮助。

【讨论】:

    【解决方案2】:

    如果这有用。我最近从 PHP-7.0 升级到 PHP-7.1 并遇到了同样的问题。 $_SERVER["HOME"] 不再设置。虽然我并没有真正将它用于任何事情,但我确实觉得它有点好奇,所以这就是我修复它的方法:安装并启用 PHP-7.1-FPM 并禁用 PHP-7.1 apache2 mod。

    a2dismod php7.1 
    a2enmod proxy_fcgi setenvif
    a2enconf php7.1-fpm
    service apache2 restart
    

    7.0 版的思路应该类似

    虽然我不需要执行下一步,但问题Environment variables and PHP 似乎建议手动设置环境变量也可能需要。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 2017-02-05
      • 2014-12-17
      • 2016-05-02
      • 1970-01-01
      相关资源
      最近更新 更多