CURL ile uzak bir görüntü kaydetme?

3 Cevap php

Sabah hepsi,

Gerçekten kadarıyla anlıyorum ca gibi, soruma cevap ver ama hiçbiri bu etrafında bir kaç soru gidecekseniz. Temelde bizim sunucu üzerinde yeniden boyutlandırma ve önbelleğe ile ilgilenen bir GD komut dosyası var, ama ben bir uzak sunucuda depolanan görüntüleri ile aynı yapmanız gerekir.

Yani, daha sonra yeniden boyutlandırmak ve normal görüntülemek, yerel görüntüyü kurtarmak isteyen.

Ben bu kadar var ...

        $file_name_array = explode('/', $filename);
        $file_name_array_r = array_reverse($file_name_array);  

        $save_to = 'system/cache/remote/'.$file_name_array_r[1].'-'.$file_name_array_r[0];

        $ch = curl_init($filename);
        $fp = fopen($save_to, "wb");

        // set URL and other appropriate options
        $options = array(CURLOPT_FILE => $fp,
                         CURLOPT_HEADER => 0,
                         CURLOPT_FOLLOWLOCATION => 1,
                         CURLOPT_TIMEOUT => 60); // 1 minute timeout (should be enough)

        curl_setopt_array($ch, $options);

        curl_exec($ch);
        curl_close($ch);
        fclose($fp);

Bu görüntü dosyası oluşturur, ancak elçi kopyalamak değildir? Ben noktayı eksik?

Şerefe çocuklar.

3 Cevap

Eh, ben kriteri! Biraz daha yakın değil benim kod daha benim görüntüleri examing sonra, bazı görüntülerin yerine mayın, kendi tarafında erroring edildi çıktı. Ben çalışan bir görüntü seçildikten sonra, benim kod çok çalıştı!

Cheers her zaman olduğu gibi adamlar olsa :)

Daha basit, sen * file_put_contents kullanabilirsiniz * yerine fwrite:

$file_name_array = explode('/', $filename);
$file_name_array_r = array_reverse($file_name_array);  
$save_to = 'system/cache/remote/'.$file_name_array_r[1].'-'.$file_name_array_r[0];
file_put_contents($save_to, file_get_contents($filename));

ya da sadece 2 satır :)

$file_name_array_r = array_reverse( explode('/', $filename) );  
file_put_contents('system/cache/remote/'.$file_name_array_r[1].'-'.$file_name_array_r[0], file_get_contents($filename));

Şahsen ben bir dosyaya yazmak kıvırmak işlevleri kullanmak için sevmiyorum. Bunun yerine bu deneyin:

    $file_name_array = explode('/', $filename);
    $file_name_array_r = array_reverse($file_name_array);  

    $save_to = 'system/cache/remote/'.$file_name_array_r[1].'-'.$file_name_array_r[0];

    $ch = curl_init($filename);
    $fp = fopen($save_to, "wb");

    // set URL and other appropriate options
    $options = array(CURLOPT_HEADER => 0,
                     CURLOPT_FOLLOWLOCATION => 1,
                     CURLOPT_TIMEOUT => 60,
                     CURLOPT_RETURNTRANSFER, true //Return transfer result
                     );

    curl_setopt_array($ch, $options);
    //Get the result of the request and write it into the file
    $res=curl_exec($ch);
    curl_close($ch);
    fwrite($fp,$res);
    fclose($fp);

Ama kıvrılma olmadan daha basit bir şey kullanabilirsiniz:

$file_name_array = explode('/', $filename);
$file_name_array_r = array_reverse($file_name_array);  
$save_to = 'system/cache/remote/'.$file_name_array_r[1].'-'.$file_name_array_r[0];
$content=file_get_contents($filename); 
$fp = fopen($save_to, "wb");
fwrite($fp,$content);
fclose($fp);