ABD Münbiçi bırakır mı ?

ABD, Münbiçin yarısı sizde yarısı bizde kalsın dedi

SON 20 YILDA OSCAR KAZANAN KADINLAR

Son 20 yılda En İyi Kadın Oyuncu kategorisinde Oscar kazanan oyuncuların listesi...

AFRİN HAREKATI

Zeytin Dalı Harekatında teröristlerden temizlenen bölge artıyor

SILKROAD XIAN SERVER

2017 de açılan Xian server ilginç özelliklerde

  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
PHP ile Base URL Almak

 
#1

normalde 

Kod:
http://localhost

 adresi bizim 

Kod:
base_url

 adresimiz fakat proje bir alt klasörde yer alıyorsa o zaman sıkıntılar çıkabiliyor.

Çünkü 
Kod:
http://localhost/proje

 böyle bir adrese sahip olabilirsiniz ve dahası bu proje yolunda çalışırken htaccess kullanarak diğer sayfaları sanki bir klasörmüş gibi gösterebilirsiniz. Bu nedenden dolayı da mutlak url’yi yakalamakta sorun yaşayabiliyorsunuz. Bunun birden fazla çözüm yöntemi var. Öncelikle en basit olanını yapalım:

Çözüm 1:
Bu yöntemde, base_url methodu tanımlanır ve o yönteme statik url verilir:
Kod:
<?php
    function base_url() {
        return 'http://localhost/proje';
    }
?>

Çözüm 2:
Bu yöntemde biraz programlama beceriniz önemli aslında. Ben trait kullandım, çünkü bu kod şu anki projemin bi parçası. Multiple olarak extends işlemi yapamadığım için 5.4 ile gelen traitleri kullanmaya karar verdim.
Gereksinimler:
  • Gezindiğimiz alan adı: 
    $_SERVER['SERVER_NAME'];
  • Şu anda bulunduğumuz sayfa: 
    $_SERVER['REQUEST_URI'];
[*]Bu işlemde mevcut bulunduğumuz sayfayı PHP’nin 

Kod:
str_replace()

[*]

fonksiyonunu kullanarak temizleyeceğiz. Zaten düz root ise hiçbir şey görünmeyecek. Yok farklı URL’lerde isek o zaman kalan kısım görülecektir. Örneğin şöyle:


Kod:
/*
http://localhost => return ""
http://localhost/proje => return "/proje"
*/

[*]

Yukarıdaki gibi bir temizleme işlemi sonrası yapılması gereken PHP’nin 

Kod:
explode()

[*]

 fonksiyonunu slash ile kullanarak slashtan sonra gelen ilk değeri almak. Yani şöyle düşünelim:


Kod:
/*
/proje
/proje/abc/
/proje/a/b/c/d/e/f/g
*/

[*]

İlk satırdaki proje değerini almak zaten sıkıntılı değil ama bulunduğunuz sayfa 3. satırdaki gibi ise bir problemimiz var demektir. Bu yüzden explode ile böldüklerimizin ilkini alıyoruz. Bu genelde projenin root dizinidir.
Dizinin altındaki dizinlere maalesef bir çözümüm yok, o durumlarda artık manuel olarak ilk yöntemi denemelisiniz. Neyse bu işlem sonrasında ise dönen array türü değerin 1. indexini çağırıyoruz.
Bu projemizin root olarak görünen klasörüdür. Yani 

Kod:
/proje/a/b/c/d/e/f/g

[*]

gibi bir adresten sadece proje değerini alıyoruz. Ve ilk değerin başına tekrar bir slash ekliyoruz Son olarak dönen değer ”/” ya da “/proje_kok_dizini” şeklinde oluyor. Aslında senaryo olarak size bu işlemin nasıl yapacağını söylediğime göre kodlaması da basit anlamda kafanızda canlandı. Yine de kodlarını paylaşayım:

url.php

Kod:
<?php
trait URL {
   private $url = '';
   private $current_url = '';
   public $get = '';

   function __construct()
   {
       $this->url = $_SERVER['SERVER_NAME'];
       $this->current_url = $_SERVER['REQUEST_URI'];

       $clean_server = str_replace('', $this->url, $this->current_url);
       $clean_server = explode('/', $clean_server);

       $this->get = array('base_url' => "/".$clean_server[1]);
   }
}
?>

[*]

index.php

Kod:
<?php
require_once 'url.php'

class Home
{
   use URL;
}

$h = new Home();

// Bu satır HTML kodları içermektedir.
// O yüzden üst kısımda PHP taglerini kapatmalısınız.
?>
<a href="<?=$h->get['base_url']?>">Base</a>




Ara
Cevapla


[-]
Hızlı Cevap

İnsan Doğrulama:
Aşağıda görünen onay kutusunu işaretleyiniz. Bu işlem otomatik spam kayıtları önlemek için kullanılır.

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  PHP ile gelenin Tarayıcı Bilgisini Almak Adamantin 0 703 19-03-2017, Saat: 17:44
Son Yorum: Adamantin

Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


Konuyu Okuyanlar:
1 Ziyaretçi

   
Türkçe Çeviri: MCTR, Forum Yazılımı: MyBB, © 2002-2018 MyBB Group.  



Merih Forum® bilgi paylaşım platformu. 2015-2018 Tüm hakları saklıdır.