縮小画像の作成

縮小画像の作成
#12 縮小画像を作る (2)
http://dotinstall.com/lessons/upload_image_php/4512

を元に
元画像の縦横比率を保ったまま、縮小画像を生成
まず、サムネイル画像の高さを作る
縦横比をそのまま使う
$thumbheight = round($height * THUMNAIL /$width);
round() は浮動小数点をまとめる関数
http://php.net/manual/ja/function.round.php
を参考
小数点以下四捨五入と考えるとわかりやすい
これで、サイズ取得はできたので、次に画像作成
$thumbImage = imagecreatetuecolor(THUMBNAIL_WIDTH, $thumbnailheight);
imagecreatetruecolor() は
イメージを新規作成する関数
http://manual.xwd.jp/function.imagecreatetruecolor.html
に解説あり
imagecreatetruecolor() の引数には
横幅、高さを指定する
これらを使った事例としては
No29.大きさを変えようっ(サムネイル) —- GDライブラリ[3]
http://masago.kir.jp/php20040218.php
をみると分かりやすい
imagecopyresampled()は
再サンプリングを行いイメージの一部をコピー、伸縮する
これは
http://phpspot.net/php/man/php/function.imagecopyresampled.html

を参考にする
今回は
imagecopyresampled(
$thumbnailheight,
$srcImage,
0,0,
0,0,
72,0,
$thumbnailheight,
$width,
$height
);
これを引数の解説つきにすると
imagecopyresampled(
//コピー先の画像
$thumbnailheight,
//コピー元の画像
$srcImage,
//コピー先のx、y座標
0,0,
//コピー元のx、y座標
0,0,
//コピー先の幅、
72,
//コピー先の高さ
$thumbnailheight,
//コピー元の幅
$width,
//コピー元の高さ
$height
);
となる

列セレクト、行セレクトの基本

列セレクト、行セレクトの基本
列のセレクトには
self コマンドを使う
今回使うのは
サンプルデータの
data01
使うスクリプトは shel01
self は、引数に対象となる列
最後に対象ファイル名を指定するだけ
data01 の中身をみたら
11111 22222 33333 44444 55555 66666 77777 88888
というのが30行並んでいる
で、self 2 5 8 data01
としたら、2列名、5列目、8列目
が表示された
最初、2ぎょうめ、5行目、8行目だと思っていたけど
間違いだったようだ
スペースで区切ると、列を指定して表示になる
次に、
self 3/8 data01
というように / で区切ると、
3~8行目の列を表示ということになる
self NF-5 NF data01
とすると
NFは最終列という意味なので
NF-5 なら最終列から5つ前の列
NFは最終列を表示
という意味になる
self 2.1.3 data01
だと、
2列目の
1文字目から
3文字
という意味になる
列をセレクトして表示する self 以外にも
列を削除して表示する delf がある
delf 3 data01
と実行すると
3列目以外が表示される
delf NF-3/NF data01
だと
NFは最終列なので
NF-3/NF
なら最後から4列目から最終列まで削除して表示
という意味になる
このように、列の表示なら
self
delf
というコマンドが便利
行を操作して表示するなら
head
tail
などのコマンドを使うことが多い

画像掲示板で縮小画像作成

