Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Ograniczenie open_basedir
Forum PHP.pl > Forum > Przedszkole
Malinaa
Uruchamiam aplikacje (autorski framework testowany na localhost) pierwszy raz w domenie i pojawia się błąd: Warning: require(): open_basedir restriction in effect!

Aplikacja jest w katalogu głównym /, natomiast domena jest skierowana na folder /public/ - na serwerze jest domyślnie włączona separacja stron stąd ten błąd, można wyłączyć i jest Ok.

Nie bez powodu domyślnie jest jednak włączona, a ze względu na bezpieczeństwo rozprzestrzenienia wirusa, to chyba taka przypadłość po Covid.

Pytanie, czy uruchamiając framework Symfony, który ma podobną strukturę katalogów, itp. też trzeba wyłączyć open_basedir, czy jakoś można to obejść?
Logicznie trzeba wyłączyć, aby uruchomić Symfony. Wolę jednak dopytać jak to jest z tym open_basedir?
Salvation
Symfonowy index.php w katalogu /public/:
  1. <?php
  2.  
  3. use App\Kernel;
  4.  
  5. require_once dirname(__DIR__).'/vendor/autoload_runtime.php';
  6.  
  7. return function (array $context) {
  8. return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);
  9. };

A my nie wiemy co Ty masz w swoim idex.php, bo nie wrzuciłeś go tutaj.
Malinaa
U mnie jest tak:

  1. ### BASE PATH ###
  2. define('DS', DIRECTORY_SEPARATOR);
  3. define('BASE_DIRECTORY', dirname(__DIR__) . DS);
  4.  
  5. ### FUNCTIONS - application starting
  6. require(BASE_DIRECTORY . 'application' . DS . 'start.php';


i już na require() krzyczy wyłącz ograniczenie open_basedir. ... potem jest Super.
Tylko, czy bezpiecznie.
nospor
moze zamiast wylaczac to poprostu okresl jakies katalogi sa dostepne dla open_basedir

cos ala:
open_basedir = /twoj/katalog/1;/tmp;itditd
Malinaa
Cytat(nospor @ 29.08.2024, 14:23:46 ) *
moze zamiast wylaczac to poprostu okresl jakies katalogi sa dostepne dla open_basedir

cos ala:
open_basedir = /twoj/katalog/1;/tmp;itditd



Nie za bardzo tak mogę, tzn. wolę bez podobnych kombinacji, poza tym czy Symfony przy instalacji wymaga takich zabiegów na serwerze.
Nie, działa "z automatu" i tu też bym tak chciał, ale na ten czas działa z automatu po wyłączeniu.
nospor
a jaka to kombinacja dac dostep do folderu twojej aplikacji? Czyli lepiej wg ciebie jest dac dostep do calego serwera? wink.gif
Salvation
A jaką masz strukturę katalogów na serwerze?
Malinaa
Teoretycznie wyłączenie jest tylko dla domeny (strony), ale dziura powstaje i Matrix może się przebić wink.gif
Nie w tym kłopot, a dobrze byłoby poprawić kod tak, aby działał bez wyłączania open_basedir.

Struktura katalogów jest taka (w katalogu głównym domeny):
/
application
public (public folders)
src
...

Całość jest tutaj: https://github.com/artimman/dbmframework

Domena jest skierowana na /public/ i kłopot jest taki,
że nie można dostać się do katalogów niżej bez wyłączenia.

Chciałbym, aby wystarczyło zrobić jakiś drobny zabieg kosmetyczny, np.
z define('BASE_DIRECTORY', dirname(__DIR__) . DS) ?

Co ciekawe, sprawdziłem domenę na której mam stronę w Symfony i dla tej strony też mam Separacje stron "Wyłączoną", czyli musiałem ją wyłączyć, aby zainstalować Symfony w domenie.
Być może frameworki, które są skierowane na katalog /public/ wszystkie tak już mają i nie da się tego ominąć (też w moim autorskim frameworku).
A miało byc mega bezpiecznie dzieki zastosowaniu struktury /public/, a tu wychodzi, że mamy coś za coś. No chyba, że jest coś jeszcze do odkrycia, kto wie.
Bo teraz to nie wiem, czy muszę z tym walczyć w moim frameworku, czy tak ma być? To taki frameworkowy standard smile.gif
Salvation
Do /public/ na hostingu wrzuć zawartość swojej aplikacji, a domenę spointuj na /public/public/
Powinno zadziałać i rozwiązać twój problem.
Malinaa
Możliwe, że zadziała, ale chciałbym to zrobić jak najbardziej naturalnie. Naturka się liczy.

Alternatywne rozwiązanie z .htaccess, które teoretycznie też może zadziałać ( tylko, czy obędzie się bez kopiowania, resetowania, klonowania.... ; )
1. Skierowanie domeny + instalacji frameworka (Symfony, itp.) do katalogu nadrzędnego [folder_nadrzedny] z aktywną separacją,
2. Umieszczenie instalacji Symfony (publicznej) wewnątrz katalogu [folder_podrzedny]
3. Skierowanie poprzez plik .htaccess ruchu aplikacji bezpośrednio z nazwy domeny do katalogu [folder_podrzedny], w którym mieści się instalacja publiczna, dostępna dla użytkowników.

Framework jest na hostingu, gdzie można włączyć lub wyłączyć separacje i tyle, dlatego pewnie powinien być na jakimś serwerze deweloperskim, vps, vpn, itp. ?
Wystarczyłoby wówczas jak nospor napisał określić dostęp do katalogu dla open_basedir.
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.