【问题标题】:case sensitivity on Mac for file_exists()?Mac 上 file_exists() 是否区分大小写?
【发布时间】:2013-03-28 11:01:32
【问题描述】:

首先,Mac OS X 不是我的本机操作系统,但由于我对 Ubuntu 很熟悉,所以大部分情况下它很容易过渡。

由于它是基于 Unix 的,我的印象是这个操作系统是区分大小写的,但 file_exists() 函数却另有说明。

在我的 htdocs 文件中,我有这 2 个文件:

test.php

MyFileWiThMiXeDCaSe.php

在 test.php 中,我有这个代码:

if(file_exists('myfilewithmixedcase.php')) {
  echo 'exists';
} else {
  echo 'doesnt exist';
}

// ouputs: exists

有人知道这是怎么发生的吗?这导致了一个问题,因为当我们将这样的代码部署到 linux 操作系统时,file_exists() 返回 false。

顺便说一句:我使用 MAMP PRO 作为本地 Web 服务器。

【问题讨论】:

  • 不是您当前问题的答案,但很容易创建一个具有区分大小写的文件系统的小额外分区并挂载它,因为 osx 上的默认文件系统允许调整大小。将您的 Web 项目放在该分区上,以防止您自己创建与区分大小写相关的错误/问题。如果您决定创建指向新分区的符号链接,请注意您的 apache 路径。
  • 谢谢你的建议,听起来如果我为我的 htdocs 文件夹创建一个分区,它应该可以大大减少这个问题。
  • 您可以自己编写一个区分大小写的 file_exists() 版本。可以先获取父目录的文件列表,通过大小写比较判断当前文件是否在里面。

标签: php macos mamp file-exists


【解决方案1】:

尽管是 BSD 衍生版 OS X 不区分大小写。或者更确切地说,HF 和 HFS+ 文件系统不是,除非您在格式化磁盘时选择了区分大小写的选项。这通常不会这样做,因为许多应用程序(Adobe、MS 等)都有这个问题 - 或者至少他们在我上次在 Tiger 下尝试时这样做了。

【讨论】:

    【解决方案2】:

    OS X 上的默认文件系统是不区分大小写的 HFS+。

    您可以将卷格式化为区分大小写的 HFS+,并且有一些(肮脏的)方法可以为现有卷启用区分大小写。但是,这些会破坏现有软件,您应该避免在根卷上区分大小写。

    如果您出于某种原因需要区分大小写的文件系统(例如,构建 Android 需要它),您可以使用磁盘工具制作一个适当格式化的磁盘映像。

    请注意,OS X 的 UNIX 基础可以很好地与区分大小写的文件系统配合使用。

    【讨论】:

    • 感谢您的详细回复。如果我的磁盘实用程序显示 Format : Mac OS Extended (Journaled),这是否意味着它当前不区分大小写?
    • 是的。区分大小写的文件系统在“磁盘工具”中专门表示。 (您可以通过创建新的磁盘映像轻松制作。)
    【解决方案3】:

    默认情况下,Mac OS X 不区分大小写,因此“FILE”和“file”是同一个文件的两个名称。

    【讨论】:

      猜你喜欢
      • 2011-04-27
      • 2011-11-16
      • 1970-01-01
      • 2013-03-16
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2021-08-22
      相关资源
      最近更新 更多