• 締切済み

__FILE__をHTMLタグ内で使う

よろしくお願いします。 いま,navi.php内で同一ディレクトリ内のstyle.cssを読み込もうとしています。navi.phpは色々なディレクトリから取り込まれるため,どこから取り込まれてもstyle.cssにリンクできるようにしたいのです。絶対URLは使いたくありません。 調べていたら,dirname(__FILE__)を使えば良いと分かったのですが,hrefの中に取り込むやり方が分かりません。御指南ください。 <link rel="stylesheet" href="<?= dirname(__FILE__) ?>/style.css" type="text/css"> は試したのですが,うまくいきませんでした。

  • PHP
  • 回答数4
  • ありがとう数1

みんなの回答

回答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するための修正が少なくなると思います。 いかがでしょうか。

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.3

#1です。 思いっきり誤報ですみません。 ローカルでしかやってなかったんで気がつきませんでしたが、 アップロードしてみたらlinuxのフルパス返してくれてました。 PHP内部で処理している分には、よかったのですが、 URLとなると、#2さんの方法でないと 無理っぽいです。

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答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"> ---ここまで--- こんな感じでしょうか。

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

> <link rel="stylesheet" href="<?= dirname(__FILE__) ?>/style.css" type="text/css"> 使い方自体は正しいので、具体的にうまくいかないとは どういった状態でしょうか? dirname(__FILE__) は そのファイル自身の絶対パスを返しますので、どこからincludeされても、ご希望通りの動きをしているはずです。 何通りか試してみて、HTMLのソースを見てみてはいかがでしょうか?

