2012-02-06 72 views
0

是否有可能下面的输出到一个XML文件保存为它目前只是显示在源?SQL数据的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"?> 
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; 

// 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> 
     <loc>' . $url .'</loc> 
     <lastmod>'. $date .'</lastmod> 
     <changefreq>daily</changefreq> 
     <priority>0.8</priority> 
     </url> 
     '; 
    } 
     echo '</urlset>'; 

我知道我可以使用的.htaccess使文件被看作是一个XML格式的,但是我想要的数据被保存到一个实际的文件。

+0

是的 - 而不是使用回声写入文件...看看[fwrite()](http://php.net/manual/en/function.fwrite.php) – ManseUK 2012-02-06 16:56:09

+0

由“保存文件”你的意思是‘将文件保存到服务器’或‘将文件保存到客户端浏览器’的目录中? – GordonM 2012-02-06 17:02:16

+0

保存到服务器上。 – JackTheJack 2012-02-06 17:05:49

回答

2

你可以试着改变每个回声追加行至一个字符串变量,例如:

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

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

然后使用文件功能之一,保存到一个文件。 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(); 
0

使用输出缓冲器

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 
1

注意:这个回答假设的“保存文件”你的意思是“在浏览器中触发另存为对话框时,有人查看页面”。

  • text/xml并不是真正正确的内容类型。你真的应该对通用的XML或适当的内容类型的XML子格式,如RSS或DOCX至少应用/ XML。
  • 如果要在客户端浏览器中触发文件下载对话框,则还需要发送一个内容处置标题,告诉浏览器您希望它下载文件并提供首选文件名。

有一些问题与您的代码,需要解决了。动@

  • 过度使用错误抑制。由于种种原因,这是一个糟糕的主意。删除@运算符并以更健壮的方式处理任何生成的错误。
  • 您的字符编码标题指定了一个字符集(拉丁-1),但是您的XML前导码指定了一个完全不同的字符集(UTF-8)。这是一场灾难。