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

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

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

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

Q&A

解決済

2回答

3264閲覧

require_onceの後の処理が行われない

romukuro0328

総合スコア15

PHP

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

0グッド

0クリップ

投稿2018/11/07 07:24

困っていること

初歩的な問題かもしれませんが、ご教示願いたいです。
phpで記述した処理の分岐処理の確認をしたくて
phpでrequire_onceを用いて外部ファイルを読み込むと、そのあとに記述したechoが表示されません。
require_onceの前に記述したechoは正常に出力されますし、エラー表示もでてきません。
require_onceの部分をコメントアウトすると表示がうまくいくのですが、
何が影響しているのでしょうか?
調べてもそのような事例が出てこず、困っています。
今まで自分が書いてきたコードでもrequire_onceを用いたものはありますが、処理が行われない(行われているが表示されない?)ことはありませんでした。
単純に出力だけを行うことがなかったので気づかなかったのかもしれませんが…
ご存知の方がいらっしゃいましたら回答いただけると幸いです。

ソースコード

記述途中で見づらいですがご容赦ねがいます。

php

1<?php 2 3 ini_set( 'display_errors', 1 ); 4 5 print "hi"; 6 7 8 require_once('./MainController.php'); 9 require_once('./DetailController.php'); 10 require_once('./SearchController.php'); 11 require_once('./AnslistController.php'); 12 require_once('./OblistController.php'); 13 require_once('./ReportlistController.php'); 14 require_once('./BanwordlistController.php'); 15 16 17 18 /* $getdata = $_GET["c"]; */ 19 $getdata="Banwordlist"; 20 print "HI"; 21 22 if(strstr($getdata,'Main')==true){//質問一覧取得 23 $url = './Controller/'. $getdata .'Controller.php';//リダイレクト先URLの指定 24 header('Location: ' . $url, true, 301);//httpレスポンスのヘッダー 25 exit;//全ての出力を終了 26 }else if(strstr($getdata,'Detail')==true){//詳細一覧取得 27 $url = './Controller/'. $getdata .'Controller.php';//リダイレクト先URLの指定 28 header('Location: ' . $url, true, 301);//httpレスポンスのヘッダー 29 exit;//全ての出力を終了 30 }else if(strstr($getdata,'Search')==true){//検索一覧取得 31 $url = './Controller/'. $getdata .'Controller.php';//リダイレクト先URLの指定 32 header('Location: ' . $url, true, 301);//httpレスポンスのヘッダー 33 exit;//全ての出力を終了 34 }else if(strstr($getdata,'Anslist')==true){//回答者一覧取得 35 $url = './Controller/'. $getdata .'Controller.php';//リダイレクト先URLの指定 36 header('Location: ' . $url, true, 301);//httpレスポンスのヘッダー 37 exit;//全ての出力を終了 38 }else if(strstr($getdata,'Oblist')==true){//監視者一覧取得 39 $url = './Controller/'. $getdata .'Controller.php';//リダイレクト先URLの指定 40 header('Location: '. $url, true, 301);//httpレスポンスのヘッダー 41 exit;//全ての出力を終了 42 }else if(strstr($getdata,'Reportlist')==true){//通報一覧取得 43 $url = './Controller/'. $getdata .'Controller.php';//リダイレクト先URLの指定 44 header('Location: '. $url, true, 301);//httpレスポンスのヘッダー 45 exit;//全ての出力を終了 46 }else if($getdata=="Banwordlist"){//禁止ワード一覧取得 47 /* $url = './Controller/'. $getdata .'Controller.php';//リダイレクト先URLの指定 48 header('Location: '. $url, true, 301);//httpレスポンスのヘッダー */ 49 echo "Hi"; 50 //$test=new $BanwordlistController(); 51 //$test->Banwordlist(); 52 exit;//全ての出力を終了 53 }else{ 54 header("HTTP/1.0 404 Not Found");//404エラーを返す 55 exit; 56 } 57 58 59 60?>

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

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

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

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

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

m.ts10806

2018/11/07 07:30

require_onceで読み込まれているPHPがそれぞれ何をしているのか全て提示いただかないと何とも言えません。 requireの前は出力される、そのあとは出力されないとなるとどこかでexit()なりdie()なりで処理が終了しているのかもしれませんが、提示内容からはわかりません。まずは1つずつコメントアウトしていってどこが原因か確かめてみては?
m.ts10806

2018/11/07 07:30

あと、header()の前には何も画面出力してはいけませんので、そのあたりを見直してみてください。
romukuro0328

2018/11/07 07:36

コメントありがとうございます。読み込みにしていたファイル全てechoだけを記述したダミーを用意していたつもりなのですが、1番上のファイルだけダミーファイルではなくexit()が使用されているファイルでした…。解決しましたありがとうございます!!読み込みの段階でも読み込まれたファイルのプログラムが影響するようになっているのですね、それは初めて知りました。header()の前には画面出力してはいけないとのことですが、どこの部分でしょうか?少し理解できなくてすみません。
m.ts10806

2018/11/07 07:38

http://php.net/manual/ja/function.header.php >覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。
m.ts10806

2018/11/07 07:39

print しちゃってますよね。header()の前に。
romukuro0328

2018/11/07 07:56

リファレンスだけでは少しかみ砕けなかったので他のサイトも閲覧してきました(汗なるほど、httpの仕様上やってはいけないことだったのですね。こちらも初めて知りました。学校で教わることがない事ばかりで改めて勉強不足を痛感致しました。ご丁寧にコメントやアドバイスありがとうございました!解決しましたので、閉じさせていただきますね。本当にありがとうございました。
m.ts10806

2018/11/07 07:56

ただ、本件は解決したようですし、私のコメントで解決したようでしたらほぼそのまま回答にしておきますので解決済みにして次にいきましょう。
m.ts10806

2018/11/07 07:59

学校でどのような内容を教わるか学校でPHPを教わったことがないのでわかりませんが、プログラミング言語にとっての教科書は公式マニュアル・ドキュメントです。PHPマニュアルは内容も細かいですし私としては読みやすいですし、ユーザー同士の意見交換もなされていたりして確実な情報が必ず載っているものです。何かあったら必ずPHPマニュアルで仕様を確認して検証していくようにしてください。
guest

回答2

0

requireの前は出力される、そのあとは出力されないとなるとどこかでexit()なりdie()なりで処理が終了しているのかもしれませんが、提示内容からはわかりません。
まずは1つずつコメントアウトしていってどこが原因か確かめてみては?

投稿2018/11/07 07:57

m.ts10806

総合スコア80765

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

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

0

自己解決

読み込みファイルの内容の見落としでした。ありがとうございました。

投稿2018/11/07 07:57

romukuro0328

総合スコア15

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

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

m.ts10806

2018/11/07 07:59

あ、すみません。自己解決にされると思ってなかったので回答におこしてしまいました。
romukuro0328

2018/11/07 08:01

あ、こちらこそteratailに慣れてなくてすれ違ってしまい申し訳ないです(汗
m.ts10806

2018/11/07 08:02

いえいえ。解決につながり、今後の理解につながったようで何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問