如何在PHP中使用Fopen和Fwrite创建Word文档时提示另存为对话框

时间:2011-08-28 04:18:23

标签: php header fopen fwrite savefiledialog

我编写了以下脚本,以便最终用户可以从输入到textarea中的文本创建word文档:

$fp = fopen("yourDoc.doc", 'w+');
fwrite($fp, $wordDoc);
fclose($fp);

基本上,正在创建的文件是“yourDoc.doc”,写入文件的文本位于$ wordDoc变量中。

目前,此脚本会创建文档并自动将其保存到我的服务器页面所在的同一路径中。我想要做的是使用上面的脚本,但提示“另存为”对话框,以便最终用户可以在本地将文档保存到他们的计算机。

经过几个小时的研究,我发现我可以使用标题,但是我无法使它们正常工作。我似乎无法找到一个包含headers,fopen和fwrite的示例。例如,我尝试了以下脚本的许多变体而没有运气:

$fp = fopen("yourDoc.doc", 'w+');
fwrite($fp, $wordDoc);
fclose($fp);
header('Content-type: application/ms-word');
header('Content-disposition: attachment; filename="yourDoc.doc"');
readfile("yourDoc.doc");

我也尝试了以下(这是我的整个php页面):

<?php
//Connect to Db//
$con = mysql_connect("localhost", "root", "admin");
//Verify connection//
if (!$con)
{
  die('Could not connect: ' . mysql_error());
}
//Select Db//
mysql_select_db("schooldb", $con);
$wordDoc = $_GET['word'];//text for word doc//
header('Content-type: application/ms-word');
header('Content-disposition: attachement; filename="yourDoc.doc"');
$fp = fopen("yourDocument.doc", 'w+');//word doc created//
fwrite($fp, $wordDoc);//text written to word doc//
fpassthru($fp);
fclose($fp);
mysql_close($con);  
?>

有人看到这个有问题吗?该文件最终在我的服务器上,我没有得到另存为对话框。

我真的需要帮助。

谢谢,

1 个答案:

答案 0 :(得分:4)

首先不需要将数据写入文件:

header('Content-type: application/ms-word');
header('Content-disposition: attachment; filename="yourDoc.doc"');
echo $wordDoc;

但是,在进行header()调用之前,必须确保没有输出任何输出。即使发生了“输出”的单个字符,PHP也不会发送标题,这将失败。