- ベストアンサー
インクルード関数
すみません、下記はインクルードの元のPHPファイルです。 これでインクルードすると CSSのリンクと画像のリンク のところでParse error: syntax error, unexpected T_STRING というエラーが出ます。 $HTMLHEADER の中を単純な文字にするとエラーが出ないという ことはインクルードそのものの構文は間違っていないということ だと思います。 インクルードの場合リンクはどうすればいいんでしょうか? <?php //ページタイトル $APPTITLE = "関東近県の格安出張"; //ヘッダ部 $HTMLHEADER = " <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'> <HTML> <HEAD> <META http-equiv='Content-Type' content='text/html; charset=utf-8'> <META http-equiv='Content-Style-Type' content='text/css'> <TITLE>" . $APPTITLE . "</TITLE> <link href="css/basic.css" rel="stylesheet" type="text/css" media="all" /> </HEAD> <BODY> <TABLE width='100%' bgcolor='#ff8000'> <TR> <TD> <div><img src="images/head.jpg" alt="" /></div> <div><img src="images/main.jpg" alt="" /></div> <ul class="u"> <li><a href="index.html"><img onmouseover="this.src='images/home2.jpg'" onmouseout="this.src='images/home.jpg'" src="images/home.jpg" alt="" border="0" /></a></li> </ul> </TD> </TR> </TABLE>"; //フッタ部 $HTMLFOOTER = "</BODY> </HTML>"; ?>
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
まずはお詫びを。 09/09/15 11:16、09/09/16 23:31の自分の投稿ですが、 質問内容を読み誤っていたことに気がつきました。 大変申し訳ありません。一旦忘れてください。 -------------------------------------------------- ヘッダー部分、フッター部分のHTMLをそれぞれ格納した $HTMLHEADER,$HTMLFOOTERという変数を作成するスクリプトを 各ページで読み込むことで フォーマットの共通化を実現したいということですね。 現在作成しているスクリプトの手直しを最小限に抑えるなら、 ダブルクオーテーションの使い方を見直すのが最短の解決策です。 具体的には、ご質問にあるとおり、 <li> <a href="index.html"> <img onmouseover="this.src='images/home2.jpg'" onmouseout="this.src='images/home.jpg'" src="images/home.jpg" alt="" border="0" /> </a> </li> にかかわる部分なのですが、エラー発生原因に特化してぐっと簡略化すると $HTMLHEADER = "<a href="index.html">"; という構造です。 「index.html」という文字列の直前で、$HTMLHEADERの範囲が「"」で閉じられてしまっています。 「"」を含む文字を変数に代入する場合は、「\」を使ってエスケープする必要があります。 $HTMLHEADER = "<a href=\"index.html\">"; こうすることで、「<a href="index.html">」という文字列が$HTMLHEADERに格納されます。 と、ここまでで内容の実現はできると思うので、以下補足です。 【補足(1)】 今回の場合、$HTMLHEADER,$HTMLFOOTERに格納する値は 複数行にまたがる長い文字列になります。 通常、このような長い文字列を使用する場合、 yambejpさんが示していただいたように ヒアドキュメントを使用することができます。 しかし、ヒアドキュメントの中では、PHPの変数を使用することができません。 $HEADERHTMLの中で、「$APPTITLE」を使っているので今回は使用できないようです。 【補足(2)】 今回の共通フォーマットの仕組みですが ヘッダー、フッターそれぞれのincludeファイルを分割すると それぞれのファイルの中身はほぼ純粋なHTMLのみで記述することができて もっとすっきりできるんじゃないかな、と思っています。 コンテンツを生成しているファイルでは、header.php、footer.phpを それぞれ読み込みます。 [header.php] -------------------------------------------------- <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'> <HTML> <HEAD> <META http-equiv='Content-Type' content='text/html; charset=utf-8'> <META http-equiv='Content-Style-Type' content='text/css'> <TITLE><?php echo $APPTITLE;?></TITLE> <link href="css/basic.css" rel="stylesheet" type="text/css" media="all" /> </HEAD> <BODY> <TABLE width='100%' bgcolor='#ff8000'> <TR> <TD> <div><img src="images/head.jpg" alt="" /></div> <div><img src="images/main.jpg" alt="" /></div> <ul class="u"> <li><a href="index.html"><img onmouseover="this.src='images/home2.jpg'" onmouseout="this.src='images/home.jpg'" src="images/home.jpg" alt="" border="0" /></a></li> </ul> </TD> </TR> </TABLE> -------------------------------------------------- [footer.php] -------------------------------------------------- </BODY> </HTML> -------------------------------------------------- [content_a.php] -------------------------------------------------- <?php //処理ロジック //$APPTITLEなどの設定 ?> <? //コンテンツ部分を画面に表示する前に //ヘッダーを読み込みます。 include 'header.php'; ?> <div> コンテンツAを記述 </div> <? //コンテンツ部分を画面に表示した後 //フッターを読み込みます。 includ 'footer.php'; ?> -------------------------------------------------- 参考にしてみてください。 大きく回り道をしてしまい、大変失礼いたしました。
その他の回答 (3)
- seimurakam
- ベストアンサー率61% (21/34)
そうではありません。 説明するのに時間がかかりそうなので しばらくお付き合いください。 語幣があるのは承知ですが、 【PHPで動的WEBページを作成できる】 という用途に限って話をします。 まず最初にですが、 『PHPでHTMLを記述するには、HTMLソースを一度PHPの変数に格納して、 最後にechoしなければならない』 と思っておられるのだとしたら、 それは大きな誤解です。 PHPスクリプトは、<?php ~ ?>でくくった部分のみが PHPのスクリプトとして処理されます。 それ以外の部分は、HTMLとして解釈されます。 以下のソースaaa.phpで確認できます。 aaa.php ------------------------------------------------------------------ <?php //PHPでは何も行いません。 ?> <html> <head> <title>aaa.php</title> </head> <body> <h1>これはaaa.phpです。</h1> </body> </html> ------------------------------------------------------------------ <?php~?>を取り除いてしまえば、HTMLとなんら変わりはありません。 このファイルをWEBサーバにアップしてブラウザで確認すると、 <html>以降をaaa.htmlなどに記述した場合と同じように動作します。 これでは普通のPHPと同じですので、もう少し発展させてみます。 <h1>タグの中に、ページロード時の時刻を表示するよう変更します。 PHPには、「通常のHTMLソースの中に埋め込んで使用できるスクリプト言語である」という特徴があります。 これは、HTMLの中で、PHP(の変数やループ処理、if分岐など)を使いたい部分に対して、 <?php~?>を埋め込んでプログラム処理内容を記述できる、ということです。 以下のような使い方をします。 bbb.php ------------------------------------------------------------------ <?php //現在時刻を取得します。 $now = date('Y/m/d H:i:s'); ?> <html> <head> <title>aaa.php</title> </head> <body> <h1>現在の時刻は<?php echo $now;?>です。</h1> </body> </html> ------------------------------------------------------------------ ここまでのところ、現状の理解と相違ないでしょうか?
お礼
seimurakamさんご丁寧な説明ありがとうございます。 >ここまでのところ、現状の理解と相違ないでしょうか? 相違ないです。
- seimurakam
- ベストアンサー率61% (21/34)
PHPスクリプト部分とHTML記述部分が 混在しているのが原因です。 イメージとしては、通常通りHTMLを作成し、 変数などのPHPスクリプトを埋め込みたい部分のみ <?php ?>で囲んでPHPの記述をする、 という手順で進めると、誤った記述が少ないと思います。 以下、修正したサンプルをのせておきますのでご確認ください。 <?php //ページタイトル $APPTITLE = "関東近県の格安出張"; //ヘッダ部 $HTMLHEADER = ""; ?> <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'> <HTML> <HEAD> <META http-equiv='Content-Type' content='text/html; charset=utf-8'> <META http-equiv='Content-Style-Type' content='text/css'> <TITLE><?php echo $APPTITLE ?></TITLE> <link href="css/basic.css" rel="stylesheet" type="text/css" media="all" /> </HEAD> <BODY> <TABLE width='100%' bgcolor='#ff8000'> <TR> <TD> <div><img src="images/head.jpg" alt="" /></div> <div><img src="images/main.jpg" alt="" /></div> <ul class="u"> <li><a href="index.html"><img onmouseover="this.src='images/home2.jpg'" onmouseout="this.src='images/home.jpg'" src="images/home.jpg" alt="" border="0" /></a></li> </ul> </TD> </TR> </TABLE> </BODY> </HTML>
補足
seimurakamさんありがとうございます。確認ですが $HTMLHEADER = ""; でその下のhtml記述が代入されるわけですか? すると</TABLE>の下にフッターを設けインクルードしたい場合 <?php $footer = ""; ?> <div>ここはフッターです。</div> </BODY> </HTML> でよろしいですか?
- yambejp
- ベストアンサー率51% (3827/7415)
>$HTMLHEADER = " これはダブルコーテーションで区切られた文字列を$HTMLHEADERに 代入しています。 ずっとみていくとその文字列の中にダブルコーテーションが でてきます。それがパースエラーをおこしています。 こういう場合はヒアドキュメントというものを使うと便利です。 $HTMLHEADER = <<<eof ・・・・ ・・・・ ・・・・ eof; とするといいでしょう。
お礼
なるほど、そういう事ですか、 ヒアドキュメントを使えばいいんですね。 yambejpさん助かります。ありがとうございます。
補足
seimurakamさん、長いお時間を割いていただき恐縮です。 最後に示していただいた方法が一番間違えがないと思います。 ありがとうございました。 本筋と外れるかもしれませんが、気になるところがあります。 09/09/15 11:16 にご説明いただいた、 <?php //ページタイトル $APPTITLE = "関東近県の格安出張"; //ヘッダ部 $HTMLHEADER = ""; ?> <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'> <HTML>・・・・・・ を試しにやってみたのですが、print $HTMLHEADER; で<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>以下が反映されました。 確認ですが、以下のようにした場合、php以下の構文が $HTMLHEADERに代入されるのでしょうか? <?php //ヘッダ部 $HTMLHEADER = ""; ?>