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

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

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

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

Q&A

解決済

2回答

2258閲覧

headerのContent-Typeについて

taishi_574

総合スコア39

PHP

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

0グッド

0クリップ

投稿2017/02/23 09:13

編集2017/02/23 09:29

題名について質問です。

以下の様にhtmlファイルを出力するページを作成しています。(以下はテスト用に作成したもの)
一部PHPでの記述が必要となったためUsrFncOutPut関数内のheaderのContent-Type:text/htmlの部分をどう変更すればいいのかが分かりません。

index.php

<!doctype html> <html> <head> <meta charset="utf-8"> <title>テスト</title> </head> <body> <?php /* 実行 */ $gStrTplFrm = "test.php"; UsrFncShowForm(); ?> <?php /* 表示 */ function UsrFncShowForm(){ global $gStrTplFrm; // HTMLテンプレートの読み込み $strHtml=join("",file($gStrTplFrm)); UsrFncOutPut($strHtml); } ?> <?php /* 出力 */ function UsrFncOutPut($strHtml){ $now = gmdate('D, d M Y H:i:s') . ' GMT'; header('Expires: ' . $now); header('Last-Modified: ' . $now); header('Cache-Control: no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0'); // HTTP/1.1 header('Pragma: no-cache'); // HTTP/1.0 header("Content-Type:text/html;charset=utf-8"); header("Content-length: " . strlen($strHtml)); print $strHtml; } ?> </body> </html>

尚、test.phpの中身は以下です。

<html> <head> <meta charset="utf-8"> <title>テスト</title> </head> <body> <div>html</div> <?php echo 'php'; ?> </body> </html> コード

このコードの'html'という文字列は表示されて、'php'は表示されないです。

どのようにすれば、phpも正常に表示されるかをお教えいただけたら嬉しいです。よろしくお願いします。

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

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

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

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

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

guest

回答2

0

header()コマンドは、PHPのあらゆる出力より前に実行する必要があります
例示のものであはindex.phpが本文を出力している途中で
UsrFncShowForm()経由でUsrFncOutPut()を呼び、そのなかでheader()
出力をしているので、エラーを吐いて無効になっていませんか?

投稿2017/02/23 09:19

yambejp

総合スコア114585

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

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

taishi_574

2017/02/23 09:38

現在、エラーは表示されておらず、画面には” html ”と表示されています。 私が書いたコードではないものをデバッグしています。 yambejp様のいう通りheader()以前には何も記述してはいけないという認識だったのですが、 エラーは出ていません。
yambejp

2017/02/23 11:12

まぁエラーの件はとりあえずおいておくとして file()で読み込まずにcurlを利用してhttpベースで読み込んでみては いかがでしょう? UsrFncOutPut()もなぜかましているかわからないので 省いてもいいような気もします またhtmlをまるっと呼び出して処理するなら 適宜htmlspecialchars()などかましたほうがよいかもしれません
taishi_574

2017/02/24 05:37

いくつか出力するページがあるので、UsrFncOutPut()を作成していたのだと思います。 今回は、つくりをごそっと変えて作り直そうと思います。 ご丁寧にありがとうございました。 yambejp様のアドバイスを元に、curlについても理解を深めていこうと思います。
guest

0

ベストアンサー

エラーの表示が抑制されているのでは?

PHP

1<?php 2//エラー出力強制 3ini_set( 'display_errors', 1 ); 4//すべてのエラー表示 5error_reporting( E_ALL );

投稿2017/02/23 10:14

kei344

総合スコア69366

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

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

taishi_574

2017/02/23 10:20

kei344様 ご回答ありがとうございます。 そう思い、php.iniも確認しましたが、エラーは表示は抑制されていませんでした。
kei344

2017/02/23 10:25

UsrFncOutPut 関数の直前に上記コードを入れてみてください。質問文のコードだけが単独であるわけでは無いと思いますので、どこかで表示を消す設定をしている可能性があるので。
taishi_574

2017/02/23 10:31

kei344様 UsrFncOutPut 関数の直前に上記コードを入れてみましたが、やはりエラーは出ません。 質問文のコードはテスト用に元のソースより切り取り作成したので、それだけで動作確認をしています。
kei344

2017/02/23 10:38

不思議ですね。ブラウザキャッシュも消して試してみてください。 両ファイルの<title>テスト</title>の部分を個別に書き換えて、それで表示した場合、出力されたHTML(ブラウザで「ページのソースを表示」)はどちらになっていますか?
taishi_574

2017/02/23 11:01

キャッシュを消してみてもエラーはでませんでした。 titleはtest.phpの方が表示されます。 今、いろいろ試していたのですが、質問文と同じコードに戻すとPHPが表示されました。。。 意図する表示はできたのですが、原因が分からないため、さすがに怖いです。。。
taishi_574

2017/02/24 05:34

output-bufferingの設定が4096となっていたのでoffにしましたが、変化はありませんでした。 作りを変えた方が、早そうなのでそうしてみようと思います。 いつもご親切にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問