Aiuta a capire questo file di download del codice PHP

Voglio scaricare un file doc situato all'indirizzo http://confluence.rogersdigitalmedia.com/exportword?pageId=1114407 . Come posso modificare il seguente codice per scaricare un file da quell'URL ??

E qualcuno può spiegare cosa fa questo codice nel suo stato attuale, cosa scarica, un file da una directory?

<?php // place this code inside a php file and call it fe "download.php" $path = $_SERVER['DOCUMENT_ROOT']."/path2file/"; // change the path to fit your websites document structure $fullPath = $path.$_GET['download_file']; if ($fd = fopen ($fullPath, "r")) { $fsize = filesize($fullPath); $path_parts = pathinfo($fullPath); $ext = strtolower($path_parts["extension"]); switch ($ext) { case "pdf": header("Content-type: application/pdf"); // add here more headers for diff. extensions header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachment' to force a download break; default; header("Content-type: application/octet-stream"); header("Content-Disposition: filename=\"".$path_parts["basename"]."\""); } header("Content-length: $fsize"); header("Cache-control: private"); //use this to open files directly while(!feof($fd)) { $buffer = fread($fd, 2048); echo $buffer; } } fclose ($fd); exit; // example: place this kind of link into the document where the file download is offered: // <a href="download.php?download_file=some_file.pdf">Download here</a> ?> 

Questo codice dovrebbe scaricare file tramite PHP. Solitamente, è usato per hide la directory che contiene i download o per scaricare file che altrimenti sarebbero inaccessibili perché i file si trovano all'esterno della web root. Un altro uso di tale script è quello di offrire download per utenti autorizzati, dovresti inserire un controllo di authentication nello script.

Se il file ha un'estensione PDF, il download è offerto come con il mimetype PDF, in modo che i browser possano aprirlo in un visualizzatore PDF. Altri file sono offerti come file binari che possono essere salvati.

Non usare questo script "così com'è". Contiene un'enorme vulnerabilità di sicurezza che consente a un utente malintenzionato di visualizzare file arbitrari sul sistema ( Path traversal ). Sostituisci linea:

 $fullPath = $path.$_GET['download_file']; 

con il seguente per renderlo un po 'più sicuro:

 $fullPath = $path . basename($_GET['download_file']); 

Ancora meglio: implementa la whitelist consentendo nomi di file all'interno di un set di caratteri consentito e rifiutando altri nomi di file non validi.


Scaricare un file esterno è facile come seguire l' esempio di cURL :

 <?php $ch = curl_init("http://www.example.com/"); $fp = fopen("example_homepage.txt", "w"); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); fclose($fp); ?> 

Dato che non ho idea dell'URL del download, lascerò gli URL e i nomi di file originali dell'esempio PHP.

Questo codice è qualcosa che hai messo sul tuo server per permettere alle persone di scaricare file tramite PHP. Di solito dovresti aggiungere del codice di authentication, in modo che PHP possa accettare / rifiutare l'utente prima di scaricarlo.