関連するQ&A

  • file_get_contentsでcss読み込み

    file_get_contentsで、<link rel="stylesheet" href="style.css">と同じことをやるにはどうすればよいのでしょうか? 結果をechoすると、同じこと? それとも、結果をechoするのは、htmlにcssを直書きする内部css扱いになるので、 <link rel="stylesheet" の外部cssとは異なる? css読み込めれば、「file_get_contents」でなくても良いです。 「include」とかでもcssを読み込めるのでしょうか?

    • ベストアンサー
    • PHP
  • wordpressのタグについて

    ワードプレスの教科書の本に沿って勉強しているのですが、さっそく躓いてしまいました。。 よろしくお願いいたします。 テーマ作成で、プライムストラテジーのサイトからpacificという練習用テーマをダウンロードし、 xamppでローカル開発環境を準備した中に入れ、ソースをwpテンプレートタグに置き換えを行っているのですが、cssファイルの置き換えは問題ないのですが、テーマファイルディレクトリの置き換えがうまくできません。。 たとえば、cssは、 <link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo('stylesheet_url'); ?>" />    ↓↓↓ <link rel="stylesheet" type="text/css" media="all" href="http://localhost/wordpress/wp-content/themes/pacific/style.css" /> で、ちゃんと表示されている。 テーマファイルディレクトリは、 href="<?php bloginfo('templete_url'); ?>/images/touch-icon.png"    ↓↓↓ href="wp/images/touch-icon.png" ソースの一部↓ ----------------------------------------------------------- <!DOCTYPE HTML> <html dir="ltr" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>title</title> <link rel="apple-touch-icon" href="wp/images/touch-icon.png" /> <link rel="shortcut icon" href="wp/images/favicon.ico" /> <link rel="stylesheet" type="text/css" media="all" href="http://localhost/wordpress/wp-content/themes/pacific/style.css" /> ・・・ ----------------------------------------------------------- <?php bloginfo('templete_url'); ?>の部分は、wp とだけ表示されてしまうのですが、 http://localhost/wordpress/wp-content/themes/pacific と表示させたいのですが、 この部分はどこを参照しているのでしょうか。 (どこを修正したら、ちゃんと出るようになりますでしょうか。) 不足している情報があれば追加しますので、わかる方がいらっしゃいましたらご教示いただけますと幸いです。 どうぞよろしくお願いいたします。

  • 外部ファイルを読み込んだhtmlをinclude

    外部ファイルを読み込んだhtmlをincludeしたいです。 ディレクトリの階層は、 index.php style.css /pic/picture.html /pic/css/style1.css /pic/css/style2.css : /pic/css/style13.css /pic/js/jquery1.js /pic/js/jquery2.js : /pic/js/jquery15.js : (画像などが他にもいっぱい) となっています。 ----- picture.html内には <link rel="stylesheet" type="text/css" href="css/style1.css"> <link rel="stylesheet" type="text/css" href="css/style2.css"> : <link rel="stylesheet" type="text/css" href="css/style13.css"> <link rel="stylesheet" type="text/css" href="js/jquery1.js"> <link rel="stylesheet" type="text/css" href="js/jquery2.js"> : <link rel="stylesheet" type="text/css" href="js/jquery15.js"> : と書かれています。 ---- このときindex.phpのbody内に <?php include('./picture.html'); ?> とした場合、相対パスによる記述なのでpicture.html以外のcssやjsは適用されませんよね。 しかし/pic/内にあるすべてのpicture.htmlに関係するファイルは非常に数が多いので、これらすべてをincludeするのは厳しいです。 すべての外部ファイルを読み込んだ状態のpicture.htmlをbody内に表示したいのですが、そんなことは可能でしょうか。 どなたかご教示ください。どうかよろしくお願いします。

    • ベストアンサー
    • PHP
  • HTMLメールの外部CSSが有効になりません

    HTMLメールから以下のように外部CSS(http://から始めてます)を利用したいのですが、実際にOUTLOOK 2003 SP3で見るとスタイルが適用されていません。 ローカルで同じHTMLをブラウザで開くとスタイルは適用されます。HTMLメールのときは何か特別なことが必要なのでしょうか? <link href="http://domain/style.css" rel="stylesheet" type="text/css"> <link rel="stylesheet" href="http://domain/style2.css" type="text/css" media="screen" /> <script language="JavaScript1.2" src="http://domain/js.js" type="text/javascript"></script> ヘッダ全体を以下に掲載しておきます。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head> <title>TITLE</title> <link href="http://domain/style.css" rel="stylesheet" type="text/css"> <script language="JavaScript1.2" src="http://domain/js.js" type="text/javascript"></script> <link rel="stylesheet" href="http://domain/style2.css" type="text/css" media="screen" /> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head>

  • CSSで、外部スタイルシートを2つ指定した場合。

    たとえば、 <link href="style.css" rel="stylesheet" type="text/css"> <link href="info.css" rel="stylesheet" type="text/css"> のように2つスタイルシートを指定した場合、同じ内容のスタイルシートを書き込んだ場合どちらが優先されるのでしょうか。

    • ベストアンサー
    • HTML
  • base hrefとlink rel

    テキストエディタでhtmlを書いています。 外部cssを使うので、 <link rel="stylesheet" href="style.css" type="text/css"> をヘッダ部に入れていますが、これより上に <base href="~"> で基準URIを指定しようとすると、cssが反映されなくなってしまいます。 先に <link rel="~ を入れてしまうと、文法チェックで引っ掛かるのですが、どうしたら良いのでしょうか? ソースは、 <Head> <base href="絶対パス"> <link rel="stylesheet" href="style.css" type="text/css"> で、この後にmeta属性を入れています。 よろしくお願い致します。

    • ベストアンサー
    • HTML
  • CSS のときのヘッダの記述

    <link rel="stylesheet" href="style.css" type="text/css" /> の link rel = の ●「 rel 」って何の省略なのでしょうか? また、 ●href は Hyper link REFerence の略でしょうか?

    • ベストアンサー
    • HTML
  • HTMLタグについて

    <!-- #EndEditable --> <meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> <link rel="stylesheet" href="古いデーター/text.css" type="text/css"> </HEAD> <BODY bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="5" marginwidth="0" marginheight="5"> <table width="760" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td><div align="center"><img src="toppu2.gif" width="700" height="92"></div></td> </tr> </table> <div align="center"> <table width="760" border="0" cellspacing="0" cellpadding="0"> <tr> <td><div align="center"><img src="botan4.gif" width="700" height="57" border="0" usemap="#Map6"></div></td> </tr> <tr> <td><div align="left"><!-- InstanceBeginEditable name="contents" --> _________________________  上記のタグで 【<link rel="stylesheet" href="古いデーター/text.css" type="text/css"> 】が文字化けしてるから可笑しいと思うのですが、これを テンプレート上で下記のように修正してもエラーが出て 上手くいきません。 <link rel="stylesheet" href="../../text.css" type="text/css">  この他におかしい部分が多分あると思うのですが、 そこをお教えください。  宜しくお願い致します。

  • ホームページビルダー2000で「/」が「¥」に置き換わる

    ホームページビルダー2000でスタイルシートを下のように設定して保存すると、「/」の部分が勝手に「¥」に置き換わってしまいます。これをふせぐ良い方法はありませんでしょうか。 宜しくお願いいたします。 <LINK rel="stylesheet" href="http://xxx/xxx/xxx.css" style="text/css"> ↓保存すると <LINK rel="stylesheet" href="http:\\xxx\xxx\xxx.css" style="text\css">

  • IEのセキュリティにブロックされないようにするには

    皆さん、お力をお貸し下さい。 javascriptで以下のようなプログラムを持つウェブページを作成しているのですが、IEのセキュリティ保護(セキュリティ保護のため、コンピュータにアクセスできるアクティブ コンテンツは・・・)に引っ掛かってしまいます。このプログラムにウィルス等の脅威が含まれないことを示してブロックされにくくするといったことは出来ないでしょうか?全てのjavascriptがブロックされる訳ではないようですが、不勉強なもので、ブロックされる場合とされない場合の差が分かりません。妙案お授け下さいます様、お願い致します。 <script type="text/javascript" language="JavaScript"> <!-- today=new Date(); allseconds=today.getTime(); surplus=Math.floor(allseconds/(24*60*60*1000)); flag=surplus%5; style=new Array(5) style[0]='<link href="index_style/style01.css" rel="stylesheet" type="text/css">'; style[1]='<link href="index_style/style02.css" rel="stylesheet" type="text/css">'; style[2]='<link href="index_style/style03.css" rel="stylesheet" type="text/css">'; style[3]='<link href="index_style/style04.css" rel="stylesheet" type="text/css">'; style[4]='<link href="index_style/style05.css" rel="stylesheet" type="text/css">'; document.write(style[flag]); //--> </script>

専門家に質問してみよう