PHP名字空间不工作 – 怀疑是PHPconfiguration问题

好的,所以,我一直在使用自动加载器,变得习惯于MVC,并决定尝试解决命名空间。 那么,这没有按预期工作。 我已经设法以非常简单的方式重现错误,所以我的PHP文件的内容如下:

<?php namespace site\test; echo 'hello'; 

输出不是我所期望的:

致命错误:命名空间声明语句必须是第2行文件中脚本的第一个语句

我在Synology NAS上运行PHP 5.3.10,使用最新版本的DSM(Synology的操作系统)。 这使用了Apache v2.2.22。 我可以确认,注释掉“命名空间”这一行返回单词“你好”,在它之前没有额外的字符。

文件的开头没有BOM。 我也没有设置标题的问题,如“位置”这将表明这是一个问题。

行尾是Unix(仅限\ n),文件的字符编码是UTF8。

PHP设置“auto_prepend_file”是空的。

命名空间之前是否有空格? 命名空间必须出现在任何输出之前。 这包括浏览器的HTML。 这还包括一个UTF-8字节顺序标记(BOM),可以从某些编辑器中读入。

尝试在Linux等编辑器(如vi打开该文件,并在开始时显示是否有BOM。

在PHP中检查如何修复“Headers already sent”错误,以获取有关输出可以在文件中启动的其他方式的信息。

如果您的文件使用UTF-8 BOM作为第一个字符,则应该在开始标记之前删除所有空格。

重新安装DSM(Synology OS)确实解决了这个问题。 一旦完成,从其他框架获得的一些类在文件的开头有“BOM”字节,但不是全部。 物料清单问题的简单解决方案是在自动装载程序中添加一个“物料清单”卸载程序。