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

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

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

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

Q&A

解決済

2回答

1345閲覧

Codeigniter+Xdebug+Eclipse POSTデータを受け取ったコントローラのデバックがしたい

nkrchan

総合スコア12

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

0グッド

0クリップ

投稿2020/09/01 08:40

編集2020/09/02 01:40

ご教示お願いいたします。

前提・実現したいこと

【環境】
codeigniter
Eclipse
Xdebug

コントローラから別のコントローラにデータをPOST送信し、Xdebugで追いたいです。

発生している問題・エラーメッセージ

下記のソースでいうと、post_receive.phpの処理をデバックしたいです。
今の状況だとpost_submit.phpからデバックを始めて、POST送信してそのまま処理が終了し(post_receive.phpにデバッガが遷移してくれない)、ブラウザにpost_receive.phpからのレスポンスが表示されます。

POSTする側のコントローラ

php

1//post_submit.php 2 3class Post_submit extends CI_Controller 4{ 5 public function __construct() { 6 7 parent::__construct(); 8 9 } 10 11 public function index() { 12 13 // 送信データ 14 $data = array( 15 'greeting' => 'hello', 16 ); 17 18 // JSON形式に変換 19 $data = json_encode($data); 20 21 // ストリームコンテキストのオプションを作成 22 $options = array( 23 // HTTPコンテキストオプションをセット 24 'http' => array( 25 'method'=> 'POST', 26 'header'=> 'Content-type: application/json; charset=UTF-8', //JSON形式で表示 27 'content' => $data 28 ) 29 ); 30 31 // ストリームコンテキストの作成 32 $context = stream_context_create($options); 33 34 // POST送信 35 $contents = file_get_contents('http://localhost/post_receive/index', false, $context); 36 37 //レスポンスを表示 38 echo $contents; 39 40 } 41}

POSTされたデータを受け取る側のコントローラ

php

1//post_receive.php 2 3class Post_receive extends CI_Controller 4{ 5 public function __construct() { 6 7 parent::__construct(); 8 9 } 10 11 public function index() { 12 13 // POST の生データの読み込む 14 $json_string = file_get_contents('php://input'); 15 16 // JSON エンコードされた文字列を PHP の変数に変換 17 $contents = json_decode($json_string, true); 18 19         //レスポンスを表示 20         print_r($contents); 21 22 } 23}

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/09/01 09:01

そもそもXDebugモジュールをつかったデバッグのやり方はどのくらい理解しているのでしょう? モジュールの組み込みは完了していて、php.iniなども修正済みでしょうか。
nkrchan

2020/09/01 09:41

説明が下手で申し訳ありません。 モジュールの組み込みは完了していて、php.iniも修正済みです。
guest

回答2

0

Eclipse上でブレークポイントを設定して、
変数のウォッチ式など仕込めば、
JSONであろうとなかろうと関係ない気がしますが、
何が問題なのか、
今ひとつ伝わってきません。

投稿2020/09/01 09:04

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nkrchan

2020/09/02 01:44

ご指摘ありがとうございます。 自分の中で混乱していて、問題点がはっきりしていなかったようです。 htmlでPOST送信するフォームを作ったことで実現したいことが叶いましたので 自己解決とさせていただきました。ありがとうございました。
guest

0

自己解決

codeigniter上でコントローラ→別のコントローラにPOSTでデータを送り、それをXdebugで追いたいと思っていました。ただcontrollerから別のcontrollerのメソッドの呼び出しは通常しないようであったのと、POST送信した後にデバッガが別のコントローラに遷移しませんでした(自分の設定のせいかもしれません)。そこで、以下のソースのようにhtmlにPOSTを送信するフォームを作ったところ、POST送信後の処理までデバッガで追うことができました。

PHP

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>HTMLファイルからPOSTJSONデータを送信する</title> 6<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 7 8<script type="text/javascript"> 9 $(function(){ 10 $("#response").html("Response Values"); 11 12 $("#button").click( function(){ 13 var url = $("#url_post").val(); 14 15 var JSONdata = { 16 value1: $("#value1").val(), 17 value2: $("#value2").val() 18 }; 19 20 alert(JSON.stringify(JSONdata)); 21 22 $.ajax({ 23 type : 'post', 24 url : url, 25 data : JSON.stringify(JSONdata), 26 contentType: 'application/JSON', 27 dataType : 'JSON', 28 scriptCharset: 'utf-8', 29 success : function(data) { 30 31 // Success 32 alert("success"); 33 alert(JSON.stringify(data)); 34 $("#response").html(JSON.stringify(data)); 35 }, 36 error : function(data) { 37 38 // Error 39 alert("error"); 40 alert(JSON.stringify(data)); 41 $("#response").html(JSON.stringify(data)); 42 } 43 }); 44 }) 45 }) 46</script> 47 48</head> 49<body> 50 <h1>HTMLファイルからPOSTJSONデータを送信する</h1> 51 <p>URL: <input type="text" id="url_post" name="url" size="100" value="http://localhost/sumafo_app_service/entry_user_info"></p> 52 <p>value1: <input type="text" id="value1" size="30" value="値1"></p> 53 <p>value2: <input type="text" id="value2" size="30" value="値2"></p> 54 <p><button id="button" type="button">submit</button></p> 55 <textarea id="response" cols=120 rows=10 disabled></textarea> 56</body> 57</html>

投稿2020/09/02 01:34

nkrchan

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問