WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

とくにPHPというわけではありません。ちょっとしたテクニックなので紹介しておきます。ちなみにここを参考(というか丸パクリですが)にさせていただきました。


$date = new Zend_Date();
$date->setTimestamp(ceil($date->getTimestamp() / (10 * 60)) * (10 * 60));


サンプルはZend_Dateを使ってますが、UNIXTIMESTAMPなら何でもいけます。時間や日付の繰り上げがあるので、分だけに注目しないで、TImestamp全体でやるのがキモでしょうか。ceilを変えてやれば切り捨ても可能です。いつもの通り、言われてみれば単純ですが、皆さん賢いですなあ。

    このエントリーをはてなブックマークに追加

飛び飛びの連番が入ったテーブルで、ある数字より大きい空き番号を探す、という要件があり悩みました。

こちらのサイトを参考にさせていただき、なんと、一回のSQLでいけました。

下記の例では4より大きな空き番号を探してます。


SELECT
main.entry_number+1 AS start
FROM point_history AS main
LEFT JOIN entry AS r ON main.entry_number + 1 = r.entry_number
WHERE r.entry_number IS NULL
AND main.entry_number > 4
ORDER BY main.entry_number


答えを知ればそれほどむずかしい事ではないですが、思いつかくて悔しかったです。

    このエントリーをはてなブックマークに追加

Smartyでいつもわからなくなるのでメモです。

配列のキーに動的にアクセする時は


{$form[$key]->render() nofilter}


こんな感じでアクセスできますが、このキーの部分に連結した文字列を使いたい時の方法がはっきりマニュアルに出てません。

正解は下記のとおりです

{$form["{$key}_date"]->render() nofilter}


ポイントはダブルクオーテーションで囲むこと。省略するとエラーになります。

関係ありませんが、Smartyの日本語版マニュアルが`2011-01-10`から更新されてません。英語のマニュアルを見るようにしましょう。

    このエントリーをはてなブックマークに追加

何度も調べてるので備忘録でメモします。

■特定のURLに来たアクセスをIPアドレスごとにグルーピングしてカウントする


zcat access_log.23.gz | grep -E 'GET [^"]+/path/to' | cut -d ' ' -f 1 | sort | uniq -c | sort -n


zcatは圧縮したままcat、grepのEオプションは拡張正規表現、cutは半角スペース(dオプション)で区切って1つ目(fオプション)のみを抜き出す。sortで並び替えた後、uniqで同じ物をまとめカウント付き(cオプション)で表示、改めてsortで数の昇順で並び替えてます。

■特定のURLのアクセスログを特定のデータのみ表示

zcat access_log.23.gz | grep -E 'GET [^"]+/path/to' | cut -d ' ' -f 4,5,1,6,7,8,11


cutコマンドはdオプションで区切り文字(デリミタ)を指定し、fオプションでn番目を指定して、特定の文字のみを抜き出すコマンドです。

■おまけ - 複数のログにまたがって検索

zcat access_log.23.gz access_log.22.gz access_log.21.gz


zcat(cat)はスペース区切りで複数のファイルを一気に出力可能です。


    このエントリーをはてなブックマークに追加

スクリプトはなんでもいいのですが、試していたのがjmeterなのでそのままサンプルを出します。


/bin/sh /home/admin/apache-jmeter-2.10/bin/jmeter -n -Jlogname="/tmp/jmeter.log" -Jdomain="www.example.com" -t /home/admin/jmeter/sample.jmx
このコマンドは問題なく動くとします。でこれを動的に実行します。jmeter.shを下記のように書いてこれを実行

#!/bin/sh
cmd="/bin/sh /home/admin/apache-jmeter-2.10/bin/jmeter -n -Jlogname=\"/tmp/jmeter.log\" -Jdomain=\"www.example.com\" -t /home/admin/jmeter/sample.jmx"
$cmd

./jmeter.sh

Created the tree successfully using /home/admin/jmeter/sample.jmx
Starting the test @ Tue Dec 17 14:08:26 JST 2013 (1387256906227)
Waiting for possible shutdown message on port 4445
Tidying up ... @ Tue Dec 17 14:08:26 JST 2013 (1387256906790)
... end of run
動いたようにみえるのですが実は引数がうまくわたっていません。実行先のスクリプト「/home/admin/apache-jmeter-2.10/bin/jmeter」では引数がクオート記号付きで解釈されそのまま処理されます。つまり上記の例だとjmeterに渡されるJdomainは「www.example.com」ではなく「"www.example.com"」が渡されて「http://"www.example.com"」にアクセスを試みようとしています。

クオート記号を引数に持つコマンドを動的に実行するには「eval」を使います。

#!/bin/sh
cmd="/bin/sh /home/admin/apache-jmeter-2.10/bin/jmeter -n -Jlogname=\"/tmp/jmeter.log\" -Jdomain=\"www.example.com\" -t /home/admin/jmeter/sample.jmx"
eval $cmd
当たり前ですが渡された物はそのまま実行されますので、不特定多数が値を渡せる場所に使う場合は注意して下さい。

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。