Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sciezki publiczne w framework-u
Forum PHP.pl > Forum > PHP
kicaj
Zastanawiam sie jak rozwiazac w moim frameworku sciezke do folderu publicznego (grafiki, css, itp)

Zestawienie folderow wyglada mniej wiecej tak (dosc standardowo):
Kod
/application
/config
/cache
/library
/public
index.php
.htaccess

Mowa tutaj o folderze /public gdzie zawieraja sie pliki stylów, grafik, itp
Wiadomym jest ze w pozostalych folderach dostep bedzie zablokowany poprzez .htaccess

W szablonie glownym musze podac sciezke bazowa jako:
Kod
<base href="http://localhost/" />

a w grafikach odwolywac sie poprzez '/public/gfx/grafika.jpg', co nie wyglada zbyt ciekawie i podaje nazwe folderu "systemowego"

Rozwiazanie jakie widze to tylko nadpisanie poprzez mod_rewrite:
Kod
/gfx => /public/gfx
/styles => /public/styles

Co nie jest dosc elastycznym i a'la profesjonalnym rozwiazaniem

Jak rozwiazujece podobny problem?
Jakies pomysly, rady?
phpion
Hmmm a czy przypadkiem index.php (i .htaccess) nie powinien być w public *? Wtedy Twój problem sam się rozwiązuje bo odwołujesz się np. poprzez /gfx/logo.gif.

* DOCUMENT_ROOT ustawiony powinien być na katalog public
matix
Moim zdanie źle rozplanowałeś sobie strukturę aplikacji. Zacznij od tego, że katalog "library", gdzie trzymasz wszystkie biblioteki frameworka powinien być w jednym miejscu, poza całą aplikacją, tak, aby każdy serwis na jednym serwerze - jeśli masz ich więcej - korzystal tylko z jednego katalogu jako biblioteki.

Proponuję taki układ:

Kod
/ library
        /serwis1
            - public (ten katalog odpalasz przy wejściu na daną domene)
                       > index.php
                       > .htaccess
                                           > public
                                                 => images
                                                 => styles
            - application (poza zasięgiem domeny)
            - config.php [poza zasięgiem ofc]

       /serwis2
            - public  (ten katalog odpalasz..)
                       > index.php
                       > .htaccess
                                           > public
                                                 => images
                                                 => styles
            - application (poza zasięgiem)
            - config.php [poza zasięgiem ofc]

       / inny serwis, itp...


Tworzysz np. plik config.php, poza zasięgiem domeny w którym umieszczasz tylko ścieżkę do katalogu bibliotek, for example:
  1. <?php
  2. define ('Library', '../../library');
  3. ?>


Widzisz teraz różnice ? Katalog public, widoczny dla uzytkownika to będzie ten z obrazkami i stylami winksmiley.jpg

Moim zdaniem najrozsądniejsze rozwiązanie. winksmiley.jpg
Pozdrawiam.
phpion
Moim zdaniem ~matix źle rozumujesz. Katalog library powinien zawierać, jak sama nazwa wskazuje, biblioteki używane przez aplikację. Wyobraź sobie, że tworzysz klasę np. do generowania captcha. Gdzię wg Ciebie powinna się ona znajdować? Według mnie właśnie w katalogu library, aby wszystkie aplikacje miały do niej dostęp.
bim2
Ja do library wrzucam zew. biblioteki, a takie coś jak Plugin_Captcha do Application/Plugin/ winksmiley.jpg
W sumie dla usera dostępny powinien być tylko index.php i wszelkie grafiki i jsy smile.gif Nawet templatki mozna poza wrzucić :] Ofc, css musi zostac, mówię o plikach .tpl itd. smile.gif
kicaj
@phpion: index.php i .htaccess nie wrzuce do /public bo to pliki systemowe odpowiedziale za bootstrap, a katalog /public zawiera pliki "dozwolone" dla usera

@matix ciekawe rozwiazanie chociaz nie dokonca przemyslane, inne serwery i wracamy do punktu wyjscia... (chyba ze zle zrozumialem?)
Crozin
Ja to rozwiązuję w ten sposób:
Kod
/Application
/Library
/Public
    index.php
    .htaccess
    /images
    /css
    /js
bootstrap.php
DOCUMENT_ROOT ustawiasz na /Public (tak aby po wejściu na http://localhost otwierał się właśnie ten katalog)
A Public/index.php dajesz tylko:
  1. <?php
  2. require_once './../bootstrap.php';
  3. ?>
Dzięki temu całą aplikację masz poza zasięgniem użytkownika.
kicaj
@crozin: No to juz jest jakies rozwiazanie:)

Czekam na dalsze propozycje:)
dr_bonzo
Crozin'owe. That's all. Mam podobnie u siebie, w public jest index.php i koniec problemow
phpion
Hmmm czy przypadkiem to, co podał ~Crozin nie jest tym, o czym ja pisałem? smile.gif Na moją strukturę napisałeś, że jest fe, a na Crozinową, że ok. Hehehe. Jedyna różnica, o której nie pisałem ale miałem ją na myśli, to taka, że bootstrap wpakowałbym do index.php w katalogu public, ale to akurat nie ma chyba większego znaczenia.
bim2
To najlepsza struktura, gorzej jak dadzą serwer bez "pod katalogu" ;/ Ostatnio tłumaczyłem pewnemu jegomościowi, że najbezpieczniej niech mi da na domains/domena.pl/, ale on się uparł, że da mi na doimans/domena.pl/public_html/ ... .htaccessowo przekierowałem to na public/ ;|
kicaj
No w sumie tak:)
Ale to /public/index.php bede chcial wrzucc jak najmniej "mechanicznych" rzeczy...
bim2
mechanicznych czyli jakich? Moim zdaniem w public powinien znajdować się tylko 1 plik .php smile.gif Nawet gdy robisz coś do ajaxa typu nie wiem? Sprawdzanie emaila? To wrzucasz to do Akcji, czy gdzie tam chcesz snitch.gif Index powinien wszystko obrabiać. :]
kicaj
No racja, dlatego tak wlasnie zrobie:)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.