Dan*_*ugg 13 php filesystems path
每当我使用PHP(通常)时,我通常在Windows机器上工作,但我(尝试)开发平台无关的应用程序; 一个主要问题是使用目录分隔符.
众所周知,在PHP的Windows环境中进行任何文件系统工作时,您可以使用正斜杠代替向后,而PHP则将其排除在外.在使用字符串文字传递路径fopen()或其他方面时,这一切都很好; 但是当检索路径时,无论是它__FILE__还是扩展realpath()路径,检索到的路径当然都是使用OS适当的斜杠.另外,我注意到尾部斜杠有些不一致.一次或两次__DIR__附加一个(反斜杠)realpath()也是(我更喜欢尾随斜杠,但不是间歇性的)
这显然是字符串比较的问题,因为而不是:
compare_somehow('path/to/file.php', __DIR__);
Run Code Online (Sandbox Code Playgroud)
为了可靠性,我不得不去:
compare_somehow('path/to/file.php', rtrim(strtr(__DIR__, '\\', '/'), '/') . '/');
Run Code Online (Sandbox Code Playgroud)
这似乎很多工作.当然,我可以将它放入一个函数中; 现在我在所有的OO代码中都遇到了任意函数依赖.
我知道PHP并不完美,需要做出调整,但肯定必须存在一些平台无关的解决方法来强制文件系统命中来检索前向斜线路径,或者至少是一种非侵入性的方式来引入类独立函数以此目的.
摘要问题(小号):
一切都是正斜线.即使主机OS分隔符是#*&@.
正如我评论的那样,我无法理解为什么你必须这样做(我对你正在解决的具体问题的快速描述感兴趣),但这里有一个可能的解决方案,使用输出__FILE__作为例子: -
$path = str_replace('\\', '/', __FILE__);
Run Code Online (Sandbox Code Playgroud)
这将(应该?)工作,无论操作系统返回的*斜杠(我认为).
不幸的是,我不知道"一些神奇的(虽然可靠)解决方法,黑客攻击或其他方式迫使PHP重新开始削减文件系统路径,无论服务器操作系统如何"除此之外.我想它可以包装在一个帮助器类中,但是仍然可以在代码中为您提供任意依赖性.