apacheログの場所とフォーマット

httpdにアクセスがあった場合やエラーがあった場合、ログに保存される

場所は以下にあります。
var/log/httpd/access_log

アクセスしようとしたら、permission denied! 何?

とりあえず、アクセス権を変更します。
[vagrant@localhost ~]$ sudo chmod 777 /var/log/httpd/

var/log/httpd/に入れるようになりました。
access_logとerror_logがあります。

access_log-yyyymmddから見てみましょう。

192.168.35.1 - - [25/Nov/2018:20:48:18 +0900] "GET /login HTTP/1.1" 404 282 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
192.168.35.1 - - [25/Nov/2018:20:48:20 +0900] "GET /favicon.ico HTTP/1.1" 404 288 "http://192.168.35.10/login" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
192.168.35.1 - - [25/Nov/2018:20:48:59 +0900] "GET / HTTP/1.1" 200 142 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"

ログフォーマット

%h %l %u %t \"%r/" %>s %b \"%{refferer}i"\" /"%{user-agent}i"

%h リモートホスト:192.168.35.1
%l リモートログ名、mod_identモジュールがロードされており、IdentityCheckディレクティブがOnになっている場合のみ表示。それ以外の場合は『-』と表示。:-
%u リモートユーザ:-
%t リクエストを受信した時刻:25/Nov/2018:20:48:18 +0900
%r リクエストの最初の行:GET /login HTTP/1.1
%>s %sはステータスコード。内部でリダイレクトされた場合でも元々のステータスコードを出力。%>sはリダイレクトされた場合最後のステータスコードを出力。:404
%b HTTPヘッダを除くレスポンスのバイト数:282
%{referer}i サーバが受信したリクエストヘッダのReferer:-
${user-agent}i サーバが受信したリクエストヘッダのUser-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36

/etc/httpd/conf/httpd.confの497行目に記載があります。

#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

なるほどー そういうこと

ブラウザの横幅が変わった時の複数画像表示

横幅320pxの画像を1枚表示
viewportはinitial-scale=1.0とする

<!DOCTYPE html>
<html lang="ja">
<head>
	 <meta charset="UTF-8">
	 <title>画像の縮小</title>
         <meta name="viewport" content="initial-scale=1.0,width=device-width">
<style>
	.center {
		text-align:center;
	}
</style>
</head>
<body>
  <div class="center">
	<img src="img/cat.jpeg">
  </div>
</body>
</html>

PC版:画像よりも広いブラウザで閲覧
当然、ブラウザの横幅におさまる

PC版:画像よりも狭いブラウザで閲覧
ブラウザに収まらない 例:287pxのブラウザでみてみる

mobile版:画像よりも狭いブラウザで閲覧
view-portを設定しているので、画面幅で表示される

画像を2枚にします

<body>
  <div class="center">
	<img src="img/cat.jpeg">
	<img src="img/frog.jpeg">
  </div>
</body>

PC版:複数画像よりも広いブラウザで閲覧

PC版:複数画像よりも狭いブラウザで閲覧
収まらないので、改行されて表示される

mobile版
収まらないので、改行されて表示される

ブラウザ幅に合わせて画像サイズを自動調整したい

<head>
	 <meta charset="UTF-8">
	 <title>画像の縮小</title>
	 <meta name="viewport" content="initial-scale=1.0,width=device-width">
<style>
	.center {
		text-align:center;
	}
	.center img {
		width:45%;
	}
</style>
</head>
<body>
  <div class="center">
	<img src="img/cat.jpeg">
	<img src="img/frog.jpeg">
  </div>
</body>

widthを%で指定すれば、ブラウザサイズに合わせて自動縮小される。

ただ、これ、画像が可変だと、例えば3マイになったらあかんやん。。

phpで文頭半角ドット(.)を正規表現(preg_match)

まず文章を用意します。
test.txt

.Linuxは無料です。あなたの時間に価値が無いなら。
Jamie Zawinski

1行ずつ正規表現でみていき、文頭に半角ドットがあった場合は、エラーをアラートメッセージを出します。

ini_set('mbstring.internal_encoding' , 'UTF-8');
$file = fopen("test.txt", "r");

if($file){
	while($line = fgets($file)){
		if(preg_match('/^./', $line)){
			echo "文頭に半角ドットが含まれています". "<br>";
		} else {
			echo $line . "<br>";
		}	
	}
}

fclose($file);

なに!? 半角ドットがエスケープされていない。

if($file){
	while($line = fgets($file)){
		if(preg_match('/^\./', $line)){
			echo "文頭に半角ドットが含まれています". "<br>";
		} else {
			echo $line . "<br>";
		}	
	}
}

出来たー

phpでif文で1行ずつ取得して出力する

まずテキストファイルを作成します。
test.txt

Linuxは無料です。あなたの時間に価値が無いなら。
Jamie Zawinski

phpで1行ずつ読み込む

ini_set('mbstring.internal_encoding' , 'UTF-8');
$file = fopen("test.txt", "r");

if($file){
	while($line = fgets($file)){
		echo $line . "<br>";
	}
}

