カテゴリー
PHP

実体の初めに XML またはテキスト宣言がありません。

PHP でXMLを生成するプログラムを作成してはまってしまった問題が:

「実体の初めに XML またはテキスト宣言がありません。」

というエラーです。以下の出力結果をみると、先頭に2行の空行が出力されています。

1
2
3 <?xml version="1.0" encoding="UTF-8"?>
4 <rows>
5 <page>1</page>
6 <total>0</total>
7 <records></records>
8 </rows>
9

ソースコードを何度も見直したのですが、改行を出力するところはありませんが、インクルードしているファイルが2つあり、それぞれに <php … ?> の ‘?>’ の後に空行が一行ずつありました。それらを取り除くと、無駄な空行が出力されなくなり、XMLの解析エラーがおこる問題はなくなりました。

問題のあったインクルードファイルの例:

<?php
...(省略)...
?>
← ここの空行が出力されていた!
[EOF]

そういえば、以前にも PHP で Asterisk の AGI を作っていて、この空行によって予期しない動作に悩まされたことがあったのを思い出しました。

忘れないように備忘録としておきます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください