読者です 読者をやめる 読者になる 読者になる

phpとか

自分用備忘録なので、自分が分かる程度にしか書いてません。

【Laravel】 Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

laravelを始めようと思い、下記コマンドでテーブル作成しようとしたらタイトルのエラー発生。

php artisan migrate

公式に書いてありました。

データベース:マイグレーション 5.4 Laravel

/app/Http/Providers/AppServiceProvider.php内を下記に修正。

public function boot()
{
    Schema::defaultStringLength(191);
}

もしくは、データベースの「innodb_large_prefix」オプションを有効にする


Unity5の教科書 (Entertainment&IDEA)

Unity5の教科書 (Entertainment&IDEA)

formの二重送信 html

なぜか画像アップロードできる画面で、アップしたのにリンク切れのものがあるとの連絡があり、
画像が消える可能性を1日調べてようやく原因がわかりました。

formの二重送信でした。


送信ボタンを二回押す可能性なんて考えもしませんでした。
ソース追ったりログ追ったりばかりじゃなくて、
ユーザ目線で考えなきゃダメですね・・・

なので、submit後に送信ボタンをdisableに。
戻るリンクも押されたくないので、disable用のclassをaddClassして、clickイベントでreturn false。
しかし、なぜか戻れる。

画像アップロード中も同様にaddClassしていて、その時はclickイベントにちゃんと入るのに、
submit後だとイベントに入らない・・・

原因はまだ不明ですが、addClass時に下記の処理を追加で行い、イベント発火はなくなりました。

$('.test').css('pointer-events', 'none');



Unity5の教科書 (Entertainment&IDEA)

Unity5の教科書 (Entertainment&IDEA)

特定URL時のみ、basic認証

管理画面が同一サイトの/adminとかで、ip制限はしないけどbasic認証は入れとく。
かつ、再起動はさせたくない。

という仕様を実装することになりました。
下記のブログ様を参考にさせていただきました。ありがとうございます。

【cakePHP】.htaccessでmod_rewriteを使いつつ特定のURLをBASIC認証なしにする | ぼくの答えはいつもNo…そしてYes!

apache再起動OKなら、httpd.confにlocatoinディレクティブとか書いてすぐ終わるんですが、
今回はダメとのことなので.htaccessに下記を追記することで対応しました。

fuelphpなので、filesディテクティブとかで物理パスを指定できなかったため。

SetEnvIf Request_URI "/admin*" noauth
AuthUserFile /var/www/.htpasswd
AuthName "Input your ID and Password."
AuthType Basic
require valid-user
Satisfy any
Order Deny,Allow
Deny from all
allow from env=!noauth


下記で一旦全拒否。

Order Deny,Allow
Deny from all

Satisfy anyで、下記のどちらかの場合、許可する。という感じです。

  • require valid-user(basic認証突破)
  • allow from env=!noauth(/adminでない。)



Unity5の教科書 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)

Unity5の教科書 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)

IE11で、dropできない jquery

ページにドロップ用の箱を作って、そこにファイルを投げるとアップロードできるという、
よくあるものを作っていたんですが、
IE11で確認したら、ドロップが出来ない。

drop用の箱にwidthを明示的に指定しないといけないらしいです。
下記のブログ様を参考にさせていただきました。

先人の知恵は素晴らしいですね。感謝です。

mariyudu.hatenablog.com



Unity5の教科書 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)

Unity5の教科書 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)

SSLチェック 警告対策

SSL設定後に以下のサイトでチェック & 修正したことのメモ。

https://cryptoreport.websecurity.symantec.com/checker/views/certCheck.jsp

【警告】

Warnings TLS1.2

Warnings SSLv3

This server is vulnerable to:Poodle (SSLv3)

httpd.confに以下追記

httpdのバージョンが2.4未満

SSLProtocol All -SSLv2 -SSLv3

or

SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2


※上記どちらも同じ意味(SSLv2,SSLv3を無効化して、TLS追加)

httpdのバージョンが2.4以上

SSLProtocol All -SSLv3

Info BEAST

無視する。

対策として RC4暗号をサポートする必要があるが、この暗号は度々脆弱性が報告されているため、サポートするべきではない。設定してしまうと判定はBに下がる。

Warnings RC4

ssl.confの以下部分を以下のように(RC4無効化)
RC4以外の部分については適弁

SSLCipherSuite ALL:!SSLv2:!SSLv3:!EXP!MD5!RC4!ADH!DSS!RSA:+HIGH:!eNULL:!aNULL
  • !は暗号スイートを使わせない。
  • -は暗号スイートを削除する。後ろで追加すれば使用することも可能
  • +は暗号スイートの追加。

スマートフォンを除く多くの携帯電話等の端末においてはAESや3DESがサポートされておらず、RC4を含む暗号スイートをすべて無効化した場合、携帯電話等の端末からのHTTPSによるアクセスができなくなる可能性があり



Unity5の教科書 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)

Unity5の教科書 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)

AWS 再起動後のElasticIP再割り当て

全く大したことないことなんですが、嵌ったのでメモします。

EC2-Classicのインスタンスを再起動(停止→開始)すると、eipの紐づけが解除されるようです。(EC2-VPCインスタンスの場合は確か大丈夫)

再割り当てしようとEC2ダッシュボードのElasticIP画面で、IPを選択して、「アドレスの関連付け」を選択

インスタンス」と「プライベート IP」を入力して「関連付け」をクリックしたら、
以下のエラーが・・・


The parameter 'privateIpAddress' may not be used in combination with a non-VPC instance



検索してもでてこない・・・
結局、「インスタンス」だけ入力したらいけました。


作成されるインスタンスの種類
※EC2ダッシュボードの「アカウントの属性」で「EC2」しかないと、EC2-Classicのインスタンスが作成されます。
※「VPN」しかない場合、「EC2-VPC」で作成される。

EC2-ClassicのインスタンスにEIPを割り当てようとすると、上記の現象が発生。

どうやら「プライベート IP」の入力は「EC2-VPCインスタンスだけのようですね。
EC2スコープのEIPの割り当てのときはテキストボックス出さないようにしてくれればいいのに。


Unity5の教科書 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)

Unity5の教科書 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)

AWS ボリューム容量増加手順

ルートデバイスでない、アタッチしていたボリュームの使用容量が99%になってしまったので、ボリュームの容量を増やしました。

以下、簡単にですが手順です。

1.インスタンスの停止

2.該当ボリュームの決定

AWSの管理画面にて、EC2ダッシュボードのインスタンスを選択。
インスタンス一覧が表示されるので、該当のインスタンをクリックすると、
下の「説明」にアタッチされているボリュームが表示されます。

該当ボリュームがどれか分からない場合は、以下で確認。

df -ah

表示例

Filesystem            Size  Used Avail Use% Mounted on
/dev/xvda1            7.9G  1.1G  6.8G  13% /
proc                     0     0     0   -  /proc
sysfs                    0     0     0   -  /sys
devpts                   0     0     0   -  /dev/pts
tmpfs                 829M     0  829M   0% /dev/shm
/dev/xvdf              50G   47G  634M 99% /product
none                     0     0     0   -  /proc/sys/fs/binfmt_misc

上記の場合だと、/product/のデバイスがいっぱいなので、
該当のボリュームは/dev/xvdfになります。

※公式によると、先ほどのAWS管理画面だとsvdfなのに、サーバ内で見るとxvdfってこともあるようです。

3.ボリュームのスナップショット作成

4.スナップショットから新しいボリュームを作成

※作成したスナップショットのステータスが[completed] に変わるのを待ちます。
※この作成時にボリュームのサイズを増やします。

5.該当ボリュームをデタッチする

6.新ボリュームをアタッチする

7.インスタンスを再起動

8.マウント

lsblk

上記で、追加したはずのボリュームがない場合、もともとマウントされていたディレクトリをマウントします。
今回の場合、以下のような感じです。

*アタッチした新ボリューム

手順2と同様に、AWS管理画面のインスタンス画面から、インスタンスについている新ボリュームを確認してください。


mkdir /product
mount /dev/xvdf(=「*アタッチした新ボリューム」) /product

9.ボリューム容量が増加しているか確認

df -ah
容量が増えていない場合、ファイルシステムの拡張が必要です。

【公式】
docs.aws.amazon.com

まずは新ボリュームのファイルシステムがなんなのか確認します。

sudo file -s /dev/*
※以下はext2ext3、および ext4の手順です。違うファイルシステムの場合は上記公式サイトをご参照ください。