【发布时间】:2011-12-31 00:20:22
【问题描述】:
每当我使用 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):
- 是否有一些神奇的(虽然可靠)变通方法、hack 或其他方式来强制 PHP 退回正斜杠文件系统路径,而不管服务器操作系统如何?
- 我将假设上述问题的答案是否,所以继续往下看;我可以做出哪些规定来强制使用正斜杠( 或任何选择,真的)作为目录分隔符?我假设通过上述过滤功能,但现在应该去哪里?
所有的正斜杠。即使主机操作系统分隔符是#*&@。
【问题讨论】:
-
你看过DIRECTORY_SEPARATOR吗?
-
@vascowhite - 当然有。但是,我看不出它有什么好处。
'path'.DS.'to'.DS.'file.php'如果我将其别名为DS但即使这样也很痛苦。此外,用户提供的路径(配置文件等)仍然需要为strtr()-ed 或自己使用DIRECTORY_SEPARATOR。 -
为什么要比较路径?您不能使用 PHP 的函数来测试文件或目录是否存在吗?那将与操作系统无关,不是吗?
标签: php path filesystems