Я пытаюсь создать код, который на основе информации из BD создает архив bibtex. Вот что я получил:
<?php
include("classe/conexao.php");
session_start();
$_SESSION[id_tese_especifica] = $_GET['id'];
$result = pg_query("SELECT titulo, id, data, autor_nome FROM teses ORDER BY data DESC");
$arr = pg_fetch_array($result);
echo "@phdthesis{phpthesis,
author={" . $arr[0] . "},
title={" . $arr[6] . " " . $arr[3] . "},
month={" . $arr[2] . "}";
$name = $_GET['id'] . ".bib";
$file = fopen($name, 'a');
$text = "test (it doesn't appears on archive and I don't know why, so I used the echo above and worked, but this is what should be on archive, or isn't?)";
fwrite($file, $text);
readfile($file);
fclose($fp);
header('Content-Disposition: attachment; filename="' . $file . '"');
header('Expires: 0');
?>
После этого он скачивает архив с именем «Resource id # 6», почему? Название должно быть основано на этом: $name = $_GET['id'] . ".bib"
,
Спасибо!
Поскольку имя файла хранится в $name
переменная в вашем коде:
header('Content-Disposition: attachment; filename="' . $name . '"');
А также $file
Переменная — это ресурс, связанный с открытым файлом.
И, кстати, вы не закрыли файл должным образом.
fclose($fp); // $fp is NOT defined, your pointer is in $file variable
Правильный код для закрытия:
fclose($file);
следующий, переставь свой код
Прежде всего — заголовки должны быть отправлены ДО любой вывод.
В настоящее время у вас есть смесь ошибок, которые случайно показывают вам то, что вы хотите.
Правильный код должен быть:
$name = $_GET['id'] . ".bib";
// first of all - set proper headers:
header('Content-Disposition: attachment; filename="' . $name . '"');
header('Expires: 0');
// next - do a query
$result = pg_query("SELECT titulo, id, data, autor_nome FROM teses ORDER BY data DESC");
$arr = pg_fetch_array($result);
// use echo for testing purposes only
// cause echo considered as a content of your file
echo "@phdthesis{phpthesis,
author={" . $arr[0] . "},
title={" . $arr[6] . " " . $arr[3] . "},
month={" . $arr[2] . "}";
$fp = fopen($name, 'a');
$text = "test (it doesn't appears on archive and I don't know why, so I used the echo above and worked, but this is what should be on archive, or isn't?)";
fwrite($fp, $text);
fclose($fp); // don't forget to close file for saving newly added data
readfile($name); // readfile takes a filename, not a handler.
die(); // end your script cause in other case all other data will be outputted too
Других решений пока нет …