Re: How can I replace $_SERVER["DOCUMENT_ROOT"] in PHP 7.0?
[email protected] (Aziz Saleh)
| Newsgroups | php.general |
|---|---|
| Message-ID | <CAPJtNhVmSsrFUnzdSdwccyniUQprj185kR-+0MUTnjm_Wa5==w@mail.gmail.com> |
I normally set a constant BASE_DIR that points to the main root and include files depending on where they are. With access to BASE_DIR you can also know where other files are from where you are. On Mon, Sep 13, 2021 at 5:09 PM Bo Berglund <[email protected]> wrote: > On Mon, 13 Sep 2021 21:30:18 +0100, Ashley Sheridan < > [email protected]> > wrote: > > > > >On 13/09/2021 21:17, Bo Berglund wrote: > >> On Mon, 13 Sep 2021 20:36:35 +0100, Ashley Sheridan < > [email protected]> > >> wrote: > >> > >>>> include_once ('appdbdata.php'); > >>>> > >>>> THen seemingly all worked, but only until a call was made to a php > file at a > >>>> deeper location which also included this file... > >>>> > >>> Have you looked at __DIR__ ? > >>> https://www.php.net/manual/en/language.constants.magic.php > >> Yes, I have tested this php file located in the htdocs/ dir: > >> > >> <?php > >> ini_set('display_errors', '1'); > >> > set_include_path(get_include_path().PATH_SEPARATOR.dirname($_SERVER['DOCUMENT_ROOT'],1)."/php"); > >> include ('logindata.php'); > >> > >> echo "Including: " > .dirname($_SERVER['DOCUMENT_ROOT'],1)."/php/logindata.php"; > >> echo "<br>Mail sender= " . $mailsender ; > >> echo '<br>Dir= ' . __DIR__ ; > >> echo "<br>DocRoot= " . dirname($_SERVER["DOCUMENT_ROOT"],1) . "/"; > >> ?> > >> > >> The output was this: > >> > >> Including: /usr/services/vux/apache/php/logindata.php > >> Mail sender= > >> Dir= /data/25/2/158/91/2484743/user/2721122/htdocs > >> DocRoot= /usr/services/vux/apache/ > >> > >> The strange thing is that even though I have set include_path according > to the > >> selected solution in this stackoverflow thread: > >> > https://stackoverflow.com/questions/44984560/what-is-the-php7-version-of-serverhome > >> it does not pick up the logindata.php file where $mailsender is defined. > >> If I move the test php file into /php then it picks up the information > since it > >> is in the same dir. > >> > >> Note that __DIR__ and dirname($_SERVER['DOCUMENT_ROOT'],1) return > completely > >> different paths! > >> > >> It really seems very strange that they have removed this function > without > >> supplying a new version... > > >They might show different paths, it all depends on the main script being > >run (autoloaders are your friend here). But you can use it to generate > >paths using some basic string concatenation (and some file methods if > >you want some better error case handling). > > However, my main goal was to be able to use includes across the server so > php > files in different locations could use the same set of utilities by > including > them with the correct path. > > So since this obviously does not work I have to start calculating relative > paths > from every place I have put the php files, like: > > include ('../../php/logindata.php'); > > And what happens if such a file in turn needs an include, is it relative > to the > original php file called or is it relative to the file which makes the > include? > > > -- > Bo Berglund > Developer in Sweden >