2012-05-13 17 views
5

Nie mam pojęcia, co stanowi "najlepsza praktyka" dla struktury aplikacji internetowej PHP. Czytanie tej strony zawiera wiele sugestii. Często wspomnianą strukturą jest "nie ma żadnych plików php wewnątrz katalogu głównego dokumentu". Chociaż brzmi to jak dobra praktyka, nie widzę jak to działa - serwer sieciowy nie rozpoznaje niczego poza katalogiem głównym dokumentu. Zakładam tutaj, że główny dokument jest katalog publiczny dostęp, coś jak poniżej:Dostęp do plików klas PHP poza DOCUMENT_ROOT

app- 
    | 
    - htdocs - document root 
    | | 
    | - index.php 
    | - css/ 
    | - images/ 
    | 
    - PHP classes in here/ 
    - Other PHP classes in here.../ 

Albo jest to, że „aplikacja” w powyższym przykładzie jest korzeniem dokumentu, a htdocs dir to publicznie dostępny obszar struktury witryny?

W następstwie tego, w jaki sposób mogę zapewnić publiczny dostęp do plików w katalogach innych niż htdocs?

Odpowiedz

7

Koncepcja jest prosta, zwłaszcza w przypadku korzystania z frameworka opartego na kontrolerach frontowych, niezależnie od tego, czy jest to serwer własny, czy istniejący (jak Zend Framework). Kiedy wszystkie żądania przychodzą przez centralny kontroler, pliki niezbędne do obsługi żądania są dołączane w razie potrzeby. Dołączone pliki nie muszą znajdować się w katalogu głównym sieci, aby działały. Po prostu muszą być dostępne dla kontrolera, aby je włączyć, a następnie wykonać. Tak więc tylko twój kontroler musi znajdować się w katalogu głównym. Wszystko inne może być poza tym.

FYI, działa to również w aplikacjach innych niż OOP. Musisz po prostu umieścić potrzebne pliki na każdej stronie.

To, co musi znajdować się w katalogu głównym, to obrazy, arkusze styli, pliki javascript itp., Które są wymagane przez przeglądarkę.

+0

Dziękuję za szybką odpowiedź! Nie używam instrukcji ** include ** w mojej aplikacji OOP. Używam ** require_once **. Każda z moich klas, w razie potrzeby, zawiera instrukcje require_once. Czy wpłynie to na zdolność kontrolera, jak opisujesz, od uzyskania dostępu do wymaganych zajęć? –

+0

Nie. Zasadniczo robią to samo. –

+0

Dziękuję. Wypróbuję twoje rozwiązanie i powrócę z wynikami tego. –

5

O ile to prawda, serwer WWW nie rozpozna niczego poza katalogiem głównym dokumentu, co ma zastosowanie tylko do plików żądanych przez użytkownika za pomocą żądania HTTP.

PHP działa na serwerze internetowym i nie ma pojęcia o korzeniach dokumentów i adresach URL. Widzi tylko podstawowy system plików systemu operacyjnego hosta serwera oraz dane przychodzące i wychodzące zgodne z określonymi standardami. Jedynym ograniczeniem PHP związanym z restrykcjami sieciowymi jest to, czy serwer WWW działa w chrootowanym więzieniu.

Jako taki, można umieścić plik php ANYWHERE w systemie plików, i zakładając, że uprawnienia są poprawne, PHP będzie mógł je osiągnąć i uruchomić. Nie ma znaczenia, czy ten plik jest ukryty w katalogu o głębokości 500 poziomów gdzieś całkowicie poza katalogiem głównym dokumentu - jeśli jest osiągalny, PHP może go uruchomić.

+0

Ach tak - to jest podobne w koncepcji do odpowiedzi zamieszczonej powyżej. Tak długo, jak każde żądanie użytkownika jest przetwarzane na główny katalog dokumentów, wszystkie powinny być dobrze. Dziękuję za dodatkowe informacje. Nie miałem jeszcze możliwości, aby do tego wrócić, ale dam ci znać, jak powstaje rozwiązanie oparte na twoich komentarzach (i komentarzach powyżej). –

+0

Dziękuję - powyższe rozwiązanie sprawdziło się dobrze. –

Powiązane problemy