【问题标题】:PHP __FILE__ returns backslashes in Linux VM file mounted from OSX HostPHP __FILE__ 在从 OSX 主机挂载的 Linux VM 文件中返回反斜杠
【发布时间】:2014-11-15 18:16:27
【问题描述】:

我在 OSX (Mavericks) 主机上的 Fedora VM 中运行 LAMP。

VM挂载文件夹中的文件是/media/sf_www/application/Some/Name/Space/FileName.php

<?php 
namespace Some\Name\Space;

die(__FILE__);
?>

输出

/media/sf_www/application/Some\Name\Space\FileName.php

但是,我在 linux 主机上的生产环境中运行了相同的站点,并且相同的脚本输出所有内容都带有正斜杠。

假设我无法触摸代码。

我可以在我的虚拟机上做任何 php 配置来输出正斜杠吗?

为什么会这样? OSX 也应该使用正斜杠,即使它从 VM 主机中获取目录分隔符。

编辑: 仅当通过 Kohana 加载文件时才会发生这种情况。如果我直接访问脚本(apache 或 CLI),输出是正确的(正斜杠)

【问题讨论】:

    标签: php linux macos configuration kohana


    【解决方案1】:

    这是一个相关的问题:PHP directory separators, forcing forward slash; non-intrusive

    它给出的答案是,不,您没有更改配置以使其仅使用一种类型的斜线。

    为什么会这样?我不知道,也许这是 Kohana 中的一个准错误。也许部分是 PHP 的错,因为将路径连接在一起的函数对于它接受什么样的斜线有点过于不可知论了。

    这有什么重要的原因吗?如果你必须有一种斜线,你可以先对它做str_replace('\\', '/', __FILE__);

    【讨论】:

    • 感谢您的回答。我在 linux 机器上本机正常运行。因此,它表明它可以以某种方式正确运行。现在我必须弄清楚是因为文件位于 vm 主机 osx 中并且仅安装在 linux 上而 kohana 无法弄清楚,还是因为某些 php 配置不适用于 Kohana。在这一点上,我尽量不要碰代码,因为这将是整个代码库“搜索和修复”。
    • 这也可能表明 kohana 正在某处进行一些操作系统检测以决定使用哪种斜线,而不考虑它是 OSX 的可能性。此外,如果您解释它的重要性,可能会建议一个好的解决方法。
    • Kohana 确实知道它是否是 Windows。我可以确认它将这个系统设置为不是 Windows。我只是想知道什么样的代码可以覆盖 FILE 行为。我确实找到了所有 ini_set 用法,并没有看到任何奇怪的地方。另外我认为它必须对命名空间做一些事情,因为它只在命名空间路径部分之间返回反斜杠。有许多侵入性的解决方法。但我不需要打扰,因为我对网络应用的测试非常有限。
    • 如果您正在寻找非侵入性,请查看我链接到的其他帖子,答案是没有。我想知道的问题是它为什么重要?解决这个问题可能更容易。
    • 这很重要,因为它使用它通过include_once(dirname(__FILE__) . "/../../../Blah.php") 加载文件。我尝试使用 str replace 修复它,但随后使用相同代码的其他文件废止了..然后有一大堆。因此,最明智的解决方案是弄清楚工作环境和非工作环境之间的区别并消除它。
    猜你喜欢
    • 1970-01-01
    • 2015-09-21
    • 2014-03-28
    • 1970-01-01
    • 2016-06-16
    • 2016-12-12
    • 2013-07-23
    • 2020-07-15
    • 1970-01-01
    相关资源
    最近更新 更多