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

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

ただいまの
回答率

90.52%

  • PHP

    20288questions

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

  • HTML

    8932questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • HTTP

    544questions

    HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

formから画像をアップロードしたときのリクエストメッセージにあるバイナリを文字化けせずに確認する方法はありますか?

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 349

7968

score 201

2017.04.13 追記
最初、画像はbase64なのかと思い、タイトルと本文にbase64と記載していましたが、バイナリと教えて頂いたので、タイトルは変更しました。
本文はそのままです。(勘違いしたまま)


タイトルには、私の憶測も入っているので、(なに言ってんだ..こいつ)となっているかと思いますので、順を追って説明します。

現在、PHPでファイルをアップロードする方法を調べております。

まずは、理解を深めるためにリクエストメッセージがどのようになるのか確認したいと考えております。

そのために、下記のファイルを作成し、XAMPP環境で試しました。
※確認用のため、脆弱性対策とか一切考えてません。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
    <p>Pictures:
        <input type="file" name="pictures">
        <input type="submit" value="send">
    </p>
</form>
<?php
if(isset($_FILES['pictures'])) {
    $tmp = $_FILES['pictures']['tmp_name'];
    $dir = 'c:/xampp/htdocs/test/img/';
    $filename = $_FILES['pictures']['name'];
    move_uploaded_file($tmp, $dir . $filename);
    echo "<img src='img/$filename'>";
}
?>
</body>
</html>

下記はFirefoxのコンソールでリクエストメッセージを確認した画像です。

イメージ説明

リクエストメッセージのボディ部分にある画像ファイル?が文字化け?しています。
私の勝手な憶測ですが、ここにはbase64などでエンコードされた画像のテキストが入っているのかと思います。

下記のような感じ?

/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABQAAD/4QMZaHR0
cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1
TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5z
Om1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIw
MTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRp
b24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8x
LjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBl
L1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv
IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkI2QTFGMTIzMUYzMTExRTc5Rjg3QTdDNjky
略

base64というのはメールがbase64だから、リクエストメッセージもbase64なのかなという勝手な推測です...

私の確認の仕方がに問題があるのかもしれませんが、Fiddlerでも該当箇所が文字化けしており、Chromeのデベロッパーツールでは該当箇所は表示されませんでした。

文字化けせずに確認できる方法があれば、教えてください((_ _ (´ω` )ペコ

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+2

メールは本来テキストしか送れないので、base64のようにテキスト化して添付します。
httpはバイナリも送れるので、そのまま送ります。

「文字化けしないで確認する」というのは、リクエストを解析して画像として表示したいということですか?
なんのために?自分で送っているファイルなのに?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/04/13 19:50 編集

    回答ありがとうございます。
    なるほど、バイナリなんですね。

    PHPにはMIMEタイプを確認する関数がいくつかあります。
    その関数はどのようにMIMEタイプを判断しているのか調べていたところ、ファイルにはマジックナンバーがあることを知りました。

    マジックナンバーまとめ
    http://qiita.com/forestsource/items/15933888466ba9c3f048

    ということは、リクエストメッセージにもマジックナンバーが記載されているのかと推察しました。
    それを確かめたいです。
    実際にリクエストメッセージを確認すると、文字化けしていてどのような記載なのかわからず質問しました。

    下記のように画像ファイルの中身を偽装することもできるので、可能ならリクエストメッセージのバイナリをそのまま確認したいです。(バイナリについていまいち理解していないので、文章がおかしいかもしれません><)

    画像ファイルによるクロスサイト・スクリプティング(XSS)傾向と対策
    http://blog.tokumaru.org/2007/12/image-xss-summary.html

    キャンセル

  • 2017/04/13 20:15

    こちらから送るファイルなので、バイナリエディタなどで確認すれば良いのでは?

    キャンセル

  • 2017/04/13 20:27

    ローカル上にある画像ファイルを下記のオンラインバイナリエディタでマジックナンバーを確認しました。

    HexEd.it
    https://hexed.it/

    ただ、リクエストメッセージ上ではどんな感じなのか見たかったです...

    キャンセル

  • 2017/04/13 21:25

    winsharkでパケットをキャプチャしてみるといいですね。
    HTTPプロトコルが直接見られますので。

    キャンセル

  • 2017/04/13 22:25

    教えてくださり、ありがとうございます((_ _ (´ω` )ペコ
    Wiresharkを使ってみます。

    キャンセル

  • 2017/04/14 14:28 編集

    あ、間違えました。wiresharkでした(^ ^)。

    キャンセル

  • 2017/04/14 14:31 編集

    winsharkでググったら、wiresharkが出てきたので全然大丈夫です^^
    ちなみに、FiddlerにHexViewがあり、Hex表記ですが確認できました。
    質問する前にもHexViewでの表記を確認していましたが、base64だと思っており、文字化けしてるのかと誤解していました><
    お陰様で確認することができました。
    ありがとうございました((_ _ (´ω` )ペコ

    キャンセル

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

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

関連した質問

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

  • PHP

    20288questions

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

  • HTML

    8932questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • HTTP

    544questions

    HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

  • トップ
  • PHPに関する質問
  • formから画像をアップロードしたときのリクエストメッセージにあるバイナリを文字化けせずに確認する方法はありますか?