• 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

0 głosów
378 wizyt
pytanie zadane 22 grudnia 2022 w PHP przez Bartłomiej Sikora Użytkownik (750 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 (86,400 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 (215,210 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ź 357 wizyt
pytanie zadane 18 października 2016 w C i C++ przez Magda Grzenkowicz Nowicjusz (140 p.)
0 głosów
1 odpowiedź 225 wizyt
pytanie zadane 16 sierpnia 2018 w Java przez DanielKowalskiX Początkujący (460 p.)

93,720 zapytań

142,638 odpowiedzi

323,264 komentarzy

63,268 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...