Webページの共通部分をPHPで記載する方法

このQ&Aのポイント
  • Webページの共通部分をPHPで記載する方法について質問です。ホームページの作成の際に、各ページの共通部分をphpファイルにまとめておく方法について教えてください。
  • header.phpファイルに共通するヘッダーを記載しています。しかし、各ページの階層が異なる場合に、相対パスのリンクやイメージのパスがうまく表示されないことがあります。
  • requireされたページによって、相対パスの部分を書き換えることは可能なのでしょうか?それとも絶対パスで書かなければならないのでしょうか?
回答を見る
  • ベストアンサー

Webページの共通部分をPHPで記載する方法

ホームページの作成の際に、各ページの共通部分、例えばヘッダー等を phpファイルを作成しておいてrequireする時について質問です。 header.phpファイルに共通するヘッダーを記載しています。 このファイルの中には<a href="./****">というようなリンクや <img src="./***">というイメージのパスが相対パスで記載されていますが、 各ページの階層が違う場合には、このまま取り込んでしまうと、 各階層によって相対パスは異なるので、うまく表示されないのですが、 requireされたページによって、こういった部分を書き換えることは、 可能なのでしょうか? それとも絶対パスで書かなければならないのでしょうか? 初歩的な質問で申し訳ございませんが、ご教示願います。

  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

これの正しい呼び方はイマイチよくわかってないですが、「/」から始まるパスは、ドメイン以下のディレクトリパスとしては、絶対パスになりますね。 http://www.example.com/img/test.jpg は、 /img/test.jpg と表すし http://www.example.com/subdirectory/img/hoge.jpg は、 /subdirectory/img/hoge.jpg になります。 Windowsでは表示されないということですが、ApacheなどのWebサーバ上から確認されたのであれば、 OSは関係なく動くと思いますので、記述したパスが間違っているのではないでしょうか。

その他の回答 (2)

回答No.2

相対パスの書き方として、「/」から始まるパスで記述してやればさほど気にならないかと思います。 img/header_logo.jpg という画像があったとして index.html contents/page1.html というコンテンツがある場合、 <img src="/img/header_logo.jpg" /> とIMGタグを記述してやれば、 contents/page1.html で呼んでやっても、 index.html で呼んでやっても、画像が表示されます。 index.htmlでcontents/page1.htmlのリンクタグを入れる場合も、 <a href="/contents/page1.html">リンク</a> といったように記述してやれば、正しくリンク出来ます。 といった方向で記述するのが最も簡単かなと思いますが、いかがでしょうか。

scanfprintf
質問者

お礼

