PHP – Tam URL’i Alma

17 Ocak 2020 tarihinde Emre Can ÖZTAŞ tarafından paylaşıldı.

Hazırladığınız web sayfanızda gelen URL’i kontrol edip yapılan isteğe göre; bu istekleri gerekli yerlere yönlendirmek isteyebilirsiniz. Bunun için de gelen URL’i tam olarak almanız ve ona göre işlem gerçekleştirmeniz gerekiyor.

PHP ile web sayfanıza gelen URL’i almanın bir çok yolu var. Lakin bu yazıda en doğru şekilde bir URL nasıl alınır bundan bahsetmek istedin.

Konumuza geçmeden önce kodlarımızı verelim. Kodlarımız aşağıdaki gibidir. Kodlarımızdan sonra da satır satır açıklamasını yapalım.

<?php

function the_url($server, $use_forwarded_host = false)
{
    $ssl = (!empty( $server['HTTPS'] ) && $server['HTTPS'] == 'on');
    $protocol = substr(strtolower($server['SERVER_PROTOCOL']), 0, strpos(strtolower($server['SERVER_PROTOCOL']), '/')) . (($ssl) ? 's' : '');
    $port = ((!$ssl && $server['SERVER_PORT'] == '80') || ($ssl && $server['SERVER_PORT'] == '443')) ? '' : ':' . $server['SERVER_PORT'];
    $host = ($use_forwarded_host && isset($server['HTTP_X_FORWARDED_HOST'])) ? $server['HTTP_X_FORWARDED_HOST'] : (isset($server['HTTP_HOST']) ? $server['HTTP_HOST'] : null);
    $host = isset($host) ? $host : $server['SERVER_NAME'] . $port;
    $url = $protocol . '://' . $host . $server['REQUEST_URI'];

    return ($url);
}


$url = the_url($_SERVER);

Şimdi kodlarımızı satır satır açıklayalım.

İlk olarak; the_url adında bir fonksiyon oluşturduk. Bu fonksiyon 2 parametre alıyor. Bunlardan; $server parametresi, $_SERVER değerini alacağı parametredir. Burada parametre olarak göndermek yerine doğrudan da kullanabilirdik. İkinci parametremiz olan; $use_forwarded_host değişkenine false dedik. Bu değişkeni kullanmamızın amacı; Proxy kullanıyorsanız, Proxy sunucuda yapılan işlemlere ve işleyişe göre hareket etmek içindir. Biz kullanmayacağımız için false değerini öntanımlı olarak atadık.

$ssl = (!empty( $server['HTTPS'] ) && $server['HTTPS'] == 'on');

Satırı, anlaşılacağı üzere; SSL kullanımını tespit etmek içindir.

$protocol = substr(strtolower($server['SERVER_PROTOCOL']), 0, strpos(strtolower($server['SERVER_PROTOCOL']), '/')) . (($ssl) ? 's' : '');

Satırı ise; sistemde tanımlı yani kullanılan protokolü tespit etmektedir.

$port = ((!$ssl && $server['SERVER_PORT'] == '80') || ($ssl && $server['SERVER_PORT'] == '443')) ? '' : ':' . $server['SERVER_PORT'];

Satırı, port numarasını tespit etmektedir. Web sayfaları genellikle; 80 no’lu portu kullanmaktadır.

$host = ($use_forwarded_host && isset($server['HTTP_X_FORWARDED_HOST'])) ? $server['HTTP_X_FORWARDED_HOST'] : (isset($server['HTTP_HOST']) ? $server['HTTP_HOST'] : null);
$host = isset($host) ? $host : $server['SERVER_NAME'] . $port;

Satırları, host yani web sayfasının alan adını vermektedir.

$url = $protocol . '://' . $host . $server['REQUEST_URI'];

Satırı da yaptığımız tüm işlemleri birleştirip, sonuna query yani yapılan istek parametrelerini de ekleyerek ortaya tam URL’i çıkartmaktadır.

Fonksiyonumuz $url değişkenini verir. Verilen bu $url değişkeni de bizim tam URL adresi olmaktadır. İşte bu sayede tam URL değerini almış olduk.

Elimizdeki bu tam URL değişkenini çeşitli şekillerde kullanabilirsiniz. URL değerini parçalamak için de parse_url() fonksiyonunu kullanabilirsiniz.

parse_url($url);

Yukarıdaki satırımız bir dizi yapısında olup var_dump() fonksiyonu ile baktığımızda;

- scheme
- host
- path
- query

elemanlarını içermektedir.

Kategoriler: [PHP] Etiketler: #port #protocol #ssl #url

Önceki Yazı

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

*
*

This site uses Akismet to reduce spam. Learn how your comment data is processed.