PHPでプログラミングしてますが、最近知った事をメモ。
まぁ使ってる人は当たり前のように使ってて、
そんなに真新しい知識ではないと思いますが
何となく書きたくなったのでメモメモ。
ユーザーからの入力された値が数値かどうかという
チェックをしてたんですが、その時に使ってたのが
▼ 正規表現
if(!preg_match(‘/^[0-9]+$/’, $num))
{
echo “数値じゃないよ!”;
}
んで、最近知ったのが・・・
is_numeric
ですよねー 知ってますよねー 、、、
一応、使い方として、
if(is_numeric($num) == false)
{
echo “数値じゃないよ!”;
}
何か正規表現使うよりコーディングがスッキリしますね!
何で今まで知らなかったんだろうと思うくらい!
ちなみに処理速度はというと、is_numericの方がpreg_matchより
約3倍早いそうです。 スゲー!
で、どう違うのか調べてみました。
あくまでis_numericは「数値っぽいもの」として認識してる
ようで穴もあるそうです。
・ 0xabcd
・ 12.34
・ 12e34
・ -.12e-34
↑上記の値でもtrueを返すようです。
処理速度が速いには理由があったんですね。
is_numericとpreg_matchのどちらを使うかは
賛否両論ありそうですね。
まぁ上記であげた値が通ってしまっても
あまり処理やセキュリティ上、影響があるかは分からない
ので私は速度が速いis_numericを今後とも使っていこうと
思います。
ただガッチリと数値のみ!ってフィルターをかけたいのなら
preg_matchでチェックしといた方が無難ですね。
一長一短ですね。
ケースバイケースで使い分けるのもいいかもしれませんね。
でもやっぱり調べてみるもんだなあ
同じ様な処理でも微妙に違うもんですね。
勉強になりました。
![]()
にほんブログ村
Archive for the Category ◊ Linux ◊
ちょっとした事を調べたいんだけど
やるとなると意外と作業が大変!
という事がありまして・・・
何がやりたかったのかと言うと、
「hoge」(仮)という文字が入っている
ファイルが、どこに?、どれだけあるか?
というのを調べたかった。
まぁ一個一個ファイルを開いていけば
特定する事も出来るけど、ファイル数が
多いとかなり大変!
しかもサブディレクトリも含めるとなると
限りなくダルい作業になるのは間違いなし!
と言う事で探してみると、
「grep」というコマンドがあった。
パターンマッチ!
こういうのがあったんですね。
使い方は簡単!
grep にサブディレクトリ以下を見に行く
オプション「-r」を追加し、検索したい文字列
と対象のディレクトリを指定する。
# grep -r “hoge” ./var/www/html/*
これだけでOK!
これで/var/www/html以下にある「hoge」
が含まれるファイルが検出される。
ファイルをPHPだけに絞りたければ
# grep -r “hoge” ./var/www/html/*.php
これはかなり作業は短縮された。
他人がフレームワークで作成したプログラム
だとdefine定義がどこで、どれだけ使われ
てるか把握出来ない時があるから大変。
grepの別の使い方として
■メールログからAccess deniedの文字列を含む行を画面に表示
# grep ‘Access denied’ /var/log/maillog
■上の例の逆。Access deniedを含まない行を画面に表示
# grep -v ‘Access denied’ /var/log/maillog
■/etc/passwdよりfalse及びnologinを含む行を表示
# grep -e false -e nologin /etc/passwd
色々使い道はあるので覚えておいて
損は無いと思う。
![]()
にほんブログ村
niftyクラウドでロードバランサーサービスを
使ってみようと思ってるけど自分で構築する
かサービスを利用するか考え中。
ラウンドロビンとリーストコネクションの2種類が
あるらしいけど、リーストコネクションだろうな。
やっぱ。
てかラウンドロビンならDNS側でも設定出来る
し、一方のサーバーが落ちても順番に見に
いっちゃうから安定稼働としてはどうだろうと
思う。
リーストコネクションもソフトウェア「Pound」を
使ってロードバランシングしてハートビートで
稼働状態を監視してダウンしているサーバー
に流さなければ同じような機能を実装出来そう
だけどな~。
問題は帯域なんだよね。
こればっかりはこちらで何とも出来ないから
困る。
高い料金を払って帯域を確保し、niftyサービス
のロードバランサーを利用するか、それとも
サーバー1台追加してそれを自分でロード
バランサー仕様に構築するか。
コスト面で考えると後者なんだけどね。
もう少し、冗長化、帯域、ヘルスチェック等の
要因も踏まえて再度検討してみようっと。
MyHomePage : Coover
![]()
http://aiks.info/
![]()
にほんブログ村
Flashで出来たswfファイルの中身を変更出来るオープンソース「swfmill」
swfに組み込まれたアクションスクリプトをxmlに変換し、再度swfに変換出来る
便利なツールです。
xmlに変換されたアクションスクリプトはテキストエディタで修正が出来て、しかも
画像データも英数字の羅列で書かれてるので、bace64でエンコードした画像を
その羅列の箇所と入れ替えてswfに戻してあげると画像を入れ替えたswfファイルを
作成する事も出来る。
ちなみに自分がやりたかった事はswfの中の画像を入れ替えたかったんですが上手くいかない。
swfがFlash Lite 1.1で作られたものだから上手くxmlに変換されてないっぽい。
Flash Lite 1.1に対応したpatchもあてたけどうまくいかないなぁ。
レイアウトは崩れるし、アクションスクリプトは機能しない。
アクションスクリプトが複雑に書かれてるせいかな。
色々問題はありそうだけどちょこちょこ修正していこうと思う。
MyHomePage : Coover
![]()
http://aiks.info/
![]()
にほんブログ村
今、2台のサーバーでMySQLレプリケーションをしています。
ちなみにOSはCentOS5。
サーバーの動作監視はフリーソフトのnagiosで監視してて
停止するとメールでお知らせする設定になってます。
レプリケーションに対して監視という意味ではこれでは不十分でした。 orz
スレーブサーバーでレプリケーションが停止してもメールは来ない!
何故ってMySQL自体は落ちてないから!
これは気付けなかったのでいろいろ調べた結果、監視スクリプトを作っていた
サイトを参考にしてみた。
コマンドで
# /usr/bin/mysql -u root -pパスワード -e ‘show slave status \G’
↑って打つとmysqlに入らなくてもステータスが表示されるので、これを上手く使ってます。
レプリケーションが正常に動いていればSlave_IO_RunningとSlave_SQL_Runningが
yesになってます。どちらか片っぽがnoだとちゃんと動いていません。
Slave_IO_RunningとSlave_SQL_Runningの値がyesでなければ
show slave statusで取得できるステータス一覧をメールで送信するスクリプト。
参考サイト
MYSQLレプリケーション設定
※nkf で文字コードを変換してるのでnkfが入ってなければインストール。
yum が使えれば # yum install nkf で楽々インストール出来ます。
上記のサイトの一番したに監視スクリプトが書いてあったので、自分なりにタイトルや本文を編集出来て
Cc:を付けて送信出来るように編集
– replck.sh –
#!/bin/sh
to_mail=***@test.co.jp ← 送信先アドレス
mail_cc_1=***@docomo.ne.jp ← Cc: アドレス指定
subject=ここにメールタイトルを入れる
subject=`echo $subject | nkf -j` ← メールタイトルのエンコード
PASSWORD=”PASSWD”
eval “`/usr/bin/mysql -u root -p${PASSWORD} -e ‘show slave status \G’ | sed -ne ‘s/: \(.*\)/=”\1″/p’ `”
if [ "$?${Slave_IO_Running}${Slave_SQL_Running}" != "0YesYes" ]; then
/usr/bin/mysql -u root -p”${PASSWORD}” -e ‘show slave status \G’ |mail -s $subject $to_mail -c $mail_cc_1 -c $mail_cc_2 -c << HONBUN
ここにメール本文を入れる
HONBUN
exit 1
fi
----------------------------
Cc: を増やすにはmail_cc_2,mail_cc_3と増やして、その分、mail -c も増やさないとといけない
やり方なのでなんか効率よくないかも。
もっといいやり方があるかもしれませんが今の自分にはこれが精一杯。
もう少しスマートに出来るやり方があればコメント下さい。よろしくお願いします。
あとはこのスクリプトをCronで動かせばレプリケーションの監視は大丈夫なはず!
メール来るか確認したいけど、今スレーブ止めるとヤバイのでやめとこう・・
MyHomePage : Coover
![]()
http://aiks.info/
