Yeni Cevap 
 
Konuyu Değerlendir
  • 0 Oy - 0 Ortalama
  • 1
  • 2
  • 3
  • 4
  • 5
PHP URI::URL->abs fonksiyonu
Yazar Mesaj
duzgun Çevrimdışı
Hizmetinizde
*******

Mesajlar: 2,322
Katılım: Jul 2008
Rep Puanı: 17
Mesaj: #1
PHP URI::URL->abs fonksiyonu
PHP URI::URL->abs fonksiyonu

URI::URL->abs dizimini perl konusunda tecrubeli olan kişiler hemen farkedeceklerdir.
Web tarayıcısı tabanlı yazılımlarda perl de çok önemli yeri olan bu fonksiyon yerine
php de parse_url fonksiyonu bulunmakta.

Örnek Perl kodu
Kod:
$sourceUrl = '/blah.html';
$baseHost = 'http://www.example.com';
my $url = URI::URL->new($sourceUrl, $baseHost);
return $url->abs;
#returns: 'http://www.example.com/blah.html'
Referans: http://stackoverflow.com/questions/91582...url/916016

Php de bu tip kullanımı kolay fonsiyonlarada yazılım geliştiricileri ihtiyaç duyacaklardır.
Perl deki gibi kullanımı basit olmasada aşağıdaki hazır fonksiyon bunun için kullanılabilir.

PHP fonksiyonu
PHP Kod:
function rel2abs($rel$base)
{
    
/* return if already absolute URL */
    
if (parse_url($relPHP_URL_SCHEME) != '') return $rel;

    
/* queries and anchors */
    
if ($rel[0]=='#' || $rel[0]=='?') return $base.$rel;

    
/* parse base URL and convert to local variables:
       $scheme, $host, $path */
    
extract(parse_url($base));

    
/* remove non-directory element from path */
    
$path preg_replace('#/[^/]*$#'''$path);

    
/* destroy path if relative url points to root */
    
if ($rel[0] == '/'$path '';

    
/* dirty absolute URL */
    
$abs "$host$path/$rel";

    
/* replace '//' or '/./' or '/foo/../' with '/' */
    
$re = array('#(/\.?/)#''#/(?!\.\.)[^/]+/\.\./#');
    for(
$n=1$n>0$abs=preg_replace($re'/'$abs, -1$n)) {}

    
/* absolute URL is ready! */
    
return $scheme.'://'.$abs;


Örnek : rel2abs('lena.jpg','http://www.example.com/a/b/lena.jpg')
Referans: http://nashruddin.com/PHP_Script_for_Con...solute_URL

Bunların dışında birde php de url yi parçalara ayırmak için kullanılabilicek bir regex ifadesinide extra olarak notlar arasına almak lazım

Kod:
if(preg_match("~([a-z]*://)?([^:^/]*)(:([0-9]{1,5}))?([/]*)?(.*)?~i", $url, $matches))
{      var_dump($matches);
$protocol = $matches[1];
$server = $matches[2];
$port = $matches[4];
$path = $matches[5];
if($path=="")$path ="/";
$path = $path.$matches[6];
if($protocol=="")$protocol="http://";

}

Bunlar yazılım geliştiricilerin işlerine yarayacaktır.
17-07-2009 15:48
Bu kullanıcının gönderdiği tüm mesajları bul Bu mesajı alıntı yap
Yeni Cevap 


Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi