在主要来源的每个文件中使用<?php
替换了普通<?php namespace foo;
后,我收到了错误消息:
PHP致命错误:命名空间声明语句必须是第1行src / admin_house_videos.php脚本中的第一个语句
在大多数文件上。环顾互联网的人们认为应该责怪UTF8-BOM
这个问题,但我怎么能摆脱这个呢?
答案 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