开始在现有存储库中使用PHP命名空间,所有文件都会出现语法错误

时间:2015-03-11 17:53:19

标签: php utf-8 namespaces

在主要来源的每个文件中使用<?php替换了普通<?php namespace foo;后,我收到了错误消息:

  

PHP致命错误:命名空间声明语句必须是第1行src / admin_house_videos.php脚本中的第一个语句

在大多数文件上。环顾互联网的人们认为应该责怪UTF8-BOM这个问题,但我怎么能摆脱这个呢?

1 个答案:

答案 0 :(得分:0)

事实证明,Sublime Text能够在每个文件的基础上修复此问题:

  

档案 - &gt;使用编码保存 - &gt; UTF8

然而,在大型存储库中,这将非常耗时。然后我发现this guide表示可以使用unix工具awk替换文件:

awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' file.php

然而,尝试将此写回到末尾附加> file.php的文件会使文件空白,可能会将输出的某种读/写问题发送到stdout。

因此需要编写一个bash脚本来解决问题;在我的情况下,它是从文件位于./src/的根目录运行,但更改$dir参数以更改此值。 echo行只是报告进度。

#!/bin/bash

dir="./src/"

for file in `find $dir -name "*.php"` ; do
    echo $file
    awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' $file > $file.awk
    mv $file.awk $file
done