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

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

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

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

Q&A

解決済

2回答

7214閲覧

request body の生データの取得(multipart/form-data)

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2017/03/17 00:16

検証のため、multipart/form-dataで投稿したPOSTの生データを確認したいのですが、php で確認する方法はあるのでしょうか?

php://input

php://input は読み込み専用のストリームで、 リクエストの body 部から生のデータを読み込むことができます。 POST リクエストの場合は $HTTP_RAW_POST_DATA よりも php://input を使うのが望ましいでしょう。php.ini ディレクティブの設定に依存しないからです。 さらに、$HTTP_RAW_POST_DATA がデフォルトで設定されない場合は、 always_populate_raw_post_data を有効にするよりも $HTTP_RAW_POST_DATA を使うほうがメモリの消費量が少なくなるでしょう。 php://input は、 enctype="multipart/form-data" に対しては使用できません

とあり、php://inputで取得出来ないことは確認できたのですが、取得できる方法が分かりませんでした。

パケットを拾うことも検討していますが、できればphpで対応したいと考えています。
$_POST で加工後(?)は確認できるのため、何らか方法があるのではないかと思っているのですが。。。
方法があれば、教えてください。
よろしくお願いします。

環境:
XAMPP
Apache 2.4.23
PHP 7.0.13 (VC14 X86 32bit thread safe) + PEAR
Windows7

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

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

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

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

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

guest

回答2

0

ベストアンサー

PHP 5.4.0からは、enable_post_data_readingというパラメータをoffに設定すると、php://inputで生のPOSTボディを読み取れるようです。この場合、$_POSTや$_FILEは使えません。

投稿2017/03/17 01:54

編集2017/03/17 02:04
ikedas

総合スコア4306

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

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

退会済みユーザー

退会済みユーザー

2017/03/17 02:16

おぉ!こんなのあったんですね。 PHP_INI_PERDIR なので、検証時に php.ini 切り替えないといけないっぽいのが手間ですが、今回の目的にはぴったりでした。 大変助かりました。ありがとうございます。 無事、問題点が切り分けられました。
退会済みユーザー

退会済みユーザー

2017/03/17 02:55

.htaccess に php_value enable_post_data_reading Off を追加することでも確認できました。 ini 書き替えより、こっちのほうが、少しだけ楽ですね。 ありがとうございました。
guest

0

調べてみた感じ.htaccessなどでcontent-typeをみながら
調整をしないとできないみたいです
PHP単体でやるのは難しそうですね

投稿2017/03/17 01:15

yambejp

総合スコア114738

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

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

退会済みユーザー

退会済みユーザー

2017/03/17 02:18

通常運用の php でやるのはやっぱり無理っぽいですね。。。 検証環境であれば、ini の変更で対応できそうです。 アドバイス、ありがとうございます。
退会済みユーザー

退会済みユーザー

2017/03/17 02:52

.htaccess に php_value enable_post_data_reading Off を追加することで、確認できました。 ありがとうございました。
yambejp

2017/03/17 02:58

.htaccessをいじれるなら SetEnvIf content-type (multipart/form-data)(.*) MULTIPART_FORMDATA=true RequestHeader unset content-type env=MULTIPART_FORMDATA などで対応するという紹介をされるサイトが多いみたいですね (試してないので動くかどうかはわかりません、あしからず)
退会済みユーザー

退会済みユーザー

2017/03/17 03:13

.htaccess は普段あまり触らないので、正しいか分かりませんが 記載いただいた内容を追記したところ、無事動作しました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問