navi.php 内で dirname(__FILE__)すると、navi.php の存在するディレクトリが取得できますが、それをそのまま指定しただけでは、読み込み元のPHPからnavi.php を読み込んでいるディレクトリにはたどり着けません。読み込み元のPHPのパスを逆に辿る必要があります。
例えば、/path1/path2/show.php が /path3/navi.php を読み込んでいる場合、
navi.php と同じディレクトリのstyle.css を参照するには、
「../../path3/style.css」を指定する必要があります。
navi.php の __FILE__ からは「path3」を作り出すことはできますが、それだけではダメで、
「../..」を、show.php の方のパス($_SERVER[SCRIPT_FILENAME]から作り出す必要があります。
コードにすると、
---ここから---
<?php
function relativepath($srcfile, $dstfile) {
$srcdir=split('/', realpath(dirname($srcfile)));
$dstdir=split('/', realpath(dirname($dstfile)));
while (isset($srcdir[0]) && isset($dstdir[0]) && $srcdir[0] === $dstdir[
0]) {
array_shift($srcdir);
array_shift($dstdir);
}
if (count($dstdir) != 0) $dstdir[] = '';
$relative = str_repeat('../', count($srcdir)).implode('/', $dstdir);
return $relative;
}
?>
<link rel="stylesheet" href="<?= relativepath($_SERVER[SCRIPT_FILENAME], __FILE__) ?>style.css" type="text/css">
---ここまで---
こんな感じでしょうか。