SQLデータからXMLファイルへ

下の出力をソースに現在表示されているXMLファイルに保存することは可能ですか?

$host = "localhost";//host name
$user = "#";//database user name
$pass = "#";//database password
$database = "#";//database name
// connecting to database
$connect = @mysql_connect($host,$user,$pass)or die (@mysql_error());
// selecting database
@mysql_select_db($database,$connect) or die (@mysql_error());

// default header(don't delete)
header("Content-Type: text/xml;charset=iso-8859-1");
    echo '<?xml version="1.0" encoding="UTF-8"?>
    ';

// mytable = your content table name
$query = @mysql_query("SELECT * FROM urls");
while($row = @mysql_fetch_array($query)){
// [url] = content url
$url = $row['url'];
// [time] = content date
$date = date("Y-m-d", $row['time']);

//NO CHANGES BELOW
        echo
        '
         ' . $url .'
         '. $date .'
         daily
         0.8
         
        ';
    }
        echo '';

.htaccessを使ってファイルをXML形式と見なすことができますが、データを実際のファイルに保存したいと思っています。

0
「ファイルを保存する」とは、「ファイルをサーバー上のディレクトリに保存する」または「クライアントのブラウザにファイルを保存する」という意味ですか?
追加された 著者 GordonM,
はい - エコーをファイルに書き込む代わりに、 fwrite( )
追加された 著者 ManseUK,
サーバーに保存します。
追加された 著者 JackTheJack,

4 答え

各エコーを変更して、行を文字列変数に追加することもできます。たとえば、次のようにします。

// Instead of
echo '<?xml version="1.0"?>';
echo '';
// etc.

$xml = '<?xml version="1.0"?>';
$xml .= '';
// and so on

次に、ファイル関数の1つを使用してファイルに保存します。 file_put_contents は簡単な方法です。

file_put_contents("/path/to/file.xml", $xml);

もっと頑強な解決策を望むなら、 DOM モジュールを使ってXML構造を構築することができます:

$document = new DOMDocument("1.0");

$root = $document->createElement("urlset");
$root->setAttribute("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");
$document->appendChild($root);

while ($row = mysql_query($query)) {
    $item = $document->createElement("url");
    $root->append($item);
   //etc.
}

echo $document->saveXML();
2
追加された

NOTE: This answer assumes that by "save file" you mean "trigger the Save As dialog in the browser when someone views the page".

  • text/xmlは実際には正しいcontent-typeではありません。実際には、汎用XMLの場合はapplication/xml、RSSやdocxなどのXMLサブフォーマットの場合は適切なコンテンツタイプが必要です。
  • クライアントブラウザでファイルダウンロードダイアログを起動する場合は、ファイルをダウンロードして優先ファイル名を指定するようブラウザに指示する内容処理ヘッダーも送信する必要があります。

あなたのコードには、アドレッシングも必要ないくつかの問題があります。

  • エラー抑制のために@を酷使します。これは、多種多様な理由のために悪い考えです。 @演算子を削除し、生成されたエラーをより堅牢な方法で処理します。
  • 文字エンコードの見出しには1文字セット(latin-1)が指定されていますが、XMLプリアンブルは完全に異なるもの(UTF-8)を指定しています。それは災害のレシピです。
1
追加された

出力バッファを使用する

ob_start();

... do everything you actually did before ...

$content = ob_get_contents();
ob_end_clean();

//Write to a file
file_put_contents('filename.xml', $content);

そして、それはすべて...

0
追加された

fwrite を使用すると、それは簡単です:

$f = fopen('data.xml', 'w');  //open a file for writing 
fwrite($f, $myxmltext);      //write some things to it
fclose($f);                  //close it when finished   
0
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com