2014-09-21 35 views
0

我在OSX(Mavericks)主机上运行Fedora VM中的LAMP。PHP __FILE__在从OSX挂载的Linux VM文件中返回反斜杠主机

在VM中的文件安装夹是/media/sf_www/application/Some/Name/Space/FileName.php

<?php 
namespace Some\Name\Space; 

die(__FILE__); 
?> 

输出

/媒体/ sf_www /应用/有些\名称\空间\ FileName.php

但是,我有相同的网站在linux主机上运行生产和相同的脚本输出与正斜杠的一切。

我们假设我无法触摸代码。

有什么在PHP配置我可以做我的虚拟机输出正斜杠?

这是怎么发生的? OSX也应该使用正斜杠,即使它需要虚拟机托管机器的目录分隔符。

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

回答

0

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

,它给出的答案是,没有没有配置你更改为使其仅使用一种类型的斜杠。

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

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

+0

谢谢你的回答。我在Linux机器上正常运行。所以,这表明它可以以某种方式正确运行。现在我必须弄清楚是因为这些文件位于vm主机osx中,并且只在linux上挂载,而kohana无法解决它,或者它是否是一些不适合Kohana的php配置。在这一点上,我尽量不要触摸代码,因为它将是“搜索和修复”的整个代码库。 – 2014-09-21 22:40:02

+0

它也可能表明某处kohana正在做一些操作系统检测来决定使用什么样的斜线,而不考虑它是OSX的可能性。另外,如果你解释为什么它很重要,可以建议一个很好的解决方法。 – 2014-09-21 22:48:20

+0

Kohana确实弄清楚它是否是窗户。而且我可以确认它将这个系统设置为不是windows。我只是想知道什么样的代码可以覆盖__FILE__行为。我确实发现了所有ini_set用法,并没有看到任何奇怪的地方。我还以为它必须对命名空间做些什么,因为它只在名称空间路径部分之间返回反斜杠。 有许多侵入性的解决方法。但我不需要侵入,因为我对Web应用程序的测试非常有限。 – 2014-09-21 23:03:00