画像掲示板で縮小画像作成
#11 縮小画像を作る (1)
http://dotinstall.com/lessons/upload_image_php/4511
を参考にサムネイル画像の作成を実装
まず、元画像の幅と高さを取得
$width = $imagesize[0];
$height = $imagesize[1];
縮小画像の作成は
ユーザ定数 THUMBNAIL_WIDTH と比較することで
判定して作成する
if($width > THUMBNAIL_WIDTH){
で比較できる
サムネイル画像をつくる手順は
元ファイルを画像タイプにより作成
新しいサイズを作成
縮小画像の作成
縮小画像を保存
という手順で行われる
元ファイルの画像タイプの判別は
switch の画像判定を使えばOK
switch($imagesize[‘mime’]){
case ‘image/gif’:
$srcImage = imagecreatefromgif($imageFilePath);
break;
case ‘image/jpeg’:
$srcImage = imagecreatefromjpeg($imageFilePath);
break;
case ‘image/png’:
$srcImage = imagecreatefrompng($imageFilePath);
break;
}
とする
switch() の判定のところで使っている関数の
imagecreatefromgif()
http://phpspot.net/php/man/php/function.imagecreatefromgif.html
imagecreatefromjpeg()
http://phpspot.net/php/man/php/function.imagecreatefromjpeg.html
imagecreatefrompng()
http://manual.xwd.jp/function.imagecreatefrompng.html
は、画像タイプの自動判別に使える関数

画像掲示板のファイル保存

画像掲示板のファイル保存
#10 元画像を保存する
http://dotinstall.com/lessons/upload_image_php/4510
を参考に、画像掲示板に投稿するファイルの名前を決定し
一時保存された元ファイルを保存フォルダに格納する処理を実装
ファイル名は重複しないファイル名をつけていくので
乱数や暗号化を使うようにする
現在時刻を元にすれば、ほぼ重複しないので
$imagefilename = sha1(time().mt_rand()).$ext;
とする
$ext は switch で得た拡張子
time().mt_rand()は、現在時刻+乱数で
これを sha1() でハッシュしている
実行結果の動作確認のため
var_dump() を使う
var_dump($imagefilename);
で確認できたら、これはコメントアウト
これで、ファイル名はできたから
次に元画像の保存
これは添付ファイルをそこにコピーすればOK
$fileimagePath = IMAGES_DIR .’/’.$imagefilename;
とすればOK
IMAGES_DIR は cofig.php で決めたユーザ定数
PHPでは . で javascript の+みたいに文字列の連結ができる
これで、ファイルの保存パスもOK
次はファイルアップロード
アップロードには
move_upload_file() を使う
$rs = move_uploaded_file($_FILES[‘image’][‘tmp_name’],$fileimagePath);
アップロードが失敗することがあるので
そのときの処理を if で記述
if(!rs){
echo “could not upload !”;
exit;
}
とする
ここまでできたら、動作確認
chmod 777 images/
でパーミッション変更
一度ファイルをアップロードして
images ディレクトリにファイルができれば成功

Open usb Tukubai

Open usb Tukubai
日経Linus を参考にシェルスクリプトの勉強です
今回は
Open usb Tukubai コマンドを使います
Open usb Tukubai に関しては
http://nlinux.jp/2013/08/article/
にアクセスし、
書籍に乗っているパスワードを入力することで
サンプルソースなどとともに
Open usb Tukubai
そして
ビジネス用の usb Tukubai がダウンロードできます
usb Tukubai に関しては
無料期間がきまっているため、今回は
Open usb Tukubai のみで行ってみます
まず、
tokukikaku_script/open-usp-tukubai-20130417.tar.bz2
をクリックして
Open usb Tukubai をダウンロード
cd ダウンロード
tar jxvf open-usp-tukubai-20130417.tar.bz2
で展開して
cd open-usp-tukubai-20130417/
sudo make install
でインストールできます
今回、インストールしたのは ubuntu 12/10 64bit
Open usb Tukubai はどのディストリビューションでも
うごくとのことなので、まずは Ubuntu で試してみました
また、サンプルが
tokukikaku_script/sample.tar.gz
にあるので、これを見ながら学習すると効率よく学ぶことができます

リソース状態推移のグラフ表示

リソース状態推移のグラフ表示
sysstat のデータをグラフ化してみることができるのが
isag
Ubuntu でインストールするには
sudo apt-get install isag
isag
で起動
起動したら
Data Source:
で見たいファイルを選択
次に、Chart から表示するシステム状況を選択
CPU Utilization を選ぶと
CPU使用状態をみることができる
いろいろとグラフ表示できるので
http://www.volny.cz/linux_monitor/isag/screens.html
のスクリーンショットも参考に

リソース状況の把握

リソース状況の把握
リソース不足を事前に検知することでトラブルを防止できる
リソースの使用率の推移を把握できているなら
ハードウェアの増設、交換も検討できる
このとき、抑えておくポイントは
リソース使用率の定期取得
リソース状態推移のグラフィカル表示
となる
リソース使用率の定期取得は
sysstat を使う
Ubuntu でのインストールは
sudo apt-get install sysstat
次に、定期取得設定
Ubuntu ではデフォルト設定で定期取得が無効なので
sudo vim /etc/default/sysstat

ENABLED=”false”

ENABLED=”true”
にして保存
sudo service sysstat start
で起動
定期取得された情報は
/var/log/sysstat/
に保存される
sa21
というように
sa日付
という形で保存されるのがバイナリーファイル
もうひとつsar日付というファイルが後でできるけど
こちらは、1日分のシステム状況をまとめた
テキストファイルになる
テキストファイルなので、エディタで確認可能
バイナリーファイルのほうは
sar コマンドに -r オプションをつければ確認できる
sar -f /var/log/sysstat/sa21
とすれば
Linux 3.5.0-36-generic (snowpool-Prime-Series) 2013年07月21日 _x86_64_ (8 CPU)
20時37分14秒 LINUX RESTART
というように内容をみれる
ファイル名を指定せず
sar -r
とすると
当日の情報が表示される
また、オプションで表示する時間の限定も可能
-s オプションで開始時刻
-e オプションで終了時刻
を指定可能
-u オプションを指定することで、
CPUリソース情報の取得もできる
CPUリソース取得のときに注意するべきは
その計算式
100 -(%idle + %iowait)
となる
各CPU情報の
(%user ~ %idle) は百分率の値で
合計すると100になる
そのうち $idle と %iowait

CPUが使用されていない時間の割合になる
このため、算出される値は、CPU使用率となる
この時間帯の平均使用率が低いなら
CPU負荷は少ないということになる
今回は
20:00~21:00のCPU使用率を見たいので
sar -u -f /var/log/sysstat/sa21 -s 20:00:00 -e 21:00:00

logwatch の定期レポート設定

logwatch の定期レポート設定
logwatch には
ユーザーに定期的にレポートを送信する機能がある
logwatch の定期レポートは
cron で実行されて
ユーザのメールボックスにおくられる
cron への登録は
apt-get でインストールしたときに自動で行われるので
これは設定する必要はない
この設定は
view /etc/cron.daily/00logwatch
で確認できる
ファイルの中の
#execute
/usr/sbin/logwatch –output mail
によって毎日メールがおくられてくる
この送られてくるレポートは、設定により
変えることができる
そのままの状態では設定ファイルがないので
sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/
でファイルをコピーして
sudo vim /etc/logwatch/conf/logwatch.conf
でファイルを編集する
これは、情報がありすぎると逆にわかりにくくなってしまうから
Service のところに
– をつければレポート対象から除外できるようになる
除外方法の例については
http://vps.zok.jp/logwatch/
を参考にさせていただきました
TmpDir = /var/cache/logwatch
というように一時ファイルの置き場が指定してあるけど
元々は存在しないので
sudo mkdir /var/cache/logwatch
でディレクトリを作成
これで、設定ができたので
実行しようとしたけど
mail コマンドがなかったので
http://d.hatena.ne.jp/Fiore/20080227/1204110665
を参考に
sudo apt-get install mailutils
でインストール
which mail

/usr/bin/mail
となっていればOK
これで、ようやく実行可能
sudo logwatch –Output mail
sudo mail
とすると
“/var/mail/root”: 4 messages 1 new 3 unread
U 1 Cron Daemon 日 7月 21 18: 29/1283 Cron N 4 logwatch@snowpool- 日 7月 21 19: 122/8506 Logwatch for snowpool-Pri
というように、メール一覧がでるので
Logwatch for
と書かれている4を入力
すると、メールになって送られたレポートを見ることができる
画面スクロールしたいのなら
スペースキーを押し
終了したいのなら q で終わらせることができる

log を整形して情報をまとめる logwatch

log を整形して情報をまとめる
Ubuntu の場合
log整形ツールの logwatch を使うことで
ログを集計し
結果を比較的見やすい状態に加工してレポートできる
また、期間
表示するレポートの種類指定も可能
期間と種類を指定すれば
トラブル時に必要な情報だけ絞り込んでレポートを表示できる
Ubuntu での インストールは
sudo apt-get install logwatch
途中でダイアログが出て、インストールするタイプを聞かれるので、今回はローカルのみを選択
まず、
sudo logwatch
を実行
デフォルトでは
logwatch は標準出力に、昨日のログを集計した
レポートを出力する
sudo ログのセクションをみると
sudo コマンドを使って root 権限で
どのコマンドを何回実行したのか確認できる
レポート作成期間、ログの種類の絞り込みは
logwatch のオプションを使う
レポート作成期間は、
–range オプションで指定
今日のログのレポートにするなら
sudo logwatch –range today
昨日のログレポートなら
sudo logwatch –range yesterday
2日前のログレポートなら
sudo logwatch –range ‘-2 days’
というように、-の後に何日前か指定
日付を指定するなら
sudo logwatch –range 2013/07/20
というように、直接指定でOK
取得できる全ての期間にしたいのなら
sudo logwatch –range all
3日前から今日まで、としたいのなら
sudo logwatch –range ‘since -3 days’
というように、
since -遡りたい日数 days
詳細な日数などの指定については
sudo logwatch –range help
で確認できる
logwatch のレポートの見方に関しては
Logwatchのレポートの見方
http://ameblo.jp/itboy/entry-10051133432.html
を参考にさせていただきました
logwatch では、取得できるログの種類を
サービス単位で扱う
サービスの種類は
ll /usr/share/logwatch/scripts/services/
で確認可能
ここにあるファイル名がサービス名になる
logwatch で過去1週間の
pam_unix
sshd
のログレポートを表示するなら
logwatch –Service pam_unix –Service sshd –range ‘since -7 days’
というようになる

有用なログをみつけるポイント

有用なログをみつけるポイント
まず、ログを絞り込むために使う情報は
ログの日時と出力元
トラブルあが発生した時間帯
問題のあるプログラム
ホストに検討がついているのなら、これらの情報で
ログを絞り込める
次に扱う情報が
ログのプライオリティ
プライオリティの種類は
debug
デバッグ情報
info
正常な状態で出力される情報
notice
正常だけど、重要な情報
warn
警告
err
エラー
crit
致命的エラー
alert
緊急に対応が必要なエラー
emerg
システムを使用不能
となる
err 以上のプライオリティのログの場合
トラブル原因に関係している可能性が高い
emerg > alert > crit > err >warn > notice > info > debug
という順番になり
一番深刻なのが
emerg
デフォルトでプライオリティが表示されるログファイル
そして
設定を変更してプライオリティを表示する設定にしたログファイルを使って、プライオリティで絞り込むことができる
そして、msg の情報からでも推測ができる
トラブルが発生している場合
msg の部分にもエラーメッセージが出力されることがある
error
fail(failure, faied) などのキーワードで
ログを絞り込むとエラー関連ログを絞り込みやすくなる
ログをキーワードで絞り込むには
エディタの機能を使うと便利
/ で検索してもいいけど
view コマンドでなら
:g/キーワード/
とすることで
キーワードに一致する行だけを表示することができる
もし、error というメッセージがある行だけを表示したいのなら
view /var/log/auth.log
で開いている場合、
:g/error/
とすれば、 error のある行だけ表示されるので見やすくなる
たくさんある場合、qを押すと元の画面に戻れる