开始在现有存储库中使用 PHP 名称空间,所有文件都出现语法错误
Starting to use PHP namespaces in an existing repository, all files give syntax errors
在我的主要来源中的每个文件上用 <?php namespace foo;
替换了正常的 <?php
我收到了错误:
PHP Fatal error: Namespace declaration statement has to be the very first statement in the script in src/admin_house_videos.php on line 1
在大多数文件上。环顾互联网,人们建议归咎于名为 UTF8-BOM
的东西,但我怎样才能摆脱它?
事实证明,Sublime Text 能够在每个文件的基础上解决这个问题:
File -> Save with Encoding -> UTF8
然而,在大型存储库中,这将非常耗时。然后我发现 this guide 这表明可以使用 unix 工具 awk
来替换文件:
awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' file.php
然而,尝试将此写回文件并在末尾附加 > file.php
会使文件空白,可能是某种 read/write 输出问题被发送到标准输出。
所以需要写一个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
在我的主要来源中的每个文件上用 <?php namespace foo;
替换了正常的 <?php
我收到了错误:
PHP Fatal error: Namespace declaration statement has to be the very first statement in the script in src/admin_house_videos.php on line 1
在大多数文件上。环顾互联网,人们建议归咎于名为 UTF8-BOM
的东西,但我怎样才能摆脱它?
事实证明,Sublime Text 能够在每个文件的基础上解决这个问题:
File -> Save with Encoding -> UTF8
然而,在大型存储库中,这将非常耗时。然后我发现 this guide 这表明可以使用 unix 工具 awk
来替换文件:
awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' file.php
然而,尝试将此写回文件并在末尾附加 > file.php
会使文件空白,可能是某种 read/write 输出问题被发送到标准输出。
所以需要写一个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