2016-07-29 27 views
1

Aus Sicherheitsgründen habe ich die PDF-Dateien in einem Ordner namens Pdf befindet sich direkt außerhalb der public_html.Access-Datei außerhalb public_html mit codeigniter 3.X

Ich versuche, auf diese Datei von meinem Controller zuzugreifen, der im Anwendungsordner liegt. Ich versuchte mit ein paar Pfaden ..

Ein Wesen: ../../../../Pdf/{$name_hash}.pdf. Das andere Wesen: /home/xx/Pdf/{$name_hash}.pdf

Ich habe versucht, die Datei zu schließen und als js.openwindow sowie readfile($filepath) alles ohne Erfolg zu senden!

Die Dateien sind vorhanden und der Name wird auch korrekt von den Hash-Funktionen generiert, so bin ich sicher, dass es der Pfad ist, der das Problem festlegt.

Gibt es einige CI-Regeln, die ich beim Festlegen von Pfaden nicht befolge? Oder gibt es eine andere Lösung? Bitte helfen Sie!

Antwort

1

Die Sache ist, dass Sie Datei hinter public_html (oder Verzeichnis, wo virtueller Host setzt die Domäne) in Browser-URL nicht erreichen kann. Sie müssen den Inhalt der Datei abrufen und ihn durch den Puffer zur Ausgabe senden. Sie können readfile($file) PHP eingebaute Funktion für die Verwendung:

public function pdf() 
{ 
    // you would use it in your own method where $name_hash has generated value 
    $file = "/home/xx/Pdf/{$name_hash}.pdf"; 

    if (file_exists($file)) { 
     header('Content-Description: File Transfer'); 
     header('Content-Type: application/pdf'); 
     // change inline to attachment if you want to download it instead 
     header('Content-Disposition: inline; filename="'.basename($file).'"'); 
     header('Expires: 0'); 
     header('Cache-Control: must-revalidate'); 
     header('Pragma: public'); 
     header('Content-Length: ' . filesize($file)); 
     readfile($file); 
    } 
    else "Can not read the file"; 
} 

PHP docs mit example.