İçeriğe geç

Menü

Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

PHP 8.5 URI Extension Nasıl Kullanılır? URL İşleme Örneği

php-8-5-uri-extension-nasil-kullanilir-url-isleme-ornegi
Bu yazıda neler var?
  1. PHP 8.5 URI Extension nasıl kullanılır?
  2. URI, URL ve bileşenleri nasıl ayırt edilir?
  3. Şema, ana makine ve yolu okuyan PHP örneği
  4. Yeni özelliği kullanmadan önce PHP ortamını nasıl kontrol edersin?
  5. Küçük projeye ekleme kararını nasıl verirsin?
  6. Sık Sorulan Sorular

PHP 8.5 URI Extension nasıl kullanılır sorusunun kısa cevabı şudur: önce URI’yi hangi standarda göre işleyeceğini seçer, ardından ilgili sınıftan bir nesne oluşturup bileşen okuyucularını kullanırsın. PHP 8.5 ile gelen bu API, URI ve URL’leri RFC 3986 ile WHATWG URL kurallarına göre ayrıştırma ve değiştirme amacı taşır.

Doğru başlangıç, doğrudan kod yazmak değil, URI ile URL arasındaki ilişkiyi ve şema, ana makine, yol, sorgu ve parça bölümlerinin görevini ayırmaktır. Böylece kullanacağın sınıfı, okuyacağın bileşeni ve PHP ortamının uygunluğunu daha bilinçli değerlendirebilirsin.

PHP 8.5 URI Extension nasıl kullanılır?

PHP 8.5 ile gelen URI Extension, URI’leri ve URL’leri seçilen standardın sözdizimine göre ayrıştırma, doğrulama, bileşenlerini değiştirme, yeniden oluşturma ve referans çözümleme işlemleri için tasarlanmıştır. PHP 8.5 resmi duyurusu, özelliği RFC 3986 ve WHATWG URL standartlarına göre çalışan yerleşik bir API olarak özetler.

RFC’nin uygulanmış tasarımında iki ayrı sınıf bulunur: UriRfc3986Uri ve UriWhatWgUrl. UriRfc3986Uri, RFC 3986’nin genel URI sözdizimini temsil eder ve göreli URI başvurularıyla çalışabilir. UriWhatWgUrl ise WHATWG URL kurallarını izleyen, şeması bulunan URL’ler için tasarlanmıştır. Bu ayrım, iki standardın farklı ayrıştırma ve normalleştirme davranışlarını tek bir ortak sınıf altında gizlememek için kullanılır. Resmî duyuru ile RFC bu noktada uyumludur: duyuru genel kapsamı verir, RFC ise standarda göre sınıf ve API adlarını açıklar.

Temel kullanım sırası üç adıma indirilebilir: girdi için standardı seçmek, URI metnini ilgili sınıfa vermek ve getScheme(), getHost(), getPath(), getQuery() veya getFragment() gibi yöntemlerle gereken parçayı okumak. Bileşen değiştirmek istediğinde withScheme() ve withHost() gibi ilgili yöntemlerden yararlanabilirsin. Kritik karar, her URL için aynı sınıfı ezbere seçmek değil, uygulamanın beklediği URI davranışını baştan netleştirmektir.

URI, URL ve bileşenleri nasıl ayırt edilir?

URI, URL ve bileşenleri nasıl ayırt edilir?

URI, fiziksel veya soyut bir kaynağı tanımlayan genel gösterimdir. RFC 3986 bağlamında URL, kaynağı tanımlamanın yanında onun konumunu ya da erişim mekanizmasını da belirten URI alt kümesidir. Bu nedenle her URL bir URI olarak düşünülebilir, ancak her URI konum bilgisi veren bir URL değildir. Standartların terminolojisi ayrıntılarda farklılaşabildiği için burada RFC 3986’nin genel sözdizimini temel alıyoruz.

Örnek olarak https://example.test/urunler/kitap?sort=asc#detay URI’sini ele alalım. https şemadır. Ana makine, RFC 3986’deki authority bileşeninin host alt bölümüdür ve bu örnekte example.test değeridir. Authority bölümünde ayrıca kullanıcı bilgisi veya port bulunabilirdi. ? sorguyu, # ise parçayı başlatan ayraçlardır; bu işaretler bileşen değerlerinin kendisine dahil edilmez.

Bu URI’yi bileşenlerine ayırdığında temel yapı şöyle görünür:

Bileşen Örnekteki değer İşlev
Şema https URI’nin hangi adlandırma ve yorumlama şemasına bağlı olduğunu belirtir.
Ana makine (host) example.test Authority bölümündeki hedef ana makine adını gösterir.
Yol /urunler/kitap Kaynağın hiyerarşik yolunu belirtir.
Sorgu sort=asc Kaynakla birlikte taşınan sorgu bilgisini içerir.
Parça (fragment) detay Kaynak içindeki belirli ikincil bölüme yapılan başvuruyu belirtir.

