質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

5709閲覧

phpフォームをブラウザで見るとheader.phpが勝手にコメントアウトされて表示されない

kapimako

総合スコア39

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/01/06 04:27

編集2017/01/06 05:16

お問い合わせフォームのcontact_verify.php(確認ページ)をブラウザで見ると、インクルードされたheader.php(ヘッダー部分)が表示されず勝手にコメントアウトされている。
元々htmで作られたcontact_verify.htm を全ページ共通でheader.phpを読み込ませるために全ページをhtmlからphp化していますが、確認ページだけheader.phpが表示されません。ブラウザでインクルードされたphpが勝手にコメントアウトされる原因はどのようなことが考えられますでしょうか。

■ページ構成
index.php(お問い合わせフォーム)
header.php(全ページ共通のメタ、ヘッダー部分)をindex.phpの中にインクルードしている
toiawase.php(確認ページ、サンキューページ、メール来ました等のsendmail、postの設定)
contact_verify.php(確認ページ)

■index.phpの中身(抜粋)とcontact_verify.php(確認ページ)の以下記述は同じです。

※index.phpはheader.phpが表示されていますが、確認ページでは表示されません。
ちなみに、require_once をincludeやrequireにしても確認ページだけ表示されず、ブラウザのソースを見ると勝手にコメントアウトされています。

<?php require 'toiawase.php'; ?> <?php require_once($_SERVER['DOCUMENT_ROOT'] . "/inc/header.php"); ?> </head> <body>

■toiawase.phpの中身(抜粋)

$verifypage = "contact_verify.php"; // ----- Output to Web. if ($_POST['sendmail'] == "1") { $htmlfile = $thxpage; } else { $htmlfile = $verifypage; print replaceMsg (@file_get_contents($htmlfile)); exit(); } // ----- to redirect to thanks page. session_destroy(); header ("Location: " . $htmlfile); }

■追記します。

// ----- Send Email if ($_POST['sendmail'] == "1") { reset ($_POST); $emailhead = 'From: ' . $emailfrom; $emailmsg = @file_get_contents($email_clr); $emailmsg = setDate ($emailmsg); $emailmsg = getEnvData ($emailmsg); $emailmsg = replaceMsg ($emailmsg); $emailmsg = htmlspecialchars_decode($emailmsg); mb_send_mail ($emailto, $subject_clr, $emailmsg, $emailhead); // ----- to Visitor. reset ($_POST); $emailhead = 'From: ' . $emailfrom; $emailenv = '-f' . $emailfrom; $emailmsg = @file_get_contents($email_thx); $emailmsg = setDate ($emailmsg); $emailmsg = replaceMsg ($emailmsg); $emailmsg = htmlspecialchars_decode($emailmsg); mb_send_mail ($email, $subject_thx, $emailmsg, $emailhead, $emailenv); // ----- to redirect to thanks page. session_destroy(); header ("Location: " . $htmlfile); } } // ----- func: replace message function replaceMsg ($msgdata) { global $_POST; reset ($_POST); for ( $loop = 1; $loop <= count($_POST); $loop++ ) { $postkey = key($_POST); $multiple = count($_POST[$postkey]); if ( is_array ($_POST[$postkey]) ) { $value = ""; $multiple --; for ( $mloop = 0; $mloop <= $multiple; $mloop++ ) { $value = $value . $_POST[$postkey][$mloop] . ', '; } $value = rtrim ($value, ", "); } else { $value = current($_POST); $_POST[$postkey] = current($_POST); } if ( preg_match("/email/i", $postkey) || ($postkey == "メールアドレス") ) { global $email; $email = $value; } $value = htmlspecialchars($value); // print "postkey: $postkey / multiple: $multiple / value: $value <br>"; $keyword = "##__" . $postkey . "__##"; $msgdata = str_replace($keyword, $value, $msgdata); next($_POST); } $msgdata = preg_replace ("/##__.+__##/", "", $msgdata); $msgdata = mb_convert_kana($msgdata,"KV"); return $msgdata; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kunai

2017/01/06 04:32

肝心のcontact_verify.phpと、コメントアウトされているというHTMLを提示いただけますか
kapimako

2017/01/06 04:39

index.phpとcontact_verify.phpの<head>部分は同じ記述になりまして、<?php require 'toiawase.php'; ?> <?php require_once($_SERVER['DOCUMENT_ROOT'] . "/inc/header.php"); ?> </head> <body>になります。コメントアウトされているのは、ブラウザ表示した時に、F12で見るとphpの部分がコメントアウトされている。状態でレンダリングされていない。header.phpがブラウザ表示されていない状態になります。
ockeghem

