アプリ版:「スタンプのみでお礼する」機能のリリースについて

すみません、下記はインクルードの元の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>";

?>

A 回答 (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';
?>
--------------------------------------------------





参考にしてみてください。


大きく回り道をしてしまい、大変失礼いたしました。

この回答への補足

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 = "";
?>

補足日時:2009/09/17 07:40
    • good
    • 0

そうではありません。


説明するのに時間がかかりそうなので
しばらくお付き合いください。

語幣があるのは承知ですが、
【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>
------------------------------------------------------------------


ここまでのところ、現状の理解と相違ないでしょうか?
    • good
    • 0
この回答へのお礼

seimurakamさんご丁寧な説明ありがとうございます。
>ここまでのところ、現状の理解と相違ないでしょうか?
相違ないです。

お礼日時:2009/09/17 00:07

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>

でよろしいですか?

補足日時:2009/09/16 09:15
    • good
    • 0

>$HTMLHEADER = "



これはダブルコーテーションで区切られた文字列を$HTMLHEADERに
代入しています。
ずっとみていくとその文字列の中にダブルコーテーションが
でてきます。それがパースエラーをおこしています。

こういう場合はヒアドキュメントというものを使うと便利です。

$HTMLHEADER = <<<eof
・・・・
・・・・
・・・・
eof;

とするといいでしょう。
    • good
    • 0
この回答へのお礼

なるほど、そういう事ですか、
ヒアドキュメントを使えばいいんですね。
yambejpさん助かります。ありがとうございます。

お礼日時:2009/09/15 17:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!