php生成文件,并下载的问题。
从数据库读取数据,制作成xml文件,之后将这个文件下载,确认这个文件制作成功,但是下载后的xml没有内容。用同样的代码,下载同样这个生成的文件,就完全正确。这是为什么?
代码:
<?php
$glink;
$gresult;
function connDB(&$link)
{
$link = mysql_connect('localhost', 'ken', 'ken');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
else
{
echo $link ;
}
mysql_select_db("scp",$link);
$glink=$link;
}
function getData(&$result,&$link)
{
$result = mysql_query("select * from users ",$link);
$gresult= $result;
}
function initXML($filexmlPath,&$result)
{
$doc = domxml_new_doc("1.0");
$doc->formatOutput = true;
$users=$doc->create_element( "users" );
$doc->append_child( $users );
while($row=mysql_fetch_array($result))
{
$user = $doc->create_element( "user" );
$userID=$doc->create_element( "userID" );
$userID->append_child($doc->create_text_node( $row['uid'] ));
$user->append_child($userID);
$userName=$doc->create_element( "userName" );
$userName->append_child($doc->create_text_node( $row['name'] ));
$user->append_child($userName);
$users->append_child( $user );
}
$xml_data = $doc->dump_mem(true);
$filename = $filexmlPath;
if (is_writable($filename)) {
if (!$handle = fopen($filename, 'wb')) {
//echo "Cannot open file ($filename)";
exit;
}
// Write $xml_data to our opened file.
if (fwrite($handle, $xml_data) === FALSE) {
//echo "Cannot write to file ($filename)";
exit;
}
//echo "Success, wrote ($somecontent) to file ($filename)";
fclose($handle);
}
else {
//echo "The file $filename is not writable";
}
}
function downLoadFile($filexmlPath,$filename)
{
ob_start();
$file_path=$filexmlPath;//$file_name;
$file_size = filesize($file_path);
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: $file_size");
header("Content-Disposition: attachment; filename=".$filename);
$fp = fopen($file_path,"r");
$buffer_size = 1024;
$cur_pos = 0;
while(!feof($fp)&&$file_size-$cur_pos>$buffer_size)
{
$buffer = fread($fp,$buffer_size);
echo $buffer;
$cur_pos += $buffer_size;
}
$buffer = fread($fp,$file_size-$cur_pos);
echo $buffer;
ob_end_flush();
fclose($fp);
return true;
}
function excute()
{
//$WebRoot = $_SERVER['DOCUMENT_ROOT'];
//fopen($WebRoot."/forum/list/7/6.shtml","w");
$filexmlPath="D:/temp/user.xml";
$filexmlName="user.xml" ;
$lk;
$lr;
connDB($lk);
getData($lr,$lk);
initXML($filexmlPath,$lr);
downLoadFile($filexmlPath,$filexmlName);
}
excute();
?>
注释就不加了,就3个函数的功能,为什么呢?是设置问题?