PHPがセッションを保存するフォルダが存在しないとでる。windowsの場合、phpのあるフォルダにtmpフォルダを作ればよい。実際の場所はphpinfo()のでsession.save_pathで確認する
Author Archives: admin
1ファイルで提供されるzipソースコードライブラリ miniz
minizはC言語の1ファイル”miniz.c”で作られたZIPライブラリ。簡単にプロジェクトに組み込んで使うことができる。
使うには”miniz.c”をインクルードして使うが、すでに大きいプロジェクトの場合は、このファイルは普通にコンパイルして、minizの機能を利用するファイルでは、MINIZ_HEADER_FILE_ONLYを定義してからインクルードする。こうすればヘッダファイルとして振舞う。warningがひどいのでここではそうした。
VC++2005で試した。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// minizteston.cpp : Defines the entry point for the console application. // #include <stdio.h> #include <stdlib.h> #include <string.h> #define MINIZ_HEADER_FILE_ONLY #include "miniz.c" int main(int argc, char* argv[]) { const char* p0 = "ああああああああ会い言いいい言いいいいいいいいえwらうあおうぃうりおあうりあwらw" "fasfasjoiおいjふぁjふぉ位j羽得甥jふぉ位wふぁslkjfヵsjふぃおw3う398798478" "ふぉいじゃしjふぉいあ34893709877f809d7あおふぁえlkfじゃl;う" "asfjLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKruowiurw98787543jhakhfkjahkfhas" "fjaa9832747987979807亜0r7亜89ろいあうろぴうろ位あうウィルあwj"; uLong src_len = (uLong)strlen(p0); uLong cmp_len = compressBound(src_len); mz_uint8 *pCmp = (mz_uint8 *)malloc((size_t)cmp_len); int cmp_status = compress(pCmp, &cmp_len, (const unsigned char *)p0, src_len); if (cmp_status != Z_OK) { printf("compress() failed!\n"); } else { printf("Compressed from %u to %u bytes\n", src_len, cmp_len); } free(pCmp); return 0; } |
これは圧縮。あらかじめ全体をメモリで確保するので小さいサイズ向け。本体のサンプルではほかにもファイルを圧縮するものや、infalte、deflateを使って少しずつやる方法などがわかる。ただしファイルを直接圧縮する関数のファイル名引数がchar*なのでunicodeで困るかもしれない。
jQueryでハイライト
ここにあるjquery-highlight.jsをダウロードしてサーバに置いて以下のHTMLでハイライトできる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script> <script src="jquery-highlight.js"></script> <style type="text/css"> .highlight { background-color: yellow; } </style> <script> $(document).ready(function() { $("div").highlight("a", true); }); </script> </head> <body> <div class="desc">aaafawea3fSAtraetAwafaeawfwgeaw</div> <hr /> <div class="desc"><a href="http://www.example.com">http://www.example.com</a></div> </body> </html> |
スタイルシートの.highlightでスタイルを指定、hightlight()関数でハイライト、最初の引数はハイライトする文字列、2番目は大文字小文字を区別するならtrue。
PHPでサイトが重いときにもう少し待ってくださいhtmlを表示する
家サーバで遊んでいて、virtual hostをたくさん作ってサーバPCが重くなったときに、PHPで簡単なページを表示する方法。もっとまともな方法があると思うがここでは適当に作った。
最初にエラーのとき表示するHTMLを用意する。ここでは以下の物を作った。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <style type="text/css"> #main { background-color: #fcc; } </style> <title>サイトがビジー状態です</title> </head> <body> <div id="main"> <p> ただいまアクセスが集中しており、サイトがビジー状態です。 </p> <p> もう少し待ってからブラウザのリロードボタンをクリックしてください。 </p> </div> </body> </html> |
これを/phpGlobal/busy.htmlに保存する。ディレクトリは適当でいい。
次にPCが重いかどうかチェックするPHPを書く。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php checkMachineState(); function checkMachineState() { $a = @file_get_contents('/proc/loadavg'); if(!$a) { return; } $a = explode(' ',$a); if($a[0] <= 3) // if(false) { return; } header ('HTTP/1.0 503 Service Temporarily Unavailable'); require 'busy.html'; exit(); } ?> |
これを/phpGlobal/check.phpに保存する。
これはサイトの負荷が3を越えたらbusy.htmlを表示する。
つぎにapache2の設定ファイルapache2.confなどに以下の行を追加する。
1 |
php_value auto_prepend_file /phpGlobal/check.php |
これでapache2をリスタートすると、すべてのPHPの実行前にcheck.phpが実行される。
ただしこの方法だと文字コードによって化けることがあるし、その他にも問題があるかもしれない。POSTリクエストのときは処理したほうがいいと思われる。
PCの現在の負荷はtopコマンドの右上に表示されるのでそこで確認できる。
/proc ファイルシステム
/procは以下のファイルやフォルダは実際のファイルではなくカーネルが提供する擬似ファイル。
ファイルのようにアクセスすると、カーネルにアクセスし情報を取得できる。
擬似ファイルシステムにしておくと、プログラムからはインターフェースが統一される。
/proc/[数字]
数字はPID(プロセス毎につけられた番号)をあらわす、プロセスのいろいろな状態を知ることができる。
サーバーなどは起動時に自分のPIDをファイルに書き込んでいたりするので、そこからPIDを知ることができる。
apache2は/var/run/apache2.pidなどに自分のPIDを書き込む。
よって以下のようにして、apache2のプロセス状態を取得できる。
1 2 3 4 5 6 7 8 9 10 11 |
$ cat /proc/$(cat /var/run/apache2.pid)/status Name: apache2 State: S (sleeping) Tgid: 14846 Pid: 14846 ... Mems_allowed: 1 Mems_allowed_list: 0 voluntary_ctxt_switches: 248 nonvoluntary_ctxt_switches: 8 $ |
/proc/loadavg
CPUの使用率を表示する。uptimeコマンドなどで利用する。
ほかにもいろいろあるがこれらは man proc で知ることができる。
phpで処理にかかった時間を調べる
PHPやjavascriptで処理にかかった時間を計算する。
PHPの場合、まずいかの関数を用意する。これはpukiwikiからコピーした。
1 2 3 4 5 |
function getmicrotime() { list($usec, $sec) = explode(' ', microtime()); return ((float)$sec + (float)$usec); } |
microtime関数は、現在時刻をスペースで区切ったミリセカンドと、秒で返します。
explodeでスペースで区切った配列に変換し、それをlistで受けます。
listは右辺に配列をおいて代入できるPHP言語の組み込み機能です。
時間を測定したい処理の前に以下のようにSTART_MICROTIMEを定義します。
1 |
define('START_MICROTIME', getmicrotime()); |
defineは定数を定義できます。一度定義すると変更できないので便利です。
処理が終わったところで以下のようにして時間を計ります。
1 |
$taketime = sprintf('%01.03f', getmicrotime() - START_MICROTIME); |
書式文字’01.03f’は、以下のように解釈します
0 : 0で埋める。
1 : 最低1桁を表示する。
. : 浮動小数点の区切り
0 : 0で埋める。
3 : 3桁以上は切り捨て。小数点以下は前とは別解釈になる。
svnのレポジトリ全部から検索する
以前書いたやつだとうまくファイル名がわからないのでbashスクリプトを書いた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#!/bin/sh # if [ "$#" -ne 2 ]; then # echo "$0" SVNSERVER GREPARGS # exit 1 # fi SVNROOT=$1 shift GREPARGS=$@ # echo $GREPARGS if [ -z "$SVNROOT" ]; then echo "svn server is empty" exit 1; fi if [ -z "$GREPARGS" ]; then echo "grep args is empty" exit 1; fi # remove tailing slash SVNROOT=$(echo $SVNROOT | sed 's;/*$;;') # get all files in svn repository ALL=$(svn list -R $SVNROOT | awk '!/\/$/{print}' | sed "s;^;${SVNROOT}/;" | grep -i -e '\.cpp$' -e '\.c&' -e '\.h$') # echo $ALL # for each file in ALL for svnfile in $ALL; do # # echo $svnfile CONTENT="$(svn cat $svnfile | grep ${GREPARGS})" # grep succeed ? if [ $? -eq 0 ]; then # yes output result echo $svnfile echo $CONTENT fi done |
使い方
1 |
> ./svnsearchall svn://SERVER/PATH -i searchstring |
このスクリプトは*.cpp,*.c,*.hを固定でフィルタしている。
以下過去の記事:
svnレポジトリの中から全部を検索する。サーバーはserver、検索語句はaaa
1 |
$ svn list -R svn://server | awk '!/\/$/{print}' | sed 's;^;svn://server/;' | xargs -d \\n -n 1 --verbose svn cat |grep aaa |
以下、落書き
一つのコマンドにするのは大変だったので少しずつやる。
まずレポジトリの中のファイル一覧を取り出す。
1 |
$ svn list -R svn://svnserver.example.com > all |
ファイル名を検索したい場合はここからgrepすればいいが、ここでは内容から検索することを考える。
ここでallファイルにはディレクトリが含まれているのでこれを削除する。ディレクトリは最後が/で終わっているのでこれを削除する。
1 |
$ awk '!/\/$/{print}' all > all2 |
all2の各行にsvn://svnserver.example.comを加える。
1 |
$ sed 's;^;svn://svnserver.example.com/;' all2 > all3 |
これでall3はsvnのフルパスになった。つぎにsvn catを足す。
1 |
$ sed "s:^:svn cat ':" all3 | sed "s:$:':" > all4 |
grep を足す。ここでは”abc”を検索する。
1 |
$ sed 's:$:| grep -i abc:' all4 > all5 |
VLCメディアプレイヤーでマウスホイールで動画を少し進る
ホイールマウスで動画を進めたり戻したりできると便利なのでVLCメディアプレイヤーでの設定方法。
デフォルトではホイールマウスは音量の上げ下げに割り当てられているので、これを「無視するにする」ここで「再生位置」を選択すると上回転で進む、下回転で戻るになる。これでいい場合は、この設定だけでいいが、ここではこの動作を逆にする設定。
下の設定場所で、「少し前に戻る」のところをダブルクリックして、上回転し、そうすると下の欄に[Mouse Wheel Up]になる。
firefoxのアドオンのバージョンチェックを無効にする
VMWare Playerでネットワークの設定をする
WindowsのVMWare Playerにはネットワークの設定ツールが入っていいないが、インストールパッケージには含まれているので、これを取り出す。
インストールパッケージのあるフォルダで以下のコマンドを実行する。
1 2 |
>VMware-player-3.1.4-385536.exe /e abc > |
終わるまでしばらく待って、aaaフォルダができているので、この中からnetwork.cabを解答して、それらをvmplayer.exeのあるフォルダ(通常はC:\Program Files\VMware\VMware Player)にコピーする。
vmnetcfg.exeを起動してネットワークの設定ができる。
ホストオンリーを選択して、下の二つのチェックをはずせばネットワークは構成されないようだ。NATを使わない場合は無効にできる。