0

我在 localhost 我的运营商有项目工作

MacOs sierra 10.12.5
Install Ampps sever version 3.6
Apache/2.4.25
PHP 5.6.30

我有一个带路径的文件夹/Applications/AMPPS/www/project/library/Utilities/Path.php

php

var_dump(is_file('/Applications/AMPPS/www/project/library/utilities/path.php'));

总是返回 true 但是当我通过操作迁移到实时托管时

Ubuntu 14.04.5 LTS
PHP 5.6.30-12~ubuntu14.04.1+deb.sury.org+1 (cli) 
Server version: Apache/2.4.7 (Ubuntu)
Server built:   Jul 15 2016 15:34:04

并且路径不同,例如 /username/www/project/library/Utilities/Path.php

php

var_dump(is_file('/username/www/project/library/utilities/path.php'))

总是返回假

我的意思是在我的本地主机中,php 函数 is_file 或 file_exits 总是返回 true,文件名或文件夹的第一个字符是大写的,但在实时主机中,这总是返回 false,在这种情况下有什么不同?

4

1 回答 1

0

不同之处在于一个文件系统区分大小写,而一个不区分大小写。

在 Mac OS 中,您的默认文件系统是HFS+,其中文件名不区分大小写,因此foo.phpFoo.php被视为相等。

在 Ubuntu 中,您的默认文件系统(可能)是ext4,其中文件名区分大小写,因此foo.phpFoo.php不同的文件,甚至可以共存于同一目录中。

(注意:这适用于文件文件夹名称,因此/foo/bar.phpand/Foo/bar.php也可以在一个中等于,而在另一个中不等于)

我基本上可以看到三个选项:

  1. 最好的解决方案是始终使用(或要求)文件和目录名称的正确大小写。

  2. 如果您绝对需要处理不同/可能不正确的情况,您可能会使用自己的解决方案(例如PHP 不区分大小写的 file_exists() 版本;基本上:列出目录中的所有文件并手动比较它们)。但是在这种情况下,您会加载foo.php或何时需要并且所有三个文件都存在?Foo.phpfoO.phpFOO.php

  3. 如果您拥有必要的权限,您可以将 Ubuntu 设置为使用不同的文件系统,其中文件名也不区分大小写。期待来自 linux 家伙的诡异表情。

于 2017-06-10T16:33:20.143 回答