PHP Geçerli web Dönüş yolu

7 Cevap php

Şu anda bir PHP çerçeve geliştirilmesi ve benim ilk sorun koştu var. Ne olursa olsun kaç klasör derin, bir sunucu üzerinde herhangi bir klasörün içine çerçeve düşmesi gerekiyor, ve bu dizinin bir taban URL olarak kullanmak için bulmak gerekir.

Örneğin, şu anda ben sunucu (http://cms.dev/) kök çerçeveyi koyarsanız çalışır, ama ben koymak olsaydı http://cms.dev/folder/ çalışmıyor.

Lütfen tavsiye, Herhangi bir yorum bekliyoruz.

BenTheDesigner

7 Cevap

Orada dört mevcut cevaplar, ama onlar tüm dosya yolları ile başa görünüyor, ve web istekleri için bir taban URL hakkında soruyorsun.

Herhangi bir web isteği göz önüne alındığında, size yararlı olabilir $_SERVER anahtarları bir demet olsun. Örneğin, sahte örnekte, aşağıdaki olabilir:

Eleştirel Düşünme, nasıl herhangi bir İstek içi için temel URL'yi çekin istiyorsunuz? Bazı durumlarda $_SERVER['REQUEST_URI'] bakmak ve size hiyerarşisinde isteği kadar derin olduğunu bilmek eğer unsurları firar kapalı şerit olabilir. (Script iki klasör derin Örneğin, son iki yol öğelerini kapalı şerit.) PATH_INFO veya mod_rewrite kullanımda olan şeyler daha açık hale geldiğinde: Daha uzun ve daha uzun olarak URL'ler sağlanır, yolları bitirmek ve dinamik URL başlar net bir gösterge yoktur.

WordPress, MediaWiki, phpBB, phpMyAdmin, ve şimdiye kadar yazdığım her uygulama kullanıcıya sahip elle uygulama yapılandırmasının parçası olarak bir taban URL belirtin nedeni budur.

__FILE__ betik tam yolunu döndürür sihirli bir sabittir. dirname ile birleştirin ve ".." uygun ekleyin. Bu yürütme sırasında değiştiremezsiniz çünkü, getcwd daha güvenilir bulunuyor.

Daha sonra (URL için eşleştirme) Betiğinize göreli yol almak için, web kök kapalı şerit olabilir. Bu bilgilere sahip pek çok $_SERVER değişken vardır. Ben belirlemek için dosya sistemini kullanmanızı öneririz:

  1. Script kamuya açık ise?
  2. Hangi derinlik / URL öneki at?

Then combine with your base URL. If your script's path == /home/public/foo_1/script.php ... and your $_SERVER['DOCUMENT_ROOT'] == /home/public

Sonra /foo_1/script.php olarak URL yeniden yazabilirsiniz. Istediğiniz sürece, tam URL gerekmez. Eğer bir otomatik yükleyici gibi, merkezi bir yerden onu çalıştırmak, bu tekniği en iyi çalışır.

Eğer kullanmanız gerekir dosyanın mevcut yol almak için:

$path=getcwd();

Örneğin için pencerelerde C:\blah\blah\blah Bu hiçbir dosya adını size dönecektir.

$_SERVER dizide bu gibi şeyler için kullanılabilir yararlı şeyler bir grup gidecekseniz. Bir var_dump($_SERVER); ihtiyacınız dizinin hangi eleman (lar) görmek etmeyin.

Eğer göreli yolu arıyoruz gibi geliyor.

$_SERVER['SCRIPT_FILENAME']

hile yapmak gerekir. Php.net sitesi bu http://php.net/manual/en/reserved.variables.server.php için kullanılabilir ne iyi belgelerine sahiptir

Ayrıca, orada başka ne olduğunu hiç merak vardır ve eğer değerler nelerdir

<?php print_r($_SERVER);  ?>  

Daha sen biliyorsun sandım söyleyecektir.

URL'ler kontrol çalışması yapmak için base tag:

<base href="http://cms.dev/folder/" />

PHP dosya yolları sorun varsa Pestilance tavsiyesi ile gitmek:

dirname(__FILE__) // returns the directory of current file