ご回答ありがございました。 私はあまりというか、ほとんど”/”から始まるパスを書いたことが 無いんですが、これは絶対パスと考えていいんでしょうか。 現在はWindows上で作成してWebにはアップしていないんですが、 ”/img/*****”だと上手くいきませんでした。 Windows上で”/”から始まるパスを書く場合は環境変数に 追加しなければならないんでしょうか。 であれば、Web上であれば上手くいきそうですよね。 ご教示ありがとうございました。

  • nazal2010
  • ベストアンサー率54% (12/22)
回答No.1

一番手っ取り早いのは、やはり各階層毎にイメージファイル等を アップロードすることだと思いますが、質問内容を見る限り 膨大な数のファイルがあるのですよね? となれば、率直に思いつくのは画像のディレクトリまでのパス自体を 変数としてセットしておいて、実際に画像を表示するパスを 変数を含めたパスとして扱うようにすれば良いのかと思い・・・ 例えばこの様な感じで -------------------------------------------------------------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> <?php // 画像のディレクトリまでのパス $a = "http://www.ドメイン/image"; // 画像の表示 echo "<img src= $a/home_main.png>"; ?> </body> </html> -------------------------------------------------------------------- 【 $a = "http://www.ドメイン/image"; 】 この構文さえ各ファイルに記述しておけば、たとえどんなに深い階層に ファイルを設置しても、呼び出しには行ってくれますよね。 ( 事実上絶対パスなので、当然ですが ) こうすると、リンクの呼び出しも同じ要領で出来ますよね。 この様な方法で効率的なのかどうなのか、ですが・・・ 時間があるのでしたら、if文等の条件分岐で実装してみるのも面白いかも しれませんね。 とりあえず簡単に思いついた方法ですので、参考までに。

scanfprintf
質問者

お礼

ご回答ありがとうございました。 仰っていただいた通り、画像が大変多く、階層もかなり多いんので、 各階層毎に画像をアップするのはつらいかと・・・・ 変数として用意すれば、いいんですね! 私が一応最終的に選択したのが下記の方法なんですが・・・ 1.共通のヘッダーファイルをPHPで作成。 2.絶対パスと絶対パスを渡すと、その相対パスを求める関数含めた ファイルを作成。 3.共通ヘッダーファイルでは、呼び出しファイルの絶対パスと、 共通で使用するファイル(画像、スタイルシート、JavaScriptシート、 リンク等)の絶対パスを渡して、呼び出し元から共通ファイルへの 相対パスを求めて、呼び出されたファイルによって動的に相対パスを 作成して、記載。 こうすると共通のヘッダーファイルだけ変更すれば、全てのページに 反映されてメンテナンスは簡単なんですが、最初の作成が 多少面倒ですし、王道ではない感じがします。 それとページが呼び出された際に、まずヘッダーファイルをrequireして、 ヘッダーファイルでは、相対パスを求めるファイルをreqireしますが、 これはページの読み込み速度に影響するのでしょうか・・・・ 多少遅くなったような感じが、気のせいかもしれませんが・・・・

関連するQ&A

  • 共通部分の出力にPHPを使う場合

    ただ今Webサイトを運営している者です。 ヘッダとかフッタの各ページ共通部分を、PHPを使って一元的に管理しようと考えています。 PHPを挿入するページをaa.html、PHPで挿入するヘッダのページをheader.phpとすると、 ●aa.html <html> <head> </head> <body> <?php include 'header.php'; ?> </body> </html> ●header.php <html> <head> </head> <body> <div id="header">(中略)</div> </body> </html> こんな感じで考えています。 二つ質問があるのですが、 1. header.phpがaa.htmlの<?php >の部分にそのまま表示される、と考えてよいのでしょうか? 2. http://netcity.blog69.fc2.com/blog-entry-23.html 上のページや、他のサイトを読むと、外部ファイルの拡張子は何でもよいとありますが、これは本当でしょうか? 書いてある内容は同じでも、txtとhtmlとphpでは全然違う気がするのですが……。

    • 締切済み
    • CSS
  • ヘッダー部分を共通にする方法

    現在ホームページテンプレートを使用してホームページを作成しています。ヘッダー部分、レフトナビは前ページ共通にしたいのですが、その際の下階層での記述方法がわかりません。TOPページを変更するだけで、全てのページに反映させたいのです。持っているホームページソフトはGoliveです。どなたかわかる方教えてください。

  • PHPで同一ページ内でページの読み込みについて

    ナビゲーションから、リンクをクリックすると、ページが読み込まれるプログラムを作っているのですが、どのようにすればよいのでしょか?さっぱりわかりません。アドバイスお願いします。 ↓参考 //ナビゲーション <ul> <li><a href="#">リンク1</a></li> <li><a href="#">リンク2</a></li> <li><a href="#">リンク3</a></li> <li><a href="#">リンク4</a></li> </ul> //リンク1がクリックされたら、これを表示したい。 <?php require("hoge1.php"); ?> //リンク2がクリックされたら、これを表示したい。 <?php require("hoge1.php"); ?> //リンク3がクリックされたら、これを表示したい。 <?php require("hoge1.php"); ?> //リンク4がクリックされたら、これを表示したい。 <?php require("hoge1.php"); ?> ↓イメージ図 index.php内でページの読み込み --------------------------------- | ヘッダー | --------------------------------- --------------------------------- |リンク1|リンク2|リンク3|リンク4| ---------------------------------- ここでページの読み込み --------------------------------- | フッター | --------------------------------- 宜しくお願いします。

    • ベストアンサー
    • PHP
  • Webページでphpを使って共通部分を外部ファイルすると文字化けする。

    Webページでphpを使って共通部分を外部ファイルすると文字化けする。 Webサイトを制作中ですが、Webページを全て.phpファイルで制作しています。 これによってWebサイトにおける色んな共通部分を外部ファイル化して、のちの変更を簡単に済ますように構成しています。 そして、 ●Global Navi ●Sidebar Navi ●Header ●Metaタグ ●Footer 等、これまで制作した外部ファイルは全てうまくいっていたのですが、先ほど制作した外部ファイルが文字化けでうまくいきませんでした。どうすれば文字化けが直るでしょうか? 外部ファイルに記述したのは、単に日本語のサイトタイトルただそれだけです。 パン屑ナビに記述するサイトタイトル(これがうまくいけばその他のサイトタイトルを記述しているところ全部に適用させたい)で使うと文字化けしました。HTMLは以下のような記述です。 <!--Breadcrumb--> <div id="navi_bread"> <p><a href="http://xn--u9jxf0b3dt27s.jp"><?php include_once("../inc/sitetitle.php"); ?> TOP</a>&nbsp;&gt;&nbsp;商品案内</p></div> <!--/Breadcrumb-->

    • ベストアンサー
    • PHP
  • ヘッダーやフッター全ページ共通部分の生成

    全ページ共通のヘッダーやフッターを外部ファイルとして持ち、PHPで表示させるやり方があると思うのですが(すみません表現が間違ってるかもしれませんが)、拡張子は全て.phpにせざるを得ないでしょうか? SSIでもJavascriptでもなく共通をファイルを使い回す方法は他にないでしょうか?

    • 締切済み
    • PHP
  • PHPで同ページ内の外部ファイル表示切替の方法。

    初めて質問します。 PHPを利用し、同ページ内で、外部ファイルの表示切り替えをしたいのですが、PHPを覚えたばかりでうまくできません。 下記のような形でページ内で切り替え表示させるには、どうしたらいいのでしょうか。 ------- メニュー:<a href="a.txt">A</a> <a href="b.txt">B</a> <a href="c.txt">C</a> <?php require_once("./外部ファイル.txt"); ?> ----- 外部ファイル.txt の部分を、メニューのリンクに合わせて、a.txt、b.txt、c.txtのように、同ページ内で切り替え表示がしたいです。 リンクを<a href="index.php?~">と言う形にし、<?php require_once("./外部ファイル.txt"); ?>の中にif関数を入れればいいのではないか… と思っているのですが、どの関数をどのように組み合わせればいいのかが、お恥ずかしながらわかりません。 どなたか、教えていただけるとうれしいです。よろしくお願いします。

    • 締切済み
    • PHP
  • 全ページに共通のヘッダーを設定する方法

    こんにちは。 教えていただきたいのですが すべてのページに共通のヘッダーを効率よく設定する方法を知りたいです。 ちなみに設定するのは既存のサイトです。現在1ページごとに 作成していますがこれをすべて同じものを読み込む?ようにしたいのです。 一般的に、大規模なサイトのヘッダー部分のナビはどのように 作成されているのでしょうか。 javascriptで読み込んだり、ssiで読み込んだりすることもあると思いますが、 そのほかどんな方法があるのでしょうか? dreamweaverの「ライブラリ」の機能を最近知ったのですが あれだともとのライブラリファイルに変更を加えたら、 サーバーアップ時にライブラリファイルだけではなく それを読み込んでいるファイルもアップしなおさなくては結果が 反映されないですよね。 なにか効率のよいやり方をご存知の方いらっしゃいましたら 教えていただきたいです。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • 各ページに共通するヘッダーやフッターの記述

    各ページに共通するヘッダーやフッターの記述 ホームページ作成について質問です。 過去の質問を検索しましたが 解決できなかったので質問させていただきます。 ホームページビルダーで各ページに共通するヘッダーやフッターをテンプレートにすると 全てのページにヘッダーに使われている文章やリストなどのhtmlソースがすべて記述されてしまいます。 いろんなサイトを見るとヘッダー部分は同じなのにhtmlソースが記述されておりません。 SSIのincludeもなくphp、java scriptも記述されていません。 別ページにリンクさせているようなアドレスが記述されています。 そのような方法はあるのでしょうか? またSEO対策としてはどちらがいいのでしょうか?

  • 現在作成しているページで、一部をPHPで記述するようにしているのですが

    現在作成しているページで、一部をPHPで記述するようにしているのですが、 一度記述したPHPの部分のみをボタンをクリックしたら削除して 新たなPHPを呼び出したいと考えています。 HTMLソースを表示します。 <div class="box009"> <div class="box009inner"> <div class="box009m"> <?php require_once("./work/twitter.php"); twitter_serch(jsports,20); ?> <p class="mt10"><a href="#"><img src="img/button005.gif" width="629" height="40" alt="もっと読む" /></a></p> </div><!-- /box009m --> </div><!-- /box009inner --> </div><!-- /box009 --> このPHPの部分で記述している部分のみを削除したいのですが、 その場合はどのように記述すればよいでしょうか? よろしくお願いします。

  • HPで各頁に共通したヘッダーhtml全部をつけたい

    ホームページで各ページに共通したヘッダーを JavaScriptのdocument.write()を利用してつけようとしています。 OSはwindows Xpで、制作ツールは、alphaEDITを使用しています。 1.「header.js」ファイルを用意 document.write("<header.html>header"); 2.「index.html」を用意 <html> <head></head> <body> <script language="JavaScript" src="header.js"></script>   中身 </body> </html> 3.スタイルシートsample3.cssを用意 4.header.html を用意 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><title>ヘッダー</title> <meta content="text/html; charset=shift_jis" http-equiv="Content-Type"> <link rel="stylesheet" type="text/css" href="sample3.css"> <script language="JavaScript" src="func.js"></script> </head> <body> (かなり長いので省略) <p>&nbsp;</p></body></html> これで「index.html」を実行しますと、   header    中身 と表示されます。 headerという文字ではなく、header.html 全部を表示し、かつスタイルシートも反映させたいのですが、どうすればいいですか? 教えて下さい。 参考にしたURL 各ページに共通したヘッダー(フッター)をつける http://tagland.net/technique/common_header.html

専門家に質問してみよう