cURL istemci taraflı ücretsiz bir URL transfer kütüphanesidir ve PHP’de de sık kullanılmaktadır, file_get_contents() ve readfile()’a göre bir miktar farklı ve birçok açıdan çok daha avantajlıdır.
cURL ile PHP’da bir URL’in transfer edilmesini söylediğinizde cURL eğer aksi belirtilmemişse ve belirtilen URL başla bir adrese yönleniyor olsa bile ilk belirtilen URL’in içeriğini alır.
cURL’in eğer yönlendirmeyi takip etmesini istiyorsanız curl_setopt içerisinde CURLOPT_FOLLOWLOCATION
kullanmalısınız ve eğer en son yönlendirildiği adresi almak isterseniz curl_getinfo
içerisinde CURLINFO_EFFECTIVE_URL
kullanırsınız.
Aşağıdaki yazdığım örnek fonksiyon size cURL ile transfer etmeyi denediğinin URL’in son lokasyonunu verir.
function cURL_final($url){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch,CURLOPT_HEADER,false);
$response = curl_exec($ch);
$target = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
curl_close($ch);
if ($target)
return $target;
return false;
}
CURLOPT_NOBODY transfer edilen URL’in içerik çıktısınız vermez, CURLOPT_FOLLOWLOCATION URL’in yönlendirilmesini takip eder(bir limiti var), CURLOPT_AUTOREFERER ilk istenen URL’den sonraki yönlendirilmelerde ilk URL’i referer olarak kullanır, CURLOPT_HEADER URL’in header çıktısını vermez.
Kullanımı da şu şekilde olabilir:
$sonuc = cURL_final('https://source.unsplash.com/collection/3697116/1920x1080')';
Yukarıdaki kullanmada alacağınız sonuç şuna benzeyecek: https://images.unsplash.com/photo-1474403078171-7f199e9d1335?h=1080&w=1920
Kaynaklar:
- wikipedia.org/wiki/CURL
- curl.se
- www.php.net/manual/tr/book.curl.php
- www.php.net/manual/tr/function.curl-setopt.php
- www.php.net/manual/tr/function.curl-getinfo.php
- Ayrıca cURL hakkında yazılmış harika bir kitap var ve ilgiliyseniz mutlaka göz gezdirmelisiniz: https://everything.curl.dev
Stackoverflow da bunları bulmak zor olabilir bu yüzden bloguma kaydediyorum 🙂 Kolay gelsin.