PHP "Uygulama Root" olsun

1 Cevap php

I this thread on StackOverflow benim web uygulaması içeriden "Uygulama Kök" almak için nasıl bulundu.

Ancak, bu iplik önerilen yaklaşımlar çoğu zaman pek Windows Xampp uygulanabilir. Say, benim web app app dizini içinde kalır "common.php" var:

/
/app/common.php
/protected/index.php

Benim common.php, ne var bu gibi:

define('DOCROOT', $_SERVER['DOCUMENT_ROOT']);
define('ABSPATH', dirname(__FILE__));
define('COMMONSCRIPT', $_SERVER['PHP_SELF']);

Ben / korumalı / index.php içindeki common.php gerekli sonra, bunu buldum:

C:/xampp/htdocs     //<== echo DOCROOT;
C:\xampp\htdocs\comic\app //<== echo ABSPATH
/comic/protected/index.php //<== echo COMMONSCRIPT

So the most troublesome part is the path delimiters are not universal, plus, it seems all superglobals from the $_SERVER[] asso array, such as $_SERVER['PHP_SELF'], are relative to the "caller" script, not the "callee" script.

Ben sadece bu her zaman common.php dosyasının mutlak yolunu döndürür emin olmak için dirname(__FILE__) güvenebilirsiniz gibi görünüyor.

Ben kesinlikle DOCROOT ve ABSPATH gelen dönen değerleri ayrıştırmak ve sonra doğru "uygulama kökü" hesaplayabilirsiniz. Örneğin, ben htdocs sonra parçaları karşılaştırabilirsiniz ve Unix gibi yol almak için bölü tüm backslash'lar yerine

Acaba bu işlemek için doğru yolu nedir? Ne ben bir lamba ortamında benim web uygulaması dağıtmak olur? Bu çevre-bağımlı yaklaşım beni dışarı bomba olur?

Ben dürüst olmak gerekirse, bu tür CakePHP ve CodeIgniter gibi bazı PHP çerçeveler kullanmış, Onlar sadece LAMP veya WAMP ya da üzerinde çalışabilirsiniz, ama onlar böyle bir zarif bir çözüm yaklaştı nasıl emin değilim.

Tüm ipuçları ve öneriler için şimdiden çok teşekkürler.

1 Cevap

dirname(__FILE__) yolunu almanın yaygın bir yöntemdir. Script sadece PHP 5.3 çalıştırmak veya eğer, aslında, __DIR__ aynı şeyi yapmak ve yazmak için biraz daha kısa olacaktır.

Ben common.php içeren strateji biraz gereksiz olduğunu düşünüyorum. Yeni başlayanlar için, DOCROOT ve COMMONSCRIPT yararsız vardır - onlar sadece zaten küresel bazı verileri çoğaltmak. (Tüm PHP geliştiricileri $_SERVER['PHP_SELF'] ne olduğunu biliyorum, ama ben şahsen COMMONSCRIPT it up bakmadan ne demek olduğunu bilemeyiz.)

İkincisi, buna değer daha fazla sorun olabilir. /protected/protected2.php dan yolunu almanın bazı farklı yollar Karşılaştırması /protected/protected.php:

ABSPATH . "/../protected/protected2.php";
"protected2.php"
dirname(__FILE__) . "/protected2.php";

Tüm bu geçerlidir, ama bazıları diğerlerinden daha kolaydır. Bu sadece ne (uygulama kökü almak) için soruyorsunuz her neye ihtiyacınız olmayabilir göstermektedir. Yani tüm sorunları çözecek sihirli bir yolu mermi olduğunu söyleyebilirim. Eğer ABSPATH sabit sen, bunu kullanmak yardımcı olan bir durumda kendinizi bulursanız.

Sorunuzun ikinci kısmı: İleri eğik çizgiler bile ters eğik çizgi ile karışık Windows üzerinde çalışır. Örneğin:

include("c:\whatever\whatever/something/anything.php");

(en azından herhangi bir 5.0 + sürümüne; 4.x hakkında emin değilim) Windows üzerinde PHP çalışacaktır. Tersbölüler Unix üzerinde çalışır, böylece sadece her bölü yazın ve çapraz platform güvenli olacak olmayacaktır.

Eğer bir çapraz platform komut dosyası yazıyorsanız, bir sürücü harfi kod istemiyorum. Bunun yerine, bu gibi yazmak:

include("/whatever/whatever/something/anything.php");

İlk / c:\ olarak Windows üzerinde PHP tarafından yorumlanır. (Ben bir çapraz platform şekilde farklı bir sürücü harfi işaret etmek nasıl bilmiyorum.)

HTH