0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

クソゲーのキャラクターシート登録所みたいなものを作成する4

Posted at

おさらい

もう誰も横浜の果てで涙という名の同窓会だけ見えないRPGのキャラシ保管庫を作成しています。

一旦デプロイ。

デプロイは過去のQiitaを見つつやってました。
ありがとう自分用メモ!

以前に作成したプロジェクトとほぼ同じ仕組みにしました。
こんな感じです。

パス 目的
~/PROJ/ リモートリポジトリ
~/USER.xsrv.jp/git/PROJ.git/ ベアリポジトリ
~/USER.xsrv.jp/public_html/PROJ リモートリポジトリのpublicへのエイリアス

ベアリポジトリをローカルのgit remoteの指定先にしつつ、/home/USER/USER.xsrv.jp/git/PROJ.git/hooks/posts-receiveみたいなやつを作成して公開用リモートリポジトリにもpushされるようにしています。

画像をどうにかする。

キャラクターシートを登録したり表示したりというのはできてます。
あとは画像をどうにかするだけ。

微妙に苦手意識があるのですが……頑張ります。

プレビュー

ローカルの画像を取得して一時的にURLを作成し、imgのsrcを書き換えればとりあえずプレビューのようなことはできるみたいです。
リロードで飛ぶらしいですがまあリロードさせない制御は入れているので(別にどうでも)いいかなと思っています。

こんな感じでできました。

    // 画像プレビュー
    function photoKazaru(file)
    {
        document.f.photo.src = window.URL.createObjectURL(file);
    }

input type="file"のonchangeでphotoKazaruを呼び出してます。

アップロード

なんかいろいろ見たんですが……めんどくせええええ!!1!
ってなりました。

そんなときに知ったのがDataURI。

プレビューのところで参照したサイトで紹介されていて、要するに画像データを文字列で表現するらしいです。

これをDBにぶち込めばいいのでは?と考えて、まあ実装もさくっとできたんですが。

データベースのレコードに何十KBとかってテキストを放り込むのはどうかなとやってから思いました。

LONGTEXTは最大4GBまで行けるらしいから容量的な問題はないでしょうけど……。

そもそもそれなら画像のバイナリ突っ込むのと変わらないですよね。
で、バイナリ取得できるならファイルに書き込む

別の方法を試す

いろいろ調べてたらアップロードする方法も理解できてきたので、地道な感じで実現しました。
Validate? なにそれおいしいの?

バイナリファイルの中身をそっくりサーバーに移し替える作業をアップロードと言っていいのかどうかは若干気になるところです。

CharacterController.php
        // 画像を保存
        // 画像が選択されていれば保存する
        foreach ($_FILES as $file)
        {
            // 各種情報の取得
            $tmp_name = $file['tmp_name'];
            $size = $file['size'];
            $ext = pathinfo($file['name'], PATHINFO_EXTENSION);

            if (exif_imagetype($tmp_name) && $size < 120000)
            {
                $f = fopen($tmp_name, 'rb');
                $b = fread($f, $size);
                $imgpath = '/img/upload/' . $id_rand . '.' . $ext;
                $savepath = $_SERVER['DOCUMENT_ROOT'] . $imgpath;
                file_put_contents($savepath, $b);
            }
        }

ファイル名はどうせ一意になるので識別IDとして利用しているid_randにしました。
すでにある場合は上書きします。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?