Как запросить диалоговое окно «Сохранить как» после создания документа Word с Fopen и Fwirte в PHP - PullRequest
2 голосов
/ 28 августа 2011

Я написал следующий скрипт, чтобы конечный пользователь мог создать текстовый документ из текста, введенного в текстовую область:

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

По сути, создаваемый файл - это "yourDoc.doc", а текст, записанный в файл, находится в переменной $ wordDoc.

В настоящее время этот скрипт создает документ и автоматически сохраняет его по тому же пути, по которому расположены страницы моего сервера. Я хочу использовать приведенный выше сценарий, но при этом запросить диалоговое окно «Сохранить как», чтобы конечный пользователь мог сохранить документ на своем компьютере локально.

После нескольких часов исследований я увидел, что могу использовать заголовки, но не могу заставить их работать. Я не могу найти пример, который включает заголовки, 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 Ответ

4 голосов
/ 28 августа 2011

Нет необходимости сначала записывать слово data в файл:

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

однако вы должны убедиться, что ничего не произошло, прежде чем выполнять вызовы header (). PHP НЕ будет отправлять заголовки, даже если произошел хотя бы один символ «output», и это не удастся.

...