Autore: Fabio Di Matteo
Ultima revisione: 24/01/2012
Di seguito una semplice funzione php per scaricare file dal web.
Esempio di utilizzo
dl("https://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
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); }
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); }