2011-11-01 5 views
5

Bir görüntüyü doğrudan sunucumdan kaydetmem gerekiyor, birçok yöntem denedim ama hepsi düzgün çalışmıyor. file_put_contents($file_location, file_get_contents($image_url)); dosya dizininde hiçbir hata bulunamadı. Basit fopen ve fwrite bozuk görüntüyü iade etmeye devam ediyor. Bu çalıştı, ancak jpg dosyası yerine html dosyasını döndürmeye devam ediyor.Görüntüyü URL'den cURL ile kaydetme

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

Bir şey eksik?

Teşekkürler.

+0

Web sayfası indirmeye çalıştığınız bir resim dosyası olduğundan emin misiniz? Aldığınız HTML dosyası neler içeriyor? – JJJ

cevap

3

Kodunuz düzgün çalışıyor. Resmi, verilen URL’den indirir.

Sorununuz görüntünün depolandığı yolda olacaktır. Yukarıdaki kodda

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

file_put_contents yolu gibi yol vermek ./image/ ve yolu kontrol edin.

+0

Üzgünüm, kötü bir çözüm buldum, URL (resim adı) 'boşluk' karakterine sahip, bu yüzden '% 20' ile değiştirmeliyim. Cevap için teşekkürler. – Hebbian

2

Bu yöntem çalışır:

<?php 

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

?> 

Sen allow_url_fopen etkinleştirmeniz gerekir ve en basit yöntem bu. Bkz. http://php.net/manual/en/features.remote-files.php