I migrate sites powered by wordpress, joomla, etc... to another hosting platform. Sometimes __DIR__
and __FILE__
constants return only basename, i.e. if a file is located under /var/www/site.com/public/index.php, the constants will return public and index.php respectively. I know the constants should return full path and a simple script could prove it:
~/tmp/src> cat index.php lib/curl.php
<?php
var_dump(__DIR__, __FILE__);
require_once("lib/curl.php");
<?php
var_dump(__DIR__, __FILE__);
~/tmp/src> php index.php
string(20) "/home/damage/tmp/src"
string(30) "/home/damage/tmp/src/index.php"
string(24) "/home/damage/tmp/src/lib"
string(33) "/home/damage/tmp/src/lib/curl.php"
When the constants are var_dump'ed in some wordpress plugin file on the hosting platform, somehow they point to basename of the file/directory. It happens with joomla too, for instance the code:
$backtrace = \debug_backtrace();
$callPath = $backtrace[0]['file'] ?? '';
var_dump($callPath);
returns different strings on each invocation.
string(88) "{site_root}/templates/shaper_helixultimate/html/modules.php"
string(11) "modules.php"
I can not share the code, anyway it is a big project. The hosting is running apache/2.4.46 (centos) and php 7.4.19. I could assume it is with hosting's apache/php configuration but have no clue which option it might be. Any advice in which direction should I go is highly appreciated.
source https://stackoverflow.com/questions/69743432/why-does-dir-file-return-basename-instead-of-full-path
Comments
Post a Comment