Indice

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("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

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);
}