2016-10-17 7 views
-1
$file="csv.php?task=whovotedwho&election=7"; 
$filename = "whovotedwho-election7.csv"; 

if (file_exists("trash.png")) { 
     header('Content-Description: File Transfer'); 
     header('Content-Type: text/csv'); 
     header('Content-Disposition: attachment; filename="'.($filename).'"'); 
     header('Expires: 0'); 
     header('Cache-Control: must-revalidate'); 
     header('Pragma: public'); 
     header('Content-Length: ' . filesize("trash.png")); 
     readfile($file); 
     exit; 
    } else { echo "file does not exist"; } 

Ich bekomme dieses Ergebnis in der CSV, die heruntergeladen wird.Warum wird & in & amp umgewandelt?

double amp in code

+0

es sieht so aus, als ob Sie mehrere Erweiterungen (wie x-debug) installiert haben, eine davon hat einen Bug und führt doppelte HTML-Kodierung durch –

+0

Gibt es eine 'readfile'-Entsprechung für PHP-Dateien? – desbest

+0

Sie laden die CSV-Datei nicht herunter. Schauen Sie, was Sie bekommen haben, es ist eine Fehlermeldung, die besagt, dass 'readfile()' fehlgeschlagen ist. – Barmar

Antwort

4

Diese:

$file="csv.php?task=whovotedwho&election=7"; 

Es ist kein voll/absolute URL wie http://example.com/csv.php..., also wenn ReadFile-() anspringt, wird es eine Anfrage LOCAL Datei zu tun, und auf der Suche nach einer Datei wörtlich csv.php?tasketc... Es ist NICHT eine http-Anfrage - es kann nicht tun. Sie haben kein Protokoll oder einen Host für diese HTTP-Anforderung bereitgestellt, um an TO gesendet zu werden.

PHP ist nicht wie Ihr Browser, wo etwas wie <img src=kittens.jpg> intern in <img src="http://example.com/kittens.jpg"> übersetzt wird.

Und offen gesagt, selbst wenn Sie eine vollständige URL dort hatten, ist es SEHR schmerzhaft, dies zu tun - Sie führen bereits Code auf dem genau gleichen Server, den Sie die HTTP-Anfrage so tun würden, so ist es wie Hopping in Ihrem Auto und fahren 500 Meilen um die Stadt, nur damit Sie 1 Fuß links von wo Sie angefangen haben, parken konnten.

Und was Sie in Ihren Fehlern sehen, ist das rohe HTML. Da Ihr Dateiname & enthält, muss er HTML-codiert werden, sodass er in der Ausgabe als Literal & erscheint und nicht als HTML-Entity RENDERED wird.