2016-02-24 3 views
1

Я пытаюсь создать код, который, основываясь на информации от BD, создает архив bibtex. Вот что я получил:создать архив bibtex с PHP

<?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'); 

?> 

После этого он загружает архив с именем «Идентификатор ресурса №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 
+0

Понял! Работал как шарм! А о переменной $ text? Почему у него нет результата в архиве и «эхо» @phdthesis {php ....... 'делает? –

+1

См. Мое ** обновление **. –

+0

Вы только что спасли меня. Большое вам спасибо. знать, что вы объяснили. Спасибо, человек :) –

Смежные вопросы