【问题标题】:Why different path in apache localhost and ubuntu server为什么 apache localhost 和 ubuntu 服务器中的路径不同
【发布时间】:2017-11-12 12:15:38
【问题描述】:

我在 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,在这种情况下有什么不同?

【问题讨论】:

  • 一个文件系统区分大小写,一个不区分。
  • Linux 文件系统通常区分大小写。
  • 如何在 php 中解决这个问题?我需要编写自动加载类。

标签: php apache ubuntu macos-sierra ampps


【解决方案1】:

区别在于一个文件系统区分大小写,一个不区分。

在 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 的人的讽刺。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多