UTF-8のhttpd.confでエラー
本日Apacheをいじっていたら、こんな Syntax error に遭遇しました。
少し調べたのでメモ。
# /usr/local/httpd-2.2/bin/apachectl configtest Syntax error on line 1 of /usr/local/httpd-2.2.15/conf/httpd.conf: Invalid command '\xef\xbb\xbfServerRoot', perhaps misspelled or defined by a module not included in the server configuration
diffを取ると確かに違います。
でも見た目上は分かりません。
# diff httpd.conf httpd.conf.org 1c1 < ServerRoot "/usr/local/httpd-2.2" --- > ServerRoot "/usr/local/httpd-2.2"
ハッシュを取るとやはり違う。
# md5sum httpd.conf httpd.conf.org 2c22e20a73866507ecdef7f3a8916d2b httpd.conf 4c542941ede3dbf3914d2100a68b83e0 httpd.conf.org
ということで、問題のファイルに対して cat -v をすると、先頭に怪しい記号が。これか。
# cat -v httpd.conf | head -2 M-oM-;M-?ServerRoot "/usr/local/httpd-2.2"
原因はUTF-8の符号「EF BB BF」が含まれていたこと。
(BOMっていうようで。)
おもむろにfileコマンドで調べると一目了然。
# file httpd.conf httpd.conf.org httpd.conf: UTF-8 Unicode text httpd.conf.org: ASCII text
16進ということでついでに hexdump してみます。
# hexdump -C /usr/local/httpd-2.2/conf/httpd.conf | head -2 00000000 ef bb bf 53 65 72 76 65 72 52 6f 6f 74 20 22 2f |...ServerRoot "/| 00000010 75 73 72 2f 6c 6f 63 61 6c 2f 68 74 74 70 64 2d |usr/local/httpd-| # hexdump -C /usr/local/httpd-2.2/conf/httpd.conf.org | head -2 00000000 53 65 72 76 65 72 52 6f 6f 74 20 22 2f 75 73 72 |ServerRoot "/usr| 00000010 2f 6c 6f 63 61 6c 2f 68 74 74 70 64 2d 32 2e 32 |/local/httpd-2.2|
確かに先頭に「EF BB BF」が入っている。。
原因がわかったので設定ファイルのBOMを取り除いて無事終了。
スクリプトファイルも同じことが起きると動かなくなるような気がします。
今度確認してみることにします。
今日はこんな所で。