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

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

ただいまの
回答率

88.04%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,728

score 21

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 もコピーして適用後テスト → 問題なし)

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • eripong

    2015/09/18 10:48

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

    キャンセル

  • nezume

    2015/09/18 11:09

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

    キャンセル

  • eripong

    2015/09/18 12:28

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

    キャンセル

回答 1

check解決した方法

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/09/18 12:52

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

    キャンセル

  • 2015/09/18 13:01

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

    キャンセル

  • 2015/09/18 13:04

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

    キャンセル

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

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る