2011-11-01 16 views
5

Ho bisogno di salvare un'immagine dall'URL direttamente sul mio server, ho provato molti metodi ma tutto sembra non funzionare correttamente. file_put_contents($file_location, file_get_contents($image_url)); continua a non ricevere nessun errore trovato nella directory dei file. Simple fopen e fwrite continua a restituire un'immagine corrotta. Questo ha funzionato, ma continua a restituire file html invece di file jpg.Salva immagine dall'URL con cURL

function getimg($url) {   
    $headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg';    
    $headers[] = 'Connection: Keep-Alive';   
    $headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';   
    $user_agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)';   
    $process = curl_init($url);   
    curl_setopt($process, CURLOPT_HTTPHEADER, $headers);   
    curl_setopt($process, CURLOPT_HEADER, 0);   
    curl_setopt($process, CURLOPT_USERAGENT, $user_agent);   
    curl_setopt($process, CURLOPT_TIMEOUT, 30);   
    curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);   
    curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);   
    $return = curl_exec($process);   
    curl_close($process);   
    return $return;  
} 

$imgurl = 'http://some/url/to/image.jpg'; 
$imagename= basename($imgurl); 
if(file_exists('./image/'.$imagename)){continue;} 
$image = getimg($imgurl); 
file_put_contents('image/'.$imagename,$image); 

Manca qualcosa?

Grazie.

+0

Sei sicuro che sia un file di immagine che stai cercando di scaricare e non una pagina web? Cosa contiene il file HTML che ricevi? – JJJ

risposta

3

Il codice funziona correttamente. Scarica l'immagine dall'URL specificato.

Il problema si trova nel percorso in cui è memorizzata l'immagine.

if(file_exists('./image/'.$imagename)){continue;} 
$image = getimg($imgurl); 
file_put_contents('image/'.$imagename,$image); 

Nel codice precedente controllare il percorso ./image/ e indica il percorso come nel percorso file_put_contents.

+0

Scusate il mio male, ho trovato la soluzione, l'URL (nome dell'immagine) ha carattere 'spazio', quindi devo sostituirli con '% 20'. Grazie per la risposta. – Hebbian

2

Questo metodo funziona:

<?php 

file_put_contents("/var/www/test/test.png", file_get_contents("http://www.google.com/intl/en_com/images/srpr/logo3w.png")); 

?> 

È necessario abilitare i allow_url_fopen ed è il metodo più semplice. Vedi http://php.net/manual/en/features.remote-files.php