postgresql — создайте архив bibtex с переполнением стека

Я пытаюсь создать код, который на основе информации из 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",

Спасибо!

1

Решение

Поскольку имя файла хранится в $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
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector