ステップアップ備忘録

学習用備忘録

画像をアップロードする掲示板を作る

今回はドットインストールの画像アップロードの掲示板作成の項目から。
気になるところや引っかかったところを重点的に。

ファイルのアップロード 


  • enctype ="multipart/form-data"
    →form要素のエンコード(符号化)のタイプを指定する(method属性がpostの場合のみ)
  • "multipart/form-data" → フォームにファイルを送信する機能がある場合指定
  • "applocation/x-www-form-urlencoded" → すべての文字をエンコードする
  • "text/plain"→ スペースの部分のみ「 + 」に変換し、その他の特殊文字は変換しない

uploadメソッド(アップロードの流れ)


  • try catchで例外処理の条件を作成

    • try → アップロード時のチェック
      1. 画像保存時のタイプチェック→ 画像の種類によってPHP側の命令が変わる
      2. 保存処理
      3. サムネイル作成
    • catch → エラーメッセージの表示
    • 処理の終了後にindex.phpを再読み込み(リロード)すると二重投稿になるのでリダイレクトを設定する
      • header命令 → リダイレクトの設定
    • HTTP_HOST→ クライアント側の接続している仮想ホスト
  • 投稿されたファイルの検証

    • $_FILES → PHPで定義済みの変数
    • $_FILES['image']['error'] → ファイルアップロードに関するエラーコードを格納している
    • ファイルをセットした際にチェックし、定数(文字列)で返す
  • 画像の種類の判別

    • exif→撮影条件のメタデータを追加保存できる画像ファイル形式の規格
    • 保存された画像の確認
      確認の際に『warning failed to open stream:permission denied』というようなエラーメッセージが。
      これは書き込み権限がないよというメッセージなので、chmodで権限変更をかけたけれどまたはじかれる。
      調べたらSELinuxが絡んでいることが判明、setenforceでpermissiveモードに変更したらはじかれずにすんだ。
  • サムネイルの作成

    • サムネイル画像の高さ
      → 元画像の高さ×サムネイル画像の横幅/元画像の横幅
    • imagecreatetruecolor → truecolorイメージの新規作成
  • 画像リストの作成

    • basename
      → ファイルまたはディレクトリへのパスを含む文字列を受け取って、最後にある名前の部分を返す(入力文字列をそのまま単純に処理するので、実際のファイルシステムを確認したり、".." のようなパスを気にすることはない。
    • ul → 順序のないリストを表示
    • ol → 意味のある順序のリストを表示
    • li → リスト項目の記述(ulやolの子要素)ulの中で使う場合はリスト項目となって互いに関連するが、それ以外に配置された場合はほかのli要素とは無関係になる。
  • セッションの開始
    • session → サーバ側に保存されるデータ(キーと値)
    • cookie → サーバ側から発行され、ブラウザ(クライアント)側に保存されるデータ(キーと値)
    • session_start → セッション管理に必要な一意の値(sessionID)を自動発行する。

まとめ


学習を続けている中で、『何をやっているか』はだいぶ理解ができるようになってきたので、次は『なぜそうするか(なぜそのやり方を用いるのか)』を理解できるようにしていきたいと思う。 SELinuxに悩まされることが多々あるので、どういうときにこの機能が絡んでくるのかをきちんと理解してすぐに検討がつくようにしたいと思う。