2016-08-11 2 views
2

Ich habe ein Problem. Ich habe eine Webseite mit Upload-Dateien erstellt, ich habe eine Datenbank (MySQL) mit korrekter URL zu Datei (Dateipfad) (in der Datenbank ist nur die URL zur Datei, die Datei ist im Ordner auf dem Server). Und jetzt versuche ich PHP-Script zu schreiben/suchen, um diese Datei herunterzuladen, was hochgeladen wurde. Alles im Web funktioniert gut, aber diese Download-Skripte funktionieren nicht. Ich lese und ich denke, der beste Weg für mich wird mit 'Header' herunterladen, aber ich habe versucht und nichts. Die Datei wird auf unseren Datenträger heruntergeladen, der Name ist korrekt, die Dateierweiterung ist ok, die Datei ist im korrekten Programm geöffnet, aber wenn die Datei im Namen Zeichen (';', ':' usw.) hat, wird diese Datei ohne diese Zeichen heruntergeladen und ist falsch (Mangel an Erweiterung, schlechter Name). Und zweites Problem: Alle heruntergeladenen Dateien sind leer (0 b Größe), alles ist in Ordnung, aber sie sind leer, einige Tipps? Vielen Dank im Voraus für die HilfePHP- Force Download-Datei von URL

Mein schlechtes Download-Codes:

<?php 
    $data=date('Y-m-d_H:i:s'); 
    $nazwa=$_POST['downtitle']; 
    $urlek=$_POST['downurl']; 
    $extrozsz=$_POST['downext']; 
    $filePath = $urlek; 
    $fileName = $nazwa.$data.".".$extrozsz; 

    //------------------------------------------------------------------------ 

// $fd = fopen($filePath,"r"); 
// $size = filesize($filePath); 
// $contents = fread($fd, filesize($filePath)); 

// fclose($fd); 

// header("Content-Type: application/octet-stream"); 
// header("Content-Length: $size;"); 
// header("Content-Disposition: attachment; filename=$fileName"); 

// echo $contents; 

    //---------------------------------------------------------------------- 


//  set_time_limit(0);  
//  while($urlek = $response->fetch()) 
//  { 
//  $my_pliki = file_get_contents("$urlek"); 
//  $my_file = fopen("$urlek","w+"); 
//  fwrite($my_file,$my_pliki); 
//  fclose($my_file); 
//  } 

//---------------------------------------------------------------------------- 

$quoted = $filePath; 
$size = filesize($file); 

header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename=' . $quoted); 
header('Content-Transfer-Encoding: binary'); 
header('Connection: Keep-Alive'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
header('Content-Length: ' . $size); 

>

Antwort

0

Der Dateiname Parameter hat einige Grenzen, die also in RFC6266

gut beschrieben werden, wenn Sie Zeichen verwenden möchten, sind nicht im Zeichensatz ISO-8859-1 enthalten, dann müssen Sie entweder filename* Header verwenden oder Sie müssen diese Zeichen aus dem Dateinamen entfernen/entfernen. Nizza Lösung so zu tun here

0

Dank zu finden, ich meine php auf diese bearbeitet:

<?php 
    $data=date('Y-m-d_H:i:s'); 
    $nazwa=$_POST['downtitle']; 
    $urlek=$_POST['downurl']; 
    $extrozsz=$_POST['downext']; 
    $filePath = $urlek; 
    $fileName = $nazwa.$data.".".$extrozsz; 

     header("Pragma: public"); 
     header("Expires: 0"); 
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header("Content-Type: application/force-download"); 
     header("Content-Disposition: attachment; filename=\"" . $fileName."\""); 
     header("Content-Description: File Transfer"); 
     readfile($filePath); 

?> 

Und das alles ist jetzt in Ordnung, aber ich habe eine Frage jetzt: In MySQL-Datenbank Ich habe Titel, Beschreibung , Datum hinzugefügt, Premiere Datum und ich möchte Suchfeld haben. Ich habe es in Eingangstyp = "Suche" gemacht, aber welche Skript jetzt für die Suche in diesen angegebenen Tabellen in der Datenbank verwenden, zuerst öffnen Sie die Datenbank, die ich weiß, aber was später welcher Befehl für die Suche in der Datenbank ist? Ich weiß von "wie", aber besser? Und schließlich das korrekte Ergebnis zurückgeben und alle aus der Datenbank zeigen, wo dieses Suchwort in Ordnung ist. Einige Tipps? Entschuldigung für schwaches Englisch und danke.

+0

Ist dies eine Antwort auf Ihre eigene Frage oder eine Bearbeitung der ursprünglichen Frage? Sie scheinen Ihre Frage mit einer anderen Frage zu beantworten. Schlechte Übung. Es ist am besten, wenn Sie eine neue Frage zu fragen: 'Ich habe eine Frage ...' – Martin

+0

Zustimmen. Sie haben jetzt 3 Fragen unter einer Überschrift, so dass jemand, der fähig und willens ist, niemals die letzten Fragen sehen wird. Sie können auch Vorschläge erhalten, während Sie Ihre Frage stellen –

0

Ok alles ist jetzt in Ordnung, aber ein anderes Problem. Ich habe Code, um Nachrichten auf der Website zu zeigen. Alle Nachrichten werden gleichzeitig angezeigt (zu lange Seite). Ich möchte unten die Website-Nummern haben (auf allen Websites unter denen dies für die Weiterleitung auf der zweiten Unterseite mit älteren Nachrichten). Aber wie? Sup oder Unter ist für kleines Wort, Zahlen usw., aber all abgerufenen Form Datenbank:

$zapytanie='SELECT * FROM filetable WHERE Section="Other" ORDER BY ID DESC LIMIT 10'; 

Dies ist in Abfrage meiner PHP-Code für die neuesten 10 Nachrichten zeigen, aber wenn ich hinzufügen, normalerweise kleine Zahlen im Grunde wie konstruieren Code um die nächsten 10 Nachrichten zu zeigen (nein wo id = "10-11", denn wenn ich tausend Neuigkeiten oder mehr haben werde, ist es zu primitiv) Ich muss einen automatischen Code haben um Seiten mit 10 oder 20 Nachrichten zu zeigen.

+0

'LIMIT' kann zwei Argumente, die ** Offset ** und die ** Rückkehr zählen **, so können Sie tun, LIMIT , ' so 'LIMIT 20 , 10 'gibt 10 Datensätze beginnend mit dem 21. Datensatz (21-> 30) zurück. [MySQL-Handbuch] (https://dev.mysql.com/doc/refman/5.5/en/select.html) – Martin