PHP fornisce il supporto per la libreria libcurl che mette a disposizione delle pratiche funzionalità concepite per effettuare connessioni con varie tipologie di server, comunicare con essi e manipolare le risorse accessibili da remoto; tali procedure potranno essere effettuate attraverso differenti protocolli tra cui anche HTTP, HTTPS e FTP, in presenza o meno di certificati e procedure per l'autenticazione.
Un'applicazione pratica delle librerie cURL di PHP potrebbe essere per esempio quella che prevede il salvataggio in locale di un'immagine remota; questa operazione potrà essere portata a termine con successo grazie ad una semplica funzione come la seguente:
/* la funzione accetta come parametri # l'immagine da salvare (collegamento assoluto) ## il percorso scelto per il salvataggio */ function salvataggio_immagine($immagine,$percorso){ # inizializzazione della sessione cURL $sessione_curl = curl_init($immagine); # opzioni per il trasferimento della risorsa curl_setopt($sessione_curl, CURLOPT_HEADER, 0); curl_setopt($sessione_curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($sessione_curl, CURLOPT_BINARYTRANSFER,1); # esecuzione e chiusura della sessione cURL $dati_immagine = curl_exec($sessione_curl); curl_close ($sessione_curl); # controllo sulla preesistenza del file if(file_exists($percorso)){ # cancellazione in caso di file preesistente unlink($percorso); } # apertura di un collegamento alla risorsa # salvataggio del file e chiusura del collegamento $link_risorsa = fopen($percorso,'x'); fwrite($link_risorsa, $dati_immagine); fclose($link_risorsa); }
La funzione presentata potrà essere utilizzata passando ad essa i parametri richiesti al momento della chiamata:
/* utilizzo della funzione */ # definizione dei parametri $immagine = "http://sito.it/images/logo.png"; $percorso = "img/salvataggio.png"; # chiamata alla funzione salvataggio_immagine($immagine,$percorso);
Il codice proposto potrebbe risultare particolarmente utile nel caso in cui si lavori con risorse remote che non sono accessibili direttamente per via della disattivazione della direttiva allow_url_fopen nel PHP.ini.