ugrás a tartalomhoz

fájl letöltés PHP-vel

Blackfriar · 2009. Ápr. 2. (Cs), 13.19
Sziasztok !
Azt szeretném megoldani PHP-ben, hogy ha a user egy linkre kattint, akkor le tudjon tölteni egy fájlt.
Utánaolvastam a dolognak neten és a PHP manual-ban (meg az ott levő hozzászólásokban) és megint csak a teljes káosz fogadott :-), mindenki másra esküszik.
Mint szakértők, mit javasoltok, mi legyen a headerben?
Aztán readfile-t használjak vagy fopen-fread-fclose-t?

Előre is köszönöm a segítségeteket.
 
1

talán ez is lényeges

Blackfriar · 2009. Ápr. 2. (Cs), 13.22
Ja, és egy xml fájlról lenne szó. Meglehet, ez sem mellékes (Content-Type: application/itt mi legyen?)
2

fpassthru

Poetro · 2009. Ápr. 2. (Cs), 13.35
$filename = 'secret.xml';
if (is_readable($filename) && $handle = fopen($filename, 'rb')) {
  header('Content-type: application/xml');
  header("Pragma: public");
  header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  header('Content-Length: '. filesize($filename));
  header('Content-Disposition: inline; filename="application.xml"');
  fpassthru($handle);
  fclose($handle);
}
3

köszönet

Blackfriar · 2009. Ápr. 2. (Cs), 14.18
Nagyon köszönöm, kipróbálom.
4

valami gond van

Blackfriar · 2009. Ápr. 2. (Cs), 18.12
Mind az 5 header sorra ugyanazt a hibaüzenetet kapom:

Warning: Cannot modify header information - headers already sent by (output started at /home/akarmi/web/valami/download.php:1) in /home/akarmi/web/valami/download.php
plusz a fájl tartalmát is kiírja (letöltésről pedig szó sincs)

Mi lehet a gond?
5

olvasok

Blackfriar · 2009. Ápr. 2. (Cs), 19.13
Közben olvasgatok és látom, a header előtt jobb, ha nincs semmi. Nos én már kiirtottam mindent, de akkor is marad a hibaüzenet.
6

BOM, újsor

Poetro · 2009. Ápr. 2. (Cs), 19.26
Ha a fájlok UTF-8 kódolásúak, akkor ne tartalmazzák a BOM-om, valamint már jóideje ajánlás szerint nem kell ?> a fájl végére ha csak PHP kódot tartalmaz, nehogy esetleg a záró tag utáni újsor megtréfáljon.
7

köszi

Blackfriar · 2009. Ápr. 2. (Cs), 20.04
A BOM volt a ludas.

Végül álljon itt a működő kód (egy kicsit belepiszkítottam Poetro):
<?php

$filename = "akarmi.xml";
header("Content-Type: application/xml");
header("Pragma: public");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length: ". filesize($filename));
header('Content-Disposition: attachment; filename='.$filename);
$handle = fopen($filename, 'rb');
fpassthru($handle);
fclose($handle);

?>
Mégegyszer köszönet a segítségért !!!