2017/01/06 04:42

ソースは、質問文本文を編集・加筆して、ソース形式で示してくださると見やすいです。コメントアウト部分は、コメントアウトされているHTMLソースを貼り付けてください。
kapimako

2017/01/06 04:47

すみませんが、全体のphpはお送りすることが出来ない為、■ページ構成や■index.phpの中身(抜粋)とcontact_verify.php(確認ページ)の以下記述は同じです。と質問に記載させていただきました。申し訳ありません。。
kapimako

2017/01/06 04:50

ockeghem様、回答が入れちがいになったようですみません。
kunai

2017/01/06 04:53

では「replaceMsg」が何を行っているか提示いただけますか?
ockeghem

2017/01/06 04:59

コメントアウトにこだわるようですが、(1) HTMLコメント<!-- --> (2)PHPのコメント /* ... */ あるいは // ... のいずれでしょうか? あるいは、ひょっとして、「何も生成されていない」ことを「コメントアウト」と言ってますか?
kapimako

2017/01/06 05:08

ockeghem様、ありがとうございます。ブラウザのF12で見ると、以下のようにコメントアウトされています。 <!--?php require 'toiawase.php'; ?--> <!--?php include($_SERVER['DOCUMENT_ROOT'] . "/inc/head.php"); ?--> >「何も生成されていない」状態なのか見方が分からないのですが・・・取り急ぎ上記のみ回答させていただきました。すみません。
kapimako

2017/01/06 05:11

この部分の「投稿する」では、改行(えんたー)が出来ず・・・私のやり方が悪いのだと思いますが、回答の投稿が全部1行になってしまい、読みにくくてすみません。。。
ockeghem

2017/01/06 05:24

おそらくコメントアウトはされていないと思います。それは、F12で起動する開発者ツールが勝手に補っています。なので、「ソースの表示」などで表示されるものが、正しい出力です。単に、PHPとして解釈されず、PHPソースがそのまま出力されているようです。<?php の綴がまちがっていたりしませんか?
guest

回答3

0

投稿2017/01/06 05:51

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

kunaiさんが指摘されているとおりですが、

ともかく、replaceMsgがなかったとしても、print file_get_contents('contact_verify.php'); ではPHPソースコードがそのまま表示されてしまいます

これにつきますね。「コメントアウト」という文字に引っかかていましたが、手元の環境で試してみると、<?php ... ?>という「不正なタグ」はGoogle Chrome、Firefox、Edge等のブラウザの「開発者ツール」のDOMビューアで見ると、コメントアウトされた形で表示されます。以下は、<?php phpinfo(); ?> というPHPファイルをFirefoxのインスペクタで表示した場合です。

HTML

1<!--?php 2phpinfo(); 3?-->

ということで、「コメントアウト」は関係なく、file_get_contentsしたことにより、PHPソースがそのまま表示されている、が正解かと思います。

投稿2017/01/06 05:46

ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kapimako

2017/01/06 05:55

ockeghem様、お手数おかけしてすみません。勉強になりました。ありがとうございました!!
guest

0

ベストアンサー

出力前に何等か文字変換を行っていると思われる「replaceMsg()」が重要なのですが
その中で不明なタグは「<!-- -->」に変換するというような処理が行われているのではないでしょうか。
replaceMsg()の中身を提示いただけませんか?

投稿2017/01/06 05:13

kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kapimako

2017/01/06 05:17

kunai様、ありがとうございます。コメントが行き違いになりましたが、先ほど該当部分を追記させていただきました。よろしくお願いいたいます。
kunai

2017/01/06 05:26

POSTされているデータが処理に大きく影響しているようですが、POSTされる値がどんなものかわかりませんので、解析諦めました。。 ともかく、replaceMsgがなかったとしても、print file_get_contents('contact_verify.php'); ではPHPソースコードがそのまま表示されてしまいますので、コメントアウトがどうのと言う前にPHPタグ <?php ?> がHTMLタグとして不正なタグとして扱われます。 PHPの実行後の出力を得たいのであれば、file_get_contentsの引数をURLにする必要があります。 その場合、POST等の値は当然引き継がれませんので注意は必要ですが。
kapimako

2017/01/06 05:35

kunai様、ありがとうございました。回答がここに隠されているかと思いました。一旦クローズとさせていただきます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問