我在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,在这种情况下有什么不同?
答案 0 :(得分:0)
不同之处在于,一个文件系统区分大小写,一个不是。
在Mac OS中,您的默认文件系统为HFS+,其中文件名不区分大小写,因此foo.php
和Foo.php
被视为等号。
在Ubuntu中,您的默认文件系统(可能)ext4,其中文件名区分大小写,因此foo.php
和Foo.php
是不同的文件,甚至可以共存于同一目录中
(注意:这适用于文件和文件夹名称,因此/foo/bar.php
和/Foo/bar.php
也可以等于一个而不等于另一个)
我基本上可以看到三个选项:
最好的解决方案是始终使用(或要求)正确的文件和目录名称。
如果您绝对需要处理不同/可能不正确的情况,您可能会使用自己的解决方案(例如PHP Case Insensitive Version of file_exists();基本上:列出目录中的所有文件并手动比较它们)。但在这种情况下,如果需要foo.php
且所有三个文件都存在,您会加载Foo.php
或foO.php
或FOO.php
吗?
如果您具有必要的权限,则可以将Ubuntu设置为使用不同的文件系统,其中文件名也不区分大小写。期待来自linux家伙的嘲笑。