【问题标题】:Mac OS X + PHP: Cannot redeclare class testingMac OS X + PHP:无法重新声明类测试
【发布时间】:2013-06-14 13:27:24
【问题描述】:

这是我的课堂脚本:

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 多个旧文件。

其他信息:

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

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

【问题讨论】:

    标签: php macos


    【解决方案1】:

    您可以查看here,那里已经有关于该主题的讨论。

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

    1. 是的,OS X 知道它是 2 个不同的文件。
    2. os x 自带的原生 php 的配置必须与使用 linux 或 windows 不同。当将代码移动到实时服务器时,我也遇到了这个问题,它停止工作,因为 Linux 没有找到“Testing”和“TEsting”类。
    3. 我认为你是对的。 :)

    【讨论】:

    • 如果 PHP 配置有变化,我想修改并纠正它。请提出建议。
    • 我又添加了一个问题,您能分享一下您的答案或解决方案吗?
    • 我没有找到真正适用于 OS X 的解决方案。最终使用了与生产环境使用相同 php 版本的虚拟机。看看 vagran,它使虚拟机设置变得非常简单和可分发。
    【解决方案2】:

    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());
    

    【讨论】:

    • 为什么?如果文件系统不区分大小写,它应该将FILE.php 视为file.php 对吗?
    • 据我所知,PHP 无法正确解析 Mac OS 上的规范文件名。
    【解决方案3】:

    回答我自己的问题:

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

      是的。 Mac 配置为不区分大小写,但它尊重大小写,因此,如果您对同一文件有两个包含但混合大小写,它将为您提供尊重大小写的文件,就好像它们是不同的文件一样,这会导致 PHP 加载这两个文件和第二个包含将是类冲突。

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

      请阅读#1的答案。

    3. 我的理解有错吗?

      我的理解是正确的,但它保留了这种情况。

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

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

    【讨论】:

    猜你喜欢
    • 2013-08-21
    • 2023-04-02
    • 2014-02-25
    • 2013-01-05
    • 2020-05-08
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多