Avatar billede heyn Nybegynder
02. juli 2010 - 16:05 Der er 7 kommentarer og
1 løsning

Hvordan downloader man et dokument?

Hej Eksperter

Mine kommende brugere ønsker mulighed for at downloade dokumenter der genereres på serveren.
På det punkt er jeg helt novice.

Brugeren skal have adgang til en submit-button "download som Excel"

Siden viser en tabel af diverse data. Med PHPExcel gereres der et Exceldokument af disse data. Dokumentet bliver placeret i mappen C:/..../htdocs/exceldoc/eksempel.xlsx

Hertil fungerer det.

Nu skal data downloades.
Den sædvanlige boks med spørgsmålet: Vil du åbne el. gemme denne fil" skal vises.
Derudover skal filen eksempel.xlsx i mappen C:/..../htdocs/exceldoc/ slettes så den ikke ligger og fylder op på serveren.

Siden med tabellen skal ikke genindlæses. Den skal fortsat vises som den hele tiden har været.

Håber nogle kal hjælpe mig.

God sommer fra Christian
Avatar billede Slettet bruger
03. juli 2010 - 05:44 #1
Så vidt jeg ved, kan du ikke fremtvinge pop-up vinduet der spørger om man vil gemme filen eller åbne den direkte i browseren, det er noget brugeren selv skal opsætte i sin browser.

Derudover syntes jeg personligt det er nemmere at udskrive den genererede kode til excel-dokumentet direkte til brugeren istedet for at gemme det i en .xlsx-fil først og derefter slette den.
Avatar billede jakobdo Ekspert
03. juli 2010 - 07:19 #2
roxki har bestemt fat i noget. Udskriv filen direkte til en "download" dialog og du skal dermed ikke tænke på at slette efter download.

Du kan finde kode til at lave en download fil on-the-fly her:
http://php.net/manual/en/function.readfile.php
og her:
http://www.php.net/manual/en/function.fpassthru.php
Avatar billede heyn Nybegynder
05. juli 2010 - 12:07 #3
Tak - Det løste en del af problemet.
Men et andet opstod.
Min side med koden hedder 'regnskab.php'
Mit dokument skal hede 'fremmoede_2010-03-01_2010-08-31.xlsx'
Når jeg kører med Firefox downloades dokumentet til den forudvalgte mappe c:\downloades. Samtidig gemmes filen på serveren og siden regnskab.php indlæses atter.
Kører jeg derimod siden i Explorer (som mine kommende brugere), kommer dialogboxen som tilbyder download af filen 'regnskab.xls'. Denne side indeholder den html-kode som regnskab.php genererer, og siden genindlæses ikke.

Min kode ser således ud:
$title = "Fremmøde mellem ".$startdate." og ".$enddate;
$exceltitle = utf8_encode($title);
$objPHPExcel = new PHPExcel();
...
En masse data placeres i objektet $objPHPExcel.
...
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$filename = "fremmoede_2010-03-01_2010-08-31.xlsx";
$objWriter->save(str_replace('.php', '.xlsx',$filename));

header("Content-type: application/vnd.ms-excel");
$Content = "Content-Disposition: attachment; filename=C:\\SERVER\\xampp\\htdocs\\kortlaeser\\".$filename;
header($content);
header("Cache-Control: must-revalidate,post-check=0,pre-check=0");
header("Pragma: public");
header("Expires: 0");

Har i et forslag til hvad der går galt i Explorer?
Hvordan sletter man med php filen 'C:\SERVER\xampp\htdocs\kortlaeser\fremmoede_2010-03-01_2010-08-31.xlsx'?

Med venlig hilsen Christian
Avatar billede heyn Nybegynder
06. juli 2010 - 11:25 #4
Nu fungerer min kode pludselig fint, regnskab.xls downloades ikke men i stedet fremmoede_2010-03-01_2010-08-31.xlsx'???
Meget mærkeligt

Men stadig -
Hvordan får jeg slettet filen fra serveren efter download?

Mvh Christian
Avatar billede jakobdo Ekspert
06. juli 2010 - 11:34 #5
unlink()
Avatar billede heyn Nybegynder
06. juli 2010 - 11:53 #6
Ja - Filen slettes - Godt nok
Men den fil der umiddelbart før downloades indeholder intet!
Mon ikke at download ikke når at blive afsluttet før unlink udføres?
Hvordan kan man forsinke unlink i f.eks. 30 sek?

Christian
Avatar billede jakobdo Ekspert
06. juli 2010 - 11:58 #7
Nej, men det er også derfor du ikke skal gemme filen i første omgang.

Du kunne jo lave:

<?php

$indhold = 'Noget data...';
$filnavn = 'Noget.txt';

// send the right headers
header("Pragma: ");
      header("Cache-Control: ");
    header("Content-type: application/octet-stream");
      header("Content-Disposition: attachment; filename=\"".$filnavn."\"");
      header("Content-length: strlen($indhold)");

fpassthru($fp);
exit;

?>
Avatar billede jakobdo Ekspert
08. juli 2010 - 11:31 #8
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester