• ベストアンサー

HEADERについて

無知でお恥ずかしいのですが、PHPで出力する際 header("Content-Type: text/html;charset=EUC-JP"); などと最初にヘッダーを出力すると思うのですが、例えばtest.phpが以下のようになっていた場合でもPHPでヘッダーを出力する必要があるのでしょうか? test.php ※1<?php header("Content-Type: text/html;charset=EUC-JP"); ?> <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="TEXT/HTML; CHARSET=EUC-JP"> <TITLE></TITLE></HEAD> <BODY> TEST <?php echo $test; ?> </BODY> </HTML> 参考書などを見てみると「全ての出力の前に記述する必要がある」と書いてあるだけで、書かずとも正常に表示されますし、仮に文字化けしても <META HTTP-EQUIV="Content-Type" CONTENT="TEXT/HTML; CHARSET=EUC-JP"> と追加すれば文字化けも解決するので、疑問は感じつつも思い出したときにPHPにもヘッダを記述するようにしていたのですが、少しづつPHPを勉強しやれる事が増えてくる内に、記述してあるものと記述して無いものが混在してきて気持ち悪く感じてきました。 皆さんはどのようにされていますか? ※他サイトで配布されているPHPスクリプトなども見てみたのですが、毎回記述している方、一切記述していない方それぞれでした。 あと、全く違う質問ですが、MYSQL接続中にエラー処理でexit;する場合、exit;する前にMYSQL接続を切断する必要ってあるのでしょうか?

  • PHP
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • mpx
  • ベストアンサー率71% (149/209)
回答No.2

>> 以下のようになっていた場合でもPHPでヘッダーを出力する必要があるのでしょうか? サーバーの設定とあなたの使用している文字コードに依ります。 WEBサーバーの設定によっては、ヘッダーによるcharsetの指定が無い場合は、デフォルトの文字コードがヘッダー部に出力されます。 その文字コードと自分の使用するコードが異なる場合は、headerで指定する必要が有ります。でないとブラウザによっては文字コードを正しく認識できないものがあります。 サーバーに設定が無い、あるいはデフォルトとあなたの利用する文字コードが一致している場合はheaderでの指定は不要です。 サーバーの設定は、下記の様にtelnetでも簡単に確認できます。 もしもヘッダーを設定していないにも関わらず、Content-Typeにcharsetが設定されており、利用しているものと異なる場合はheader()を使って上書きをしてやることになります。 %telnet okwave.jp 80 Trying 210.132.71.10... Connected to okwave.jp. Escape character is '^]'. GET / HTTP/1.0 HTTP/1.1 200 OK Date: Fri, 30 Jan 2009 16:56:32 GMT Server: Apache Vary: Accept-Encoding,User-Agent Connection: close Content-Type: text/html; charset=Shift_JIS 上の例ではShift_JISに設定されています。

kurarigu
質問者

お礼

お返事ありがとうございます。 私が所持している参考書には「とりあえず書いとけ!」的な説明ばかりで、掘り下げた説明が無かったもので、大変勉強になりました。 >もしもヘッダーを設定していないにも関わらず、Content-Typeにcharsetが設定されており、利用しているものと異なる場合はheader()を使って上書きをしてやることになります。 現在、複数のレンタルサーバを利用しており、サーバ毎にheaderを記述する・記述しないといった事をするよりは素直に毎回headerを書いた方がよさそうですね・・・。 説明頂いたおかげで「何故記述が必要なのか」という事がわかったので気持ちよくheaderを書けそうです。 お返事ありがとうございました! また何かありましたら宜しくお願いします。

その他の回答 (1)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.1

metaで設定していれば文字化けする確率では低いでしょう。 趣味の範疇ならそれで問題ないと思います。 想定できる問題としては、 ・php.iniで標準のContent-type出力を他の文字コードに設定している場合 ・デザイナーが作ったHTMLのmetaがSfhit_JISで修正漏れした場合 とか、自分が把握していない条件が入ると文字化けが発生します。 http://jp2.php.net/mysql_connect サーバへのリンクは、mysql_close() のコールにより 明示的に閉じられない限り、スクリプトの実行終了と同時に閉じられます。

