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

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

ただいまの
回答率

90.62%

  • PHP

    19833questions

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

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,077

kapimako

score 40

お問い合わせフォームの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;
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kapimako

    2017/01/06 14:08

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

    キャンセル

  • kapimako

    2017/01/06 14:11

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

    キャンセル

  • ockeghem

    2017/01/06 14:24

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

    キャンセル

回答 3

+3

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

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

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

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

<!--?php
phpinfo();
?-->


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/06 14:55

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

    キャンセル

checkベストアンサー

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/06 14:17

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

    キャンセル

  • 2017/01/06 14:26

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

    キャンセル

  • 2017/01/06 14:35

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

    キャンセル

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

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    19833questions

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