为什么在apache localhost和ubuntu服务器上有不同的路径

时间:2017-06-10 16:06:14

标签: php apache ubuntu macos-sierra ampps

我在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'))

总是返回false

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

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

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