kurarigu
質問者

お礼

大変わかりやすい説明ありがとうございます。 身近に聞く事が出来る方がおらず、書籍やインターネットなどが情報源のため「指定しない事によるデメリット」について触れて頂き、納得出来ました。 今現在は趣味の範疇ですがあえて「指定しない」と意固地になる事でも無いので今後気をつけたいと思います。 mysql_close()についてもありがとうございます。 exit;でスクリプトの実行終了する場合には明示的に切断する必要はなさそうですね。 また何かありましたら宜しくお願いします。 疑問は解決致しましたが、他の方の意見など頂けるようでしたら伺いたいので、本日はこの記事を「締め切り」とせず、明日「締め切り」させて頂きます。

関連するQ&A

  • header関数について

    私の認識としてはheader関数とはhtml内にある<head>内の代替わりだと思っていたのですが、それではheader関数の意義がないと思い、質問させていただきました。 php内でhtmlを書く場合、header関数を使わずに、<head>内で <meta http-equiv=\"Content-Type\" content=\"text/html\; charset=euc-jp\">\n"; のように書けばいいと思うのですが、なぜ header("Content-Type: text/html; charset=EUC-JP"); のように書く必要があるのでしょう?何かメリットでもあるのでしょうか? それとも私のheader関数に対する認識がずれていますか? php初心者というより、プログラム事態をあまり書いたことがないため、理解が乏しいです。header関数とhtml内での<head>間に書く違いを教えてください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • 文字コード指定について

    中国の無料HPスペースにPHPをアップロードしてテストしていますが、文字コードでどうしても引っかかります。 利用しているサイトはここ http://51j.cn/ PHPファイル中にヘッダに <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=EUC-JP"> と指定しているにもかかわらず、ブラウザで開くと「簡体字中国語」が指定されてしまいます。 どうにかEUC-JP にしたいのですが、何か方法はあるでしょうか。

    • ベストアンサー
    • PHP
  • インクルードすると おかしい

    インクルードすると"1"が表示されてしまい、困ってます。 コードがまずいのか?対処方法があるのか? すみませんが、教えてください。 状況は以下のとおりです。 test.php <?php echo include('./header.html'); ?> header.html <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> test.phpを実行すると、なぜか"1"が表示されてしまいます。 以上、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ジオシティーズで作るのならeuc-jp?

    yahooジオシティーズでHPを作る際は、絶対に <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=euc-jp"> ってやらないとうまくひょうじできないのでしょうか? <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=euc-jp"> をしないでIEで表示しようとすると文字化けしてしまいます。

    • ベストアンサー
    • HTML
  • header と session の順番

    header("Content-Type: text/html; charset=euc-jp"); $_SESSION['HOGE'] = true; といったようにセッションより前にヘッダーを書くとセッションに保存されない 場合などあるのでしょうか? テスト環境のサーバーでは正常動いているのですが、本番サーバーでは$_SESSION['HOGE']に 値がセットされていないようなのですが…。本番ではテストする事ができず推測なのですが…。

    • 締切済み
    • PHP
  • CGI.pmのstart_htmlで思い通りのMETAタグを出せない

    CGI.pmのstart_html()を使用してMETAタグを出力しようとしているのですが、思うように出力できません。 具体的には次の文字列と全く同じものを出力しようとしています。 <META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> いろいろやってみたのですが、どれも微妙にこれとは違うのです。 どなたか教えてください・・・。 今のところ、これに最も近かったのは、 print($q->start_html(-head => $q->meta({"-http-equiv" => "Content-Type", -content => "text/html; charset=EUC-JP"}))); で、これの出力(METAタグ部分)は、 <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /> でした。 お尻にスペース1個とスラッシュが付加されてしまいます・・・

    • ベストアンサー
    • Perl
  • 文字コード変更による、文字化け・レイアウト崩れ

    文字コードをShift-jisからEUC-JPに変更したいのですが、 HTML・CSSに処理を施したら文字・レイアウトが大幅に崩れてしまいました。 以下のように変更したのですがやり方に間違いはないでしょうか? [HTML] <meta http-equiv="Content-Type" content="text/html; charset=Shift-jis"> ↓↓ <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> [CSS] @charset "shift_jis"; ↓↓ @charset "euc-jp"; また、ブラウザの表示⇒エンコードで(Shift_jis)を選択すると今までどおり正常に表示されます。(HTMLとCSSにはeuc-jpの記述にも関わらずです) これは文字コード変更したと思い込んでしまっているのでしょうか? 解決策お願いします。 あまり知識がありませんので、分かり易く教えていただけるとありがたいです。 ちなみにエディタはHTML Project2を使用しています。

  • 携帯用HPの文字化け。。

    携帯用のウェブサイトを作成しています。 手持ちのi-mode/FOMAでプレビューすると正常に表示されるのですが EZ-webでプレビュー(openwave sdk 6.2K使用)すると、全体的に文字化けしてしまいます。 文字コードが関係している事が分かり、HTML内のメタ情報をEUC-JPからShift_JISへ書き直しました。 すると何故か今度はFOMAで文字化けし、EZ-webで正常表示という結果になり、四苦八苦しております(;´Д`) 修正前は以下の通りです。 <?php declare(encoding="EUC-JP"); header('Content-Type: text/html; charset= EUC-JP'); session_start(); $sid = session_id(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <META http-equiv="Content-Type" content="text/html; charset=EUC-JP">   ・   ・   ・ テスト時に修正したのは、<META~~ charset=EUC-JP">のEUC-JP部分です。 PHPには内部処理のみをさせているので、修正を加えませんでした。 ( header('Content-Type: text/html; charset= EUC-JP'); の部分です) i-modeとez-webの両方で文字化けさせない為には、どの様な修正をすれば良いのでしょうか。 ご存知の方、お教え下さい。どうぞ宜しくお願いします。m(__)m

    • ベストアンサー
    • HTML
  • 更新を繰り返すと文字化けが起きてしまいます...

    お世話になります PHP4でHPを作成しています 文字化けに関して質問させて下さい PHPで作成したページの更新をすると 5回に1回の割合で文字化けが発生してしまいます EUC-JPで作成したPHPファイルを表示するので ファイルの先頭に  <? header(\"Content-Type: text/html;charset=EUC-JP\"); ?>  <html lang=\"ja\">  <head>  <meta http-equiv=\"content-type\" content=\"text/html; charset=EUC-JP\">  <meta http-equiv=\"content-style-type\" content=\"text/css\">  <meta http-equiv=\"content-script-type\" content=\"text/javascript\"> と指定してから 他の処理が実行されるようにしているのですが…。 何回か更新を繰り返すと文字化けを起こしてしまいます。 文字化けを起こした時にソースを表示すると 日本語が正しく見れる状態になっていたので シフトJISになってしまっているようで… 宜しくお願いします

    • 締切済み
    • PHP
  • [HTML-PHP]あるPHPファイルだけ文字化け

    お世話になります。 XP/PHP5.2.9/Apache2.2.11 の環境で、簡単なシステムを作っているのですが、その際に PHP側で header( "Content-Type: text/html;charset=shift_jis"); HTML側で <meta http-equiv="content-type" content="text/html; charset=shift_jis"> と明示的にSJISにしているのですが、実際にローカルで確認すると文字化けしてしまうPHPファイルがあります。(1ファイルのみ) 他のPHPファイルは同様のヘッダー情報を送信していますが、文字化けせずに画面出力されています。 HTML-PHP初心者のため、補足等必要になるとは思いますが、どうぞご教授下さい。

    • ベストアンサー
    • PHP

専門家に質問してみよう