Mac OS X + PHP:无法重新声明类测试

时间:2013-06-18 10:53:14

标签: php macos

这是我的班级脚本:

class.php

<?php
class testing {

    function hurray () {
        echo "Works.";
    }
}

我的调用脚本是:

test.php

<?php
include_once "class.php";
include_once "claSs.php";

$a = new testing();
$a->hurray();

当我尝试执行test.php

  

php test.php

我收到以下错误:

  

PHP致命错误:无法在第2行的/private/var/www/temp/ClaSs.php中重新声明类测试

* Nix OS支持不区分大小写的文件系统,这意味着它了解用于引用文件名的情况。虽然说上面的脚本正在加载相同的文件,但是Mac或PHP认为它是一个不同的文件并将其加载到运行时导致上述错误。

我的问题:

  1. Mac OS X是否认为它是两个不同的文件?
  2. PHP认为它是两个不同的文件吗?我怀疑是因为我在Windows上尝试了上述测试,它就像一个魅力。
  3. 我的理解错了吗?
  4. 解决此问题的最佳方法是什么,因为我最终不会更改100个旧文件。
  5. 其他信息:

    我的Mac OS X已根据this link使用Mac OS Extended(Journaled)构建:

    File System Personality:  Journaled HFS+
    Type (Bundle):            hfs
    Name (User Visible):      Mac OS Extended (Journaled)
    

3 个答案:

答案 0 :(得分:1)

您可以查看已经讨论该主题的here

根据我的经验,我会回答:

  1. 是的,OS X知道它是2个不同的文件。
  2. os x附带的原生php必须配置不同于使用linux或windows。当movin代码到live server并且它停止工作时我也遇到了这个问题,因为Linux没有找到类“Testing”vs“TEsting”。
  3. 我认为你是对的。 :)

答案 1 :(得分:1)

Mac OS确实将这两个文件名视为不同。

<?php

include_once "file.php";

// Prints current file and file.php
print_r(get_included_files());

include_once "file.php";

// Didn't add it more than once
print_r(get_included_files());

include_once "FILE.php";

// Prints current file, file.php and FILE.php
print_r(get_included_files());

答案 2 :(得分:0)

回答我自己的问题:

  1. Mac OS X是否认为它是两个不同的文件?

      

    是。 Mac配置了大小写不敏感,但它尊重大小写,所以如果你有两个包含相同的文件,但有大小写混合大小写,它会给你一个尊重案件的文件,好像它们是不同的文件,这会导致PHP加载这两个文件和第二个包括将是一次类碰撞。

  2. PHP认为它是两个不同的文件吗?我怀疑是因为我在Windows上尝试了上述测试,它就像一个魅力。

      

    请阅读#1的答案。

  3. 我的理解错了吗?

      

    我的理解是正确的,但它保留了这个案例。

  4. 解决此问题的最佳方法是什么,因为我最终不会更改100个旧文件。

      

    为避免此类错误,您需要确保不使用不同的大小写加载同一文件。