Sorgu ve parça isteğe bağlı bileşenlerdir; bir URI yalnızca şema ve yol içeren daha kısa bir yapıya da sahip olabilir. Bileşenleri ayrı okumak, URI’yi tek bir metin olarak işlemek yerine her bölüm için farklı uygulama kuralları belirlemeyi kolaylaştırır.

Bir URI’yi parçalara ayırırken önce ayraçları tanımak, sonra her parçanın görev

Şema, ana makine ve yolu okuyan PHP örneği

Şema, ana makine ve yolu okuyan PHP örneği

Bu mini örnekte sabit bir URI metnini UriRfc3986Uri nesnesine dönüştürüp bileşenlerini okuyabilirsin. Sınıf ve şema, ana makine, yol, sorgu ve parça metotları PHP dokümantasyonunda PHP 8.5.0'dan itibaren gösterilir. Tam sınıf tanımı için PHP URI sınıfı dokümantasyonunu inceleyebilirsin.

<?php
$girdi = 'https://example.com/rehber/php?konu=uri#ornek';

$uri = new UriRfc3986Uri($girdi);

echo 'Şema: ' . ($uri->getScheme() ?? '(yok)') . PHP_EOL;
echo 'Ana makine: ' . ($uri->getHost() ?? '(yok)') . PHP_EOL;
echo 'Yol: ' . $uri->getPath() . PHP_EOL;
echo 'Sorgu: ' . ($uri->getQuery() ?? '(yok)') . PHP_EOL;
echo 'Parça: ' . ($uri->getFragment() ?? '(yok)') . PHP_EOL;

Beklenen çıktı:
Şema: https
Ana makine: example.com
Yol: /rehber/php
Sorgu: konu=uri
Parça: ornek

  • Şema: https, URI'nin kullandığı şema bilgisidir.
  • Ana makine: example.com, kaynağın ana makine, yani host bölümüdür.
  • Yol: /rehber/php, kaynağa giden yol bilgisidir.
  • Sorgu: konu=uri, soru işaretinden sonra gelen sorgu bileşenidir.
  • Parça: ornek, diyez işaretinden sonra gelen parça bileşenidir.

Bu metotlar normalleştirilmiş bileşenleri döndürür. Şema, ana makine, sorgu veya parça yoksa ilgili metot null döndürebilir. Örnekteki ?? '(yok)' ifadesi böyle bir durumda okunabilir bir varsayılan kullanır. getPath() ise yolu metin olarak döndürür.

Yeni özelliği kullanmadan önce PHP ortamını nasıl kontrol edersin?

Yeni bir PHP özelliğini değerlendirirken yalnızca örnek kodun sözdizimine bakma. Kodun çalışacağı PHP sürümü, SAPI türü ve dağıtım ortamı da aynı kararın parçasıdır. Komut satırında php -v ile çağırdığın PHP ikilisini, uygulama içinde ise PHP_VERSION ve PHP_SAPI değerlerini ayrı ayrı inceleyebilirsin. Ayrıntılar için PHP'nin komut satırı belgelerine bakabilirsin.

  1. Uygulamanın gerçekten kullandığı PHP sürümünü kontrol et. Komut satırında php -v, web isteğinde ise PHP_VERSION veya phpversion() değerini incele. Uygulama içi karşılaştırmayı version_compare(PHP_VERSION, '8.5.0', '>=') ile yaparak sonucu bu API'nin belgelenen başlangıç sürümüyle eşleştir.
  2. CLI ile web uygulamasının çalışma ortamını ayırt et. PHP_SAPI ya da php_sapi_name() ile web isteğinin hangi çalışma arayüzünde yürüdüğünü ayrıca gör. Terminalde aldığın sonucu web sunucusunun sonucu yerine koyma.
  3. URI API'sinin belgelenmiş biçimde kullanılabilir olduğunu doğrula. Tam sınıf adını ve kullanacağın metotları dokümandan kontrol et. Ardından class_exists('Uri\Rfc3986\Uri') ve gerektiğinde method_exists('Uri\Rfc3986\Uri', 'getHost') ile çalışma ortamındaki erişilebilirliği sınayabilirsin.
  4. Bağımlılık yöneticisi ve proje sürüm kısıtlarını incele. Composer kullanıyorsan composer.json içindeki PHP koşullarını, platform gereksinimlerini, kilit dosyasını ve varsa otomatik test ayarlarını kontrol et. Yerel PHP'nin bu kısıtlarla çelişmediğinden emin ol.
  5. Dağıtım sunucusunu veya çalışma imajını kontrol et. Dockerfile, temel imaj, barındırma ayarı veya sunucu yapılandırmasında belirtilen PHP sürümünü doğrula. Geliştirme bilgisayarındaki sonuç, dağıtım ortamı için tek başına yeterli değildir.
  6. Eski ortamlara karşı geriye dönük uyumluluk kararını ver. Proje daha eski PHP ortamlarını da destekliyorsa bu sınıfı doğrudan çağırmayı varsayılan seçenek yapma. Yetenek kontrolü, ayrı bir uygulama yolu veya desteklenen minimum sürümü yükseltme seçeneklerinden hangisinin uygulanacağını proje kapsamına göre belirle.
  7. Küçük bir doğrulama testi çalıştır. Sabit bir URI ile nesneyi oluşturup getScheme(), getHost() ve getPath() sonuçlarını beklenen değerlerle karşılaştır. Aynı testi mümkünse komut satırında ve gerçek web çalışma ortamında tekrarla.

