2011-07-16 13 views
10

Bir php framework'üm var ve taşınabilirliği optimize etmek için $_SERVER['SCRIPT_NAME'] kullanıyorum. Bu şekilde yolu artık manuel olarak yapılandırmam gerekmiyor.

$this->base_url = str_replace('index.php', '', 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']); 

Ama $_SERVER['SCRIPT_NAME'] ve $_SERVER['PHP_SELF'] aynı dize döndürür fark ettik. Peki, fark nedir? Aralarında nasıl seçim yapmalıyım?

+0

manuel kendini açıklayıcı fazla olması ise , http://in2.php.net/manual/en/reserved.variables.server.php, betiğinizin bir dizi faktörle sınırlı olabileceğini, bir web sunucusunun ortamınızı kurmuş olabileceğiniz şekilde gerçek dosya sistemi yolunu göremeyeceğiniz şekilde scriptname dizini, btw, RTFM'yi tercih ederim, googling tarafından takip, kendiniz yaparak daha fazlasını öğreneceksiniz :-) – Kumar

+1

Burada sormadan önce birçok kez okudum. Aksi halde burada olmazdım. –

+0

lütfen yorumumdan rahatsızlık duymadım, sadece el kitabının ne yazdığını ekledim, cevabınızı aldığınızı gördüğüme sevindim, kendimden daha çok yapıyorum, çoğu zaman cevabımı buluyorum. – Kumar

cevap

9

Fark.

PHP_SELF Eğer

O var (.php sonra "yol" ile birlikte) şu anda konum komut nokta tek fark

http://sandbox.phpcode.eu./g/f5093.php 

http://sandbox.phpcode.eu/g/f5093.php 

$_SERVER['SERVER_NAME'] benzeri ve $_SERVER['HTTP_HOST']

+1

bu gerçekten çok yardımcı oldu (: –

+1

ve sorunuz da! :) – genesis

+0

"Komut dosyası adı abs "OLDUĞUNUZU" - "SCRIPT_NAME" kökten göreli, _absolute değil. 'SCRIPT_FILENAME' mutlak bir yol içeriyor (bu, SCRIPT_NAME' ile aynı dosya değilse de). – MrWhite

7
SCRIPT_NAME 

akım betiğin yolunu içerir. Bu, kendilerini göstermesi gereken sayfalar için kullanışlıdır. __FILE__ sabiti, geçerli (yani dahil edilen) dosyanın tam yolunu ve dosya adını içerir.

PHP_SELF 

belge köküne göre Geçerli betiğin dosya adı,. Örneğin, http://example.com/test.php/foo.bar adresindeki bir komut dosyasında $_SERVER['PHP_SELF'], /test.php/foo.bar olacaktır. __FILE__ sabiti, geçerli (yani dahil edilen) dosyanın tam yolunu ve dosya adını içerir. PHP bir komut satırı işlemcisi olarak çalışıyorsa, bu değişken PHP 4.3.0'dan beri komut dosyasının adını içerir. Daha önce mevcut değildi.

kaynak php.net bir şey var

:

Kontrol dışarı http://www.yoursite.com/example/index.php/dir/test

$_SERVER['PHP_SELF'] == '/example/index.php/dir/test';

yılında $_SERVER['SCRIPT_NAME'] == '/example/index.php';

ETA içinde: çalıştı mysel f

http://127.0.0.1:8887/index.php/dir/test

localhost bu çalıştı
echo $_SERVER['PHP_SELF'] . "<br />"; 
echo $_SERVER['SCRIPT_NAME']; 

Çıktı geçerli:

http://sandbox.phpcode.eu/g/3e38d.php/test 

Senaryo adı dosya mutlak yolu

/index.php/dir/test 
/index.php 
+0

Bu örnek,/dir/test döndüren görünüşte yanlış ... –

+0

hayır yanlış değil.Şuraya bakın: http://sandbox.phpcode.eu/g/3e38d.php/test – genesis

+0

, buradaki örnekte, 'index.php' dosya adını ve bununla sunucu adı arasındaki ilişkiyi hariç tuttuğuna dikkat edin. @genesis linkinde, '/ g/3e38d.php/test' yerine yalnızca döndürüyor '/ –

İlgili konular