0

重複の可能性:
PHP によって既に送信されたヘッダー

私はこのチュートリアルに従おうとしています:

PHP、MySQL、Google マップを使用して店舗検索を作成する
Google Geo API チーム; 2009 年 8 月

位置データの MySQL テーブルがあるところまで来ました。目的のために、このチュートリアルのコードの要素を変更しました。MySQL テーブルからすべてのデータを抽出し、それを XML に変換して、Google Maps API で読み取れるようにしたいだけです。

残念ながら、以下のコードを実行すると、ブラウザー ページが読み込まれず、次のエラーが表示されます。

警告: ヘッダー情報を変更できません - 43 行目の .../getdata/genxml.php の (.../getdata/genxml.php:8 で開始された出力) によって既に送信されたヘッダー

これは問題のある行かもしれません:

header("Content-type: text/xml");

これがコードのブロック全体です。私はどんな間違いをしていますか?ありがとう!

<?php
require("phpsqlsearch_dbinfo.php");

//Get parameters from URL
//$center_lat = $_GET["lat"];
//$center_lng = $_GET["lng"];

// Start XML file, create parent node
$dom = new DOMDocument("1.0");
$node = $dom->createElement("markers");
$parnode = $dom->appendChild($node);

// Opens a connection to a mySQL server
$connection=mysql_connect (localhost, $username, $password);
if (!$connection) {
  die("Not connected : " . mysql_error());
}

// Set the active mySQL database
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
  die ("Can\'t use db : " . mysql_error());
}

// Search the rows in the markers table
$query = sprintf("SELECT * FROM markers WHERE 1");
$result = mysql_query($query);

$result = mysql_query($query);
if (!$result) {
  die("Invalid query: " . mysql_error());
}
// **Below is line 42. The error may be here.** 
header("Content-type: text/xml");

// Iterate through the rows, adding XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
  $node = $dom->createElement("marker");
  $newnode = $parnode->appendChild($node);
  $newnode->setAttribute("id", $row['id']);
  $newnode->setAttribute("address", $row['address']);
  $newnode->setAttribute("lat", $row['lat']);
  $newnode->setAttribute("lng", $row['lng']);
  $newnode->setAttribute("bt", $row['bt']);
  $newnode->setAttribute("dt", $row['dt']);
  $newnode->setAttribute("br", $row['br']);
  $newnode->setAttribute("bth", $row['bth']);
  $newnode->setAttribute("sqft", $row['sqft']);
  $newnode->setAttribute("lp", $row['lp']);
  $newnode->setAttribute("url", $row['url']);
  $newnode->setAttribute("dom", $row['dom']);
}
echo $dom->saveXML();

?>
4

2 に答える 2

1

投稿したエラーは、出力するものを既に送信してから、header() への呼び出しを発行しようとしたときに発生します。

その header() 呼び出しの前に何かが出力されており、それを見つける必要があります。phpsqlsearch_dbinfo.php ソース ファイルにあるか、<?phpタグの上にある可能性がありますが、これはよくある間違いです。(または、タグの上またはphpsqlsearch_dbinfo.php<?phpのタグの後にある可能性があります。)?>

私が以前に問題として見たもう 1 つのことは、一部のエディターが改行とキャリッジ リターンを正しく変換しないことであり、これが問題になる可能性があります。メモ帳でファイルを編集している場合は、 PSPad (フリーウェア) やUltraEdit (商用)など、改行と改行を正しくサポートする別のエディターを使用し、ファイルがDOS 形式ではなくUnix 形式で保存されていることを確認してください。または、vim などを使用して Unix コマンド プロンプトで編集すると、ソース コードに余分なキャリッジ リターンがあるかどうかがすぐにわかります。

しかし、私が言ったように、このエラーは、header() 呼び出しを行おうとすると、何かが既にブラウザーに出力されていることを明示的に示しています。header() 呼び出しは、空白や html マークアップを含め、何も (おそらく他の header() 呼び出しを除いて) 前に行っていない場合にのみ有効です。

于 2012-07-01T06:55:01.327 に答える
0

<?phpタグの前のスペースと文字を削除します

于 2012-07-01T05:37:31.943 に答える