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