fclose($file);
?>

続いて、正規表現で、「半角ドット(.)」「半角スペース( )」「ダブルクォート(“)」が含まれていた場合の処理をやりたいと思います。

バッチ処理(英語ではBatch proccessing)とは

今更感がありますが。。
バッチ処理:英語ではBatch proccessing

– 一つの流れのプログラムを順次実行すること。
– 予め定められた処理を一度に行う。

PC起動時の処理などもバッチ処理という。
というこは、クローンタブで時間を定めて処理することだけをバッチ処理とは言わない、もっと広義な意味を含めているようですな。

ざっくりというと、まとめて処理ですが、場面によって微妙に違いますね。

Mysql “ENCLOSED BY”

mysqlのENCLOSED BYって何?

mysql5.6のリファレンスマニュアルを覗いてみます。
LOAD DATE INFILE構文
optionallyでENCLOSED BY ‘char’と記載があります。

LOAD DATA INFILEは、高速にテキストファイルからテーブルに行を読み取る。
TSVやCSVからMySQLにロードする方法なのね。

サンプルのコマンドを見てみましょう。

mysql> SET character_set_server= utf8mb4;
mysql> SET NAMES utf8mb4;
mysql> use databasename
mysql>  LOAD DATA INFILE 'hoge.CSV' INTO TABLE foo
    ->  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    ->  ( @dummy, @dummy, @dummy, @dummy, @dummy, @dummy)
    ->  SET created_at = CURRENT_TIMESTAMP;

LOAD DATA INFILE でファイルを読み込んで、INTO TABLEで指定したデータベースに値を入れてますね。

まずデータを用意します。配当利回りトップのデータにしておきましょう。dividen.csvで保存します。

/home/vagrantにdividen.csvを保存します。
/home/vagrant/dividen.csvの状態

続いて、databaseを作ります。
mysql> create database equity;

mysql> use equity;
Database changed

mysql> create table dividen(
-> code int,
-> name varchar(30),
-> yeild float
-> );
Query OK, 0 rows affected (0.29 sec)

コードはこれでいいのかな?

LOAD DATA INFILE '/home/vagrant/dividen.csv' INTO TABLE dividen
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY ''
(code, name, yeild)

では行きましょう。

mysql> LOAD DATA INFILE '/home/vagrant/dividen.csv' INTO TABLE dividen
    -> FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY ''
    -> (code, name, yeild);
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

なにいいいいいいいいいいいいいいいいいい

だが、使い方は解った^^

windowsでのSequel Proの使い方

Sequel ProとはMySQLの管理ツール
phpMyAdminのようなものだと思ってよいでしょう。

まず、公式サイトに行ってみましょう。
Sequel Pro

なんかホットケーキみたいになってますね。
4つ特徴の記載があります。
full mysql support
flexible connectivity
perfect web development companion
easy installation

あれ、Downloadが osx 10.6 or higherとなっていて、macのみですな。Windowsはどうすればいいのでしょう?

sequel pro windowsで探してみます。
Sequel Pro Windows – Is it available yet?
The answer is no. There’s no Sequel Pro on Windows.
なにいいいいいいいいいいいいいいいい

これは。。。
まあ、macはunix系なので納得と言えば納得ですが。。ひどいですね。

ssh接続コマンドのオプション -L, -N

コマンドラインにて以下のように打った時

ssh -N -L hogehoge foofoo

-p ポート番号
接続に使用するポート番号を指定

-l ユーザー名
接続に使用するユーザ名を指定

-L リモート側ソケットに与えられたローカル(クライアント)ホスト上の指定のTCPポートまたはUnixソケットが、与えられたリモートホスト上のポートに転送されるよう指定する。ローカル側で、TCPポートにlisten用のソケットを割り当てることにより行われる。

-N リモートコマンドを実行しない。

オプションはほかにも、 -1, -2, -4, -6 など色々ある模様。
うーん、ややこしーーーー

AWS cloudfrontによるアクセスログの解析

AWS cloudfrontによるアクセスログの解析をしたい

まずS3にバケットを作成します
バケット名は適当にaccess-logdataとします。

続いてcloudfrontを開きます

あれ、なんか英語だ。。 

Select a delivery method for your content
Create a web distribution if you want to:なのでWebを選択

Create Distribution
– origin domain name, origin path?
 

なんだこれは。。
viewer protocol policy, allowed http methodなど細かく設定できるようです。
すげーなこれは。

Amazon CloudFrontとは?

AWS CoudFrontは、CDNサービス
DDos軽減のため、Shield, S3のオリジンとしてELB、edgeなどと連携

DDos攻撃とは、複数のコンピュータから標的のサーバに、ネットワークを介した大量の処理要求を送ることでサービスを停止させてしまう攻撃。

— フラッド型
プロトコルを攻略して大量データを送り付けることで、攻撃対象が処理できない状態に持ち込む

— 脆弱性型
サーバやアプリケーションの脆弱性を利用して不正処理を行わせる

F5アタック:httpリクエストはキャッシュを保存せずに情報をリクエストできる