====== Scaricare un file con PHP ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//24/01/2012//** \\ \\ Di seguito una semplice funzione php per scaricare file dal web. \\ **Esempio di utilizzo** dl("http://www.freemedialab.org/help/pobvnc-i386-linux.tar.gz" ,"/files/"); Si puo anche omettere il secondo parametro con la cartella di destinazione se si vuole che il download avvenga nella stessa cartella dello script. \\ **la cartella destinazione deve avere i permessi 777 ** ===== Codice ===== function dl($url, $dest=NULL) { //Inizializzo cUrl $ch = curl_init(); //Setto la url curl_setopt($ch, CURLOPT_URL, $url); //Apro in locale un file e passo a cUrl il puntatore if ($dest!=NULL) $dest=$dest."/"; $fp = fopen($dest.basename($url), 'wb'); curl_setopt($ch, CURLOPT_FILE, $fp); //Eseguo il download e chiudo la sessione cUrl curl_exec ($ch); curl_close ($ch); //Chiudo e scrivo il il file fclose($fp); } ===== Avanzamento del download ===== Possiamo anche ,tramite una callback, raccogliere lo stato dell'avanzamento del download in questo modo: function progress($download_size, $downloaded, $upload_size, $uploaded) { if ($downloaded>0) { $percent= round($downloaded*100/$download_size); }else { $percent=0; } //La percentuale di avanzamento viene scritta sul file "progress.txt", basta così leggerla file_put_contents("progress.txt", $percent); } function dl($url, $dest=NULL) { //Inizializzo cUrl $ch = curl_init(); //Setto la url curl_setopt($ch, CURLOPT_URL, $url); //Apro in locale un file e passo a cUrl il puntatore if ($dest!=NULL) $dest=$dest."/"; $fp = fopen($dest.basename($url), 'wb'); curl_setopt($ch, CURLOPT_FILE, $fp); //Per mostrare l'avanzamento grazie alla funzione "progress" curl_setopt($ch, CURLOPT_NOPROGRESS, false); curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'progress'); curl_setopt($ch, CURLOPT_BUFFERSIZE, 128); //Eseguo il download e chiudo la sessione cUrl curl_exec ($ch); curl_close ($ch); //Chiudo e scrivo il il file fclose($fp); }