Uzaktan Dosya İndir

3 Cevap php

Ben bir bağlantı geçilecek bir işlevi var. Bağlantı uzak görüntü etmektir. Ben sadece görüntü türünü belirlemek için URL dosyanın uzantısını kullanabilirsiniz düşündüm ama bazı URL'lerin URL uzantıları olmayacaktır. Onlar muhtemelen sadece tarayıcı başlıklarını itmek ve bu nedenle ben URL'den ayrıştırmak için bir uzantısı yok.

URL uzantısı varsa ve daha sonra dosya türünü belirlemek için başlıklarını okumak olmadığını nasıl test edebilirim?

Ben buraya şeyler zorlaştıran muyum? Bunu yapmak için kolay bir yolu var mı? Belki bunu yapmak için zaten yerleşik bir şey var Codeigniter yararlanarak yapıyorum?

All I really want to do is download an image from a URL with the correct extension.

Bu ben bugüne kadar ne var.

function get_image($image_link){

    $remoteFile = $image_link;

    $ext = ''; //some URLs might not have an extension

    $file = fopen($remoteFile, "r");


    if (!$file) {

        return false;

    }else{

        $line = '';

        while (!feof ($file)) {

            $line .= fgets ($file, 4096);

        }

        $file_name = time().$ext;

        file_put_contents($file_name,  $line);

    }

    fclose($file);

}

Herhangi bir yardım için teşekkür ederiz

3 Cevap

Sen dosya uzantısı açmak istemiyorum. Örneğin, karşı ". Jpeg" "jpg." Tüm ASCII metin dosyaları "txt." Olacak, ve sonra eğlence her zaman var. Bunun yerine, web sunucusu ile yanıt Content-Type üstbilgisi açın. (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17 bakınız).

Bazı web sunucuları da (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1 bakınız) Accept başlığı saygı duyacağız. Eğer sadece PNG resim dosyalarını istediğiniz biliyorum Yani, ardından Göndermek Accept: image/png. Sunucu saygı varsa, o zaman onun yanıtı ağ bağlantısı üzerinden tüm istenmeyen dosya göndererek çok daha küçük olacaktır. Tüm web sunucuları (hiç değilse) bu iyi yapmak Ancak, yine de Content-Type cevap başlığında açmak emin olun. Bu sadece bir bant genişliği tasarrufu şey.

Ayrıca Accept: image/* Görüntünün her türlü almak için gönderebilir.

Şerefe.

Her zaman alınan veri türünü belirlemek için Content-Type yanıt başlığını kullanmalısınız. O sizi doğru uzantısı ayarlayabilirsiniz. URL'ler uzantıları yok, ve böyle olmanın bir süre sonra bir şey güvenmemelisiniz.

Sen fsock / fread hatta file_get_contents kullanarak başlıklarını okumak mümkün olmayacaktır. Tüm arka planda gizlenmiş ve alma tamamlandığında atılır oluyor. Eğer CURL fonksiyonları kullanmak ve buradan transfer tüm ayrıntıları alabilirsiniz, bu kullanarak uygun bir HTTP GET oturumu kurmak gerekecek.