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

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

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

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

Q&A

解決済

1回答

3880閲覧

[PHP] POST されたデータの内容が変わってしまう

nezume

総合スコア21

PHP

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

0グッド

1クリップ

投稿2015/09/17 02:54

編集2015/09/18 01:11

HTML のフォームから POST したデータが、受け側の PHP スクリプトで正常に取得できないことがあります。
フォームから画像を送信しようとして、正常に動作しなかったのが不具合(バグ?)を発見したきっかけでした。

環境
CentOS 7.1
Apache 2.4.6 (RPM インストール)
PHP 5.6.12 (ソースインストール)

memory_limit
post_max_size
upload_max_filesize

これらの値は、上から 128MB、100MB、50MB に設定し、
Apache の LimitRequestBody は設定していません(= デフォルトの無制限が適用)。

上記環境下で、アップロード用スクリプトのテストを 800KB の画像で行ったところ、
$_FILES['hoge']['error'] に UPLOAD_ERR_PARTIAL が返ってきました。
そこで色々試してみると 8KB 弱程度のファイルなら正常にアップロードできるようです。
もっとも、これでは実用に耐えませんので、原因追究の為色々と試してたみた結果、
ファイルの有無にかかわらず、フォームの内容が 8KB を超えるあたりで
POST した内容が正常に取得できないことが判明しました。
ここの動作が面白く(ぉぃ)、リロードをかける度に値が変化します(変化しない場合もあります)。
変化というか、正常なサイズが取れていない感じです。
送信データを hogehogehogehoge(以下 8KB 分並べる)とすると、ある時は

hogehogehogeh

だったり、またある時は

hogehog

だったりというイメージです。
但し、$_SERVER['CONTENT_LENGTH'] は POST したサイズが正常に入っています。
なお、上記スクリプトを別のサーバで走らせてみたところ、動作はいたって正常でした。
また、同様の内容を perl で記述した場合も正常でした(画像もアップロード可能)。

こういった現象に遭遇した方、いらっしゃいますでしょうか?
また、いらっしゃいましたらどのように対処されましたか?

[2015/09/18 追記]
質問のあった php.ini の当該個所のコピーです。

post_max_size = 100M
upload_max_filesize = 80M
memory_limit = 128M

なお、上記記述のある php.ini(動作が異常なサーバの方の設定ファイル)を、
正常に動作しているサーバに適用して走らせてみましたが、
全く問題なく動作しました。
(php.ini 適用後テスト → 問題なし。念の為 httpd.conf もコピーして適用後テスト → 問題なし)

一体どこに原因があるんでしょうねぇ……。

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

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

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

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

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

eripong

2015/09/17 04:12 編集

どこかにエラーログは出ていませんか?また、関係する要素はそれだけでしょうか?AWSを使っているなど、ブラウザからサーバまでの環境周りが関係ありそうです。tcpdumpなどでパケットキャプチャしてもヒントになるかも知れません。
nezume

2015/09/17 05:28

エラーログは見つかりませんでした。 また、AWS 等の外部サーバを使っているわけではなく、 ローカル環境(同じ部屋にサーバ、クライアントがある)でテストしています。 ダンプの結果も、正常に動作しているサーバのそれと比べてみましたが、 取り立てて気になるような差異はありませんでした。 この質問をポストする前に、自分でもブラウザからサーバ間で なんかあるのか? と思い、perl でテストしてみたのですが、それは正常に 全てのデータが受け取れていましたので、PHP が怪しいとにらんではいるのですが…。 (その割に $_SERVER['CONTENT_LENGTH'] は正常なのが……)
eripong

2015/09/17 07:09

なるほど、それは不思議です。
KoichiSugiyama

2015/09/17 07:41

実際にサーバに設置しているphp.ini(の該当箇所)をアップしてみてください。何か記述のミスがあるとかだと、識者から指摘をもらえると思います。
nezume

2015/09/17 07:58

私一人ではなく、複数の人間でそれこそ穴が開くほど見まくっていますので、記述ミスの可能性は低いと考えています。ともあれ、今日は現場を離れてしまいましたので、後日該当箇所をアップしたいと思います。
KoichiSugiyama

2015/09/17 08:03

では<?php phpinfo();?>の実行結果等でも確認されているということですね。
nezume

2015/09/17 08:06

確認済みです。半ばヤケクソ(笑)で該当スクリプトの中で、ini_get() を実行し memory_limit、post_max_size、upload_max_filesize それぞれの値が設定どおりだというのも確認しました
eripong

2015/09/18 01:22

正常動作するサーバのPHPなどは同じバージョンですか?
nezume

2015/09/18 01:25

当初は異なっていましたが、現在は原因追究するため同一バージョン(同じ tar ボール)から、同一オプションでコンパイルしています
eripong

2015/09/18 01:48

なるほど。取得できないサイズに変動があるということでしたが、パケットキャプチャのレベルで見て、変動しない長さなど、無いでしょうか?
nezume

2015/09/18 02:09

多少の変動(数バイト)はありますが、boundary の文字列長が異なっている為なので、正常と思われます
eripong

2015/09/18 03:28

こうなってくると、straceなどでエラーが出てないか、不信など挙動や、正しく動くサーバとの比較などしたくなります。あるいは、やはりこうした状況の経験者の登場を待つかでしょうか。
guest

回答1

0

自己解決

理由はともあれ、解決しましたのでスレッドを閉めさせていただきます。

やったこと
・CentOS 7 の iso イメージを慎重に焼いた(笑)
・再インストール
・前回インストールした人間とは別の人間がインストール(但し手順書に準ずる)
以上です。

何が何やらワケがわかりませんが、$_POST、$FILES の中身が正常だった時は
ホッとしました。
皆さま、お騒がせしました m(
_)m

投稿2015/09/18 03:48

nezume

総合スコア21

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

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

eripong

2015/09/18 03:52

うーん。カーネルパラメータなどの差でしょうか?
nezume

2015/09/18 04:01

異常なサーバにインストールした iso イメージは、 正常なサーバにインストールした iso イメージより 若干バージョンが新しいものでした。 今回は正常なサーバの iso イメージを使用しました。 差異というとそれくらいしか思いつきません。 故に、心の中にものすごくもやもやーっとするものがあります。 解決したので、"気にしなければ勝ち"なんですがね……(^^;
nezume

2015/09/18 04:04

うあ、自己解決でも、"ベストアンサー"にしないと "解決済み"フラグ立たないのか……。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問