
よろしくお願いします。
いま,navi.php内で同一ディレクトリ内のstyle.cssを読み込もうとしています。navi.phpは色々なディレクトリから取り込まれるため,どこから取り込まれてもstyle.cssにリンクできるようにしたいのです。絶対URLは使いたくありません。
調べていたら,dirname(__FILE__)を使えば良いと分かったのですが,hrefの中に取り込むやり方が分かりません。御指南ください。
<link rel="stylesheet" href="<?= dirname(__FILE__) ?>/style.css" type="text/css">
は試したのですが,うまくいきませんでした。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
絶対URLを使いたくない理由というのがなんなのかによるのですが、
HTMLのBASEタグを利用されてはどうですか。
http://www.htmq.com/html/base.shtml
<base href="http://example.com/dir/" />
こんな感じでHTMLに挿入してやれば、そのHTML中のsrcやhrefなどは、その指定したパスから見た相対パスを引くことが出来ます。
上記が書かれている状態で、
<link rel="stylesheet" href="css/style.css" type="text/css" />
などと記述してやれば、それは、「http://example.com/dir/css/style.css」を読むとみなします。
これであれば、HTML中の一箇所のみを変更すれば良くなり、更新も楽かと思います。
もしくは、絶対URLではなくて、絶対パスで指定してやれば、同様なことができるのではないかと思いますがいかがでしょう。
<link rel="stylesheet" href="/dir/css/style.css" type="text/css" />
このようにパスの先頭に「/」を指定してやれば、「http://example.com」以下の最初のパスから指定するということになります。
また、テスト環境と本番環境で書き換えなきゃいけないのが面倒だという理由なのであれば、
<base href="<?php echo $URL?>" />
として、
PHPスクリプト中に、
<?php
if(file_exists(dirname(__FILE__).DIRECTORY_SEPARATOR."test.txt"){
$URL = "http://localhost/"; //テスト環境のURL
}else{
$URL = "http://example.com/"; //本番環境のURL
}
?>
といったような記述をしてやって、テスト環境のディレクトリにだけ「test.txt」をおいてやれば
本番にUPするための修正が少なくなると思います。
いかがでしょうか。
No.3
- 回答日時:
#1です。
思いっきり誤報ですみません。
ローカルでしかやってなかったんで気がつきませんでしたが、
アップロードしてみたらlinuxのフルパス返してくれてました。
PHP内部で処理している分には、よかったのですが、
URLとなると、#2さんの方法でないと 無理っぽいです。
No.2
- 回答日時:
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">
---ここまで---
こんな感じでしょうか。
No.1
- 回答日時:
> <link rel="stylesheet" href="<?= dirname(__FILE__) ?>/style.css" type="text/css">
使い方自体は正しいので、具体的にうまくいかないとは どういった状態でしょうか?
dirname(__FILE__) は そのファイル自身の絶対パスを返しますので、どこからincludeされても、ご希望通りの動きをしているはずです。
何通りか試してみて、HTMLのソースを見てみてはいかがでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
require_onceで読み込む場合、...
-
*.php、*.php3、*.phtmlの違い
-
ImageCreate関数が undefined f...
-
【file_exists】ファイルが存在...
-
ob_end_clean と ob_clean の違...
-
フォームで戻った際に入力済み...
-
円グラフ描画について
-
phpのextension_dirを複数指定...
-
CFileDialogの最初のディレクト...
-
ZendFrameworlkでZend_Session...
-
サーバにある画像の存在をチェ...
-
バッチを用いたフォルダの自動移動
-
Bookを閉じて保存した時のみ実...
-
IIS+PHP スクリプトから仮想デ...
-
ハッスルサーバーで海外からWP...
-
PHPのif文でその処理を途中で抜...
-
visualstudioでc#のdllができない
-
phpと<?xml version="1.0" enco...
-
require_onceが動いていない
-
VBでメールを送る時のSMT...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイルの遷移がうまく行われ...
-
zendのcontrollersについて
-
PHP/icludeを使った相対パスの...
-
PHPファイルが、そのまま見えて...
-
PHPでグローバルナビゲーション...
-
PHP Linux から Windowsへの移行
-
他のフォルダにあるPHPをreq...
-
ロリポップでSmartyのtpl読み込...
-
index.phpに入るには、どうすれ...
-
値の引継ぎについて
-
英語と中国語
-
__FILE__をHTMLタグ内で使う
-
XAMPPインストール後「セキュリ...
-
wordpressのルートのindex.php...
-
require_onceで読み込む場合、...
-
PEARライブラリで携帯サイト開発
-
pukiwiki設置の際に表示された...
-
相対パスでrequireはできないの...
-
header関数でページ移動しない
-
Zend Frameworkは商用サイトで...
おすすめ情報