• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Organizacja plików w większym projekcie PHP, require() i problem ze ścieżkami

Object Storage Arubacloud
0 głosów
121 wizyt
pytanie zadane 22 grudnia 2022 w PHP przez Bartłomiej Sikora Użytkownik (730 p.)

Cześć,

wykonuję pierwszy większy projekt w PHP, który dodatkowo będzie często rozwijany o kolejne funkcje, więc musi być łatwo skalowalny.

Napotkałem pewien problem - nazwijmy - logistyczny, związany z ułożeniem plików w folderach. Konkretnie: tworzę wiele plików zawierających pojedyncze funkcje, jak np: 

  • Funkcja startująca sesję, jeżeli jeszcze jej nie ma (program posiada API, aplikacja kliencka działa asynchronicznie),
  • Funkcja autoryzująca zalogowanego użytkownika,
  • Funkcja sprawdzająca, czy użytkownik posiada konkretne uprawnienie,
  • itd...

Funkcje te wykorzystywane będą w wielu miejscach w kodzie, w różnych podfolderach. Same jednak potrzebują dostępu m. in. do pliku zawierającego konfigurację bazy danych. 

Np: projekt / functions / auth / test.php:

function __test() {
   $db = require('../../config/db.php');

   // do something...
}

Teraz wykorzystuję ją w: projekt / api / api_test.php: 

function api_test() {
   require_once('../functions/auth/test.php');

   __test();

   // do something...
}

 

Problem polega na tym, że kiedy dodaję taką funkcję __test do innego pliku z użyciem require() / require_once(), to jest ona "wklejana" w tym miejscu, przez co funkcja ta nie może pobrać konfiguracji bazy danych, zmienia się ścieżka. Oczywiście funkcja ta wykorzystywana będzie też w wielu innych miejscach. 

Czego chciałbym uniknąć, to na pewno wysyłania jako argument do funkcji __test ścieżki do konfiguracji, oraz wykorzystania zmiennej $_SERVER['DOCUMENT_ROOT'], gdyż możliwe, że aplikacja będzie przeniesiona np. na jakąś podstronę / subdomenę. 

Jestem otwarty na różne propozycje, nawet zmianę zamysłu układania plików i przebudowę tego, co już zdążyłem napisać. Proszę o podpowiedź jak rozwiązać taki problem, może jest jakiś sposób na "wywołanie" funkcji w jej oryginalnej pozycji, czy po prostu zawsze wszystko podpinać do pliku głównego (w tym wypadku api_test.php) i wysyłanie jako argument...? 

Dzięki i pozdrawiam! :D

2 odpowiedzi

+2 głosów
odpowiedź 22 grudnia 2022 przez rafal.budzis Szeryf (85,260 p.)
wybrane 2 stycznia 2023 przez Bartłomiej Sikora
 
Najlepsza

Wszystko najlepiej obsługiwać w jednym pliku wejściowym index.php (+ konfiguracja .htaccess) w głównym folderze. Następnie nie bawić się w ręczne require, a skorzystać z PSR-4 oraz composer. Ogólnie warto się zapoznać z całym PSRem ;) https://www.php-fig.org/psr/

+1 głos
odpowiedź 22 grudnia 2022 przez Ehlert Ekspert (212,670 p.)
Jak chcesz robić większy projekt i skupić się na realizacji funkcjonalności to zainstaluj framework.

Wszystkie kwestie: sesje, guardy, routing i bazę danych masz zaimplementowane i wygrzane produkcyjnie.

Pisząc to samemu skupiasz się na aspektach stricte technicznych i zostawiasz pełno dziur bezpieczeństwa.

Podobne pytania

0 głosów
1 odpowiedź 140 wizyt
pytanie zadane 18 października 2016 w C i C++ przez Magda Grzenkowicz Nowicjusz (140 p.)
0 głosów
1 odpowiedź 132 wizyt
pytanie zadane 16 sierpnia 2018 w Java przez DanielKowalskiX Początkujący (460 p.)

92,555 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,941 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...