Bu sıra, kodu projeye taşımadan önce üç noktayı görünür kılar: sürüm uygun mu, sınıf ve metotlar erişilebilir mi, dağıtım ortamı aynı koşulları taşıyor mu? Bu sorulardan biri yanıtlanmıyorsa önce uyumluluk kararını netleştirmen gerekir.

Küçük projeye ekleme kararını nasıl verirsin?

Küçük bir projede kararın başlangıç noktası, API'nin yeni olması değil, uygulamanın gerçek çalışma ortamında kullanılabilmesidir. Yerel ve dağıtım ortamlarında PHP sürümünü, kullandığın URI sınıfı ve yöntemlerinin erişilebilirliğini, ayrıca komut satırı ile web sürecinin aynı ortamı kullanıp kullanmadığını karşılaştır. Bağımlılık ve dağıtım kısıtlarını da bu aşamada hesaba kat.

Örneğin gelen bir adresin şema, ana makine ve yol bilgisini okuyacaksan, URI işleme kodunu tek bir yardımcı sınıf ya da fonksiyon sınırında tut. Temsilî birkaç girdide beklenen bileşenleri, hatalı girdilerdeki hata akışını ve mevcut çözümle oluşan farkı test et. Yerel ve dağıtım ortamları aynı doğrulanmış API'yi sunuyor, sonuçlar gözlemlenebiliyor ve bağımlılık kısıtları uygunsa yeni özelliği bu izole bileşende değerlendirebilirsin.

Bu koşullardan biri sağlanmıyorsa mevcut yaklaşımı korumak, yeni API'yi bir adaptör sınırı arkasında tutmak veya geçişi ertelemek ölçülü seçeneklerdir. Mevcut çözüm ihtiyacı karşılıyorsa yalnızca yeni olduğu için kodu değiştirmek gerekmez. Otomatik geriye dönük uyumluluk varsaymak ya da geçişi zorunlu kabul etmek yerine kararı küçük testlerin sonuçlarına ve projenin dağıtım koşullarına bağla.

Programlama temellerini ayrıca çalışmak isteyen yeni başlayanlar, PHP'den bağımsız bir kaynak olarak ücretsiz Sıfırdan Temel Python video eğitimi içeriğini kendi hızında inceleyebilir. Bu içerik PHP eğitimi değildir.

Sık Sorulan Sorular

URI ile URL arasındaki fark nedir?

URI, bir kaynağı tanımlayan genel kavramdır. URL ise kaynağı tanımlamanın yanında onun konumunu veya erişim mekanizmasını belirten URI türüdür. Bu nedenle her URL URI'dir, ancak her URI URL değildir.

PHP 8.5 URI Extension kodunu çalıştırmadan önce hangi ortam kontrolleri yapılmalı?

Yerel ve dağıtım ortamlarının PHP sürümünü, ilgili sınıf ve yöntemlerin erişilebilirliğini, komut satırı ile web çalışma ortamı arasındaki farkları ve bağımlılık kısıtlarını kontrol et. Ardından temsilî başarılı ve hatalı girdilerle şema, ana makine, yol ve hata akışını iki ortamda karşılaştır.

Dağıtım ortamı URI Extension için uygun değilse projede nasıl bir yol izlenebilir?

Mevcut yaklaşımı koruyabilir, yeni API'yi bir adaptör sınırı arkasında tutabilir veya geçişi erteleyebilirsin. Uygunluk doğrulanmadan üretim kodunu doğrudan yeni API'ye bağlama; kararını küçük testlerin sonuçlarına ve projenin dağıtım koşullarına göre ver.

URI Extension kararını, yeniliğinden çok ortam uyumu ve gözlemlenebilir test sonuçları belirlesin.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara