PHPでファイルアップロードに確認画面を挟む時

アップロードした一時ファイルは、PHPの実行が終わった時点で削除されてしまう。
よって、$_FILESを次画面に送ってもファイルがない。
よって、確認画面表示時には既にサーバーに仮アップして、完了後にしかるべき場所に移動、という方法がある。

index.php

<p>
								職務経歴書<br>
								<label><input id="select-file" style="display:none" type="file" onChange="file_selected()" name="filename"><input id="file-name" type="text" value="ファイルを選択してください" readonly="readonly" onclick="file_select()"></label><span id="message">選択されていません</span>
							</p>

confirm.php

<td>職務経歴書</td>
							<td>
								<?php
									if(!empty($_POST&#91;"filename"&#93;)){
									    echo $_POST&#91;"filename"&#93;; 
								    } else {
								        echo "-";
								    }   
							    ?>
								
							</td>

当然、これではあかん。。

CloudWatch Logs

CloudWatch Logs is a log monitoring service provided by AWS. Collect OS logs and application logs of EC2 instances and monitor them in real time.

Amazon CloudWatch is an application monitoring service that runs on AWS. Can use Amazon CloudWatch to gain visibility into resource utilization, application performance, and operation status across the system. Use these insights to respond and keep your application running smoothly.

With CloudWatch Logs, can mainly used for:
– Log accumulation (you can set the retention period)
– Specific character filtering
– Graph what matched the filter pattern
– Alert settings linked with Amazon SNS(Simple Notification Service)

CloudWatchの取り込みが1GBあたり91.2円、1GBあたりのアーカイブが3.96円。
あれ、これどーやって計算するんだろう。。
たとえば、データ量として大きくなりそうなのはELBだが、ELBでどれ位のボリュームでどれ位のデータ量になるんだろうか??

flush privileges

flush privileges
-> 権限の反映?
GRANT, REVOKE, or SET PASSWORDなどのステートメントでは必要ない??

手動で権限テーブルをリロードするには、FLUSH PRIVILEGESステートメントを発行?
ふーん、そうなのか。。

mysqlの権限設定

グローバルレベル
GRANT ALL ON *.* TO user;
GRANT SELECT, INSERT ON *.* TO user;

データベースレベル
GRANT ALL ON db_name.* TO user;
GRANT SELECT, INSERT ON mydb.* TO user;

テーブルレベル
GRANT ALL ON db_name.table_name TO user;
GRANT SELECT, INSERT ON db_name.mytbl TO user;

カラムレベル
GRANT SELECT (col1), INSERT (col1, col2) ON db_name.table_name TO user;

実際にやってみましょう。
mysql> create user saru@localhost identified by ‘monkey’;
Query OK, 0 rows affected (0.59 sec)

mysql> show grants for saru@localhost;
+————————————————————————————————————-+
| Grants for saru@localhost |
+————————————————————————————————————-+
| GRANT USAGE ON *.* TO ‘saru’@’localhost’ IDENTIFIED BY PASSWORD ‘*A5892368AE83685440A1E27D012306B073BDF5B7’ |
+————————————————————————————————————-+
1 row in set (0.09 sec)

mysql> grant create on *.* to saru@localhost;
Query OK, 0 rows affected (0.05 sec)

mysql> show grants for saru@localhost;
+————————————————————————————————————–+
| Grants for saru@localhost |
+————————————————————————————————————–+
| GRANT CREATE ON *.* TO ‘saru’@’localhost’ IDENTIFIED BY PASSWORD ‘*A5892368AE83685440A1E27D012306B073BDF5B7’ |
+————————————————————————————————————–+
1 row in set (0.00 sec)

なるほど、grant userの後に、grantで権限を付けるわけですね。
ちょっと感動しました。

RDSのエラーログ

cliでRDSのログを確認するには、describe-db-log-files

aws rds describe-db-log-files --db-instance-identifier rds001

jsonから、ログのみに変更することも可

aws rds describe-db-log-files --db-instance-identifier rds001 --filename-contains error --output text

エラーログはmysql-error-running.logという名前で1時間ごとに出力される。
エラーログの中身は download-db-log-file-portionというコマンドを使う。

aws rds download-db-log-file-portion --db-instance-identifier rds001 --log-file-name error/mysql-error-running.log.6

– Error logs are written to the mysql-error.log file.
– mysql-error.log is flushed every 5minutes.
– The flushed content is added to mysql-error-running.log
– mysql-error-running.log is rotated hourly.
– Rotaed logs are kept for 24 hours.
– Each log file has UTC time appended to the file name(% H of rotated UTC time)
– Writing to the error log is only performed at startup, at shutdown, and at error detection.

なんだこりゃ、超重要やんけ。

mysql show processlist

It is a command to view the list of currently running porcesses.
Used it to confirm that the batch is moving, or when didn’t get back a heavy query.

まず、show processlistとします。

mysql> show processlist
-> ;
+—-+——+———–+——+———+——+——-+——————+
| Id | User | Host | db | Command | Time | State | Info |
+—-+——+———–+——+———+——+——-+——————+
| 2 | root | localhost | demo | Query | 0 | init | show processlist |
+—-+——+———–+——+———+——+——-+——————+
1 row in set (0.21 sec)

続いて、別のユーザでログインしてみます。
mysql> show processlist;
+—-+——+———–+——+———+——+——-+——————+
| Id | User | Host | db | Command | Time | State | Info |
+—-+——+———–+——+———+——+——-+——————+
| 2 | root | localhost | demo | Query | 1 | init | show processlist |
| 3 | root | localhost | test | Sleep | 13 | | NULL |
+—-+——+———–+——+———+——+——-+——————+
2 rows in set (1.67 sec)

なるほど、状態が分かりますね。素晴らしい。

show grants

ユーザー権限の確認方法

show grants for [username]@[servername];

mysql> show grants for ‘root’@’localhost’;
+———————————————————————+
| Grants for root@localhost |
+———————————————————————+
| GRANT ALL PRIVILEGES ON *.* TO ‘root’@’localhost’ WITH GRANT OPTION |
| GRANT PROXY ON ”@” TO ‘root’@’localhost’ WITH GRANT OPTION |
+———————————————————————+
2 rows in set (0.05 sec)

mysql> show grants
-> ;
+———————————————————————+
| Grants for root@localhost |
+———————————————————————+
| GRANT ALL PRIVILEGES ON *.* TO ‘root’@’localhost’ WITH GRANT OPTION |
| GRANT PROXY ON ”@” TO ‘root’@’localhost’ WITH GRANT OPTION |
+———————————————————————+
2 rows in set (0.00 sec)

なるほどねー

Net::Amazon::S3::Signature::V4

cpanのサイトを見ます。
https://metacpan.org/pod/Net::Amazon::S3::Signature::V4Implementation

>Net::Amazon::S3::Signature::V4Implementation – Implements the Amazon Web Services signature version 4, AWS4-HMAC-SHA256

>This module signs an HTTP::Request to Amazon Web Services by appending an Authorization header. Amazon Web Services signature version 4, AWS4-HMAC-SHA256, is used.
なるほど、ヘッダね。
Net::Amazon::Signature::V4を使います。

use Net::Amazon::Signature::V4;

my $sig = Net::Amazon::signature::V4->new($access_key_id, $secret, $endpoint, $service);
my $req = HTTP::Request->parse( $request_string );
my $signed_req  $sig->sign($req);
...

ふむふむ、特に問題なさそうですね。。

とういか、AWSのSDK, CLIの使用に関するページだと、当然の如くperlはないな。ひどいな。。

Laravel 5’s Soft delete

Laravel 5’s Eloquent has a function called SoftDeletes that performs logical deletion instead of physically deleting data from a DB table.

If you do this soft delete, data will not be deleted from the table but it will not be able to be pulled by ordinary SELECT etc. It will behave the same as deleting it.
This function allows you to extract information once it is deleted, when it is needed again.

なるほどー、これ結構便利かも。

use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Eloquent {
	use SoftDeletes;

	protected $dates = ['deleted_at'];
}

モデルに上記のように記述を追加し、SoftDeletesを使えるようにする。削除された場合は、deleted_atカラムにタイムスタンプがセットされる。

なるほどね。

binlogの保存期間

– RDSのbinlogの保存期間はデフォルト値では、NULLになっている。

binlogの保存期間を変更する際は、call mysql.rds_set_configurationで変更する。ふむふむ。

mysql> call mysql.rds_set_configuration('binlog retention hours', 24);