FujitsuのRX100S7にUbuntu10.04 LTSをインストールした。
標準ドライバでは認識しなかったので、LSIとIntelからDriverをダウンロードした。
まずはこれ。
OS標準のドライバでRAID 1 組んだ後のディスクを認識しなかった。
で、LSI行って見つけてきた。
MegaRAID SAS Driver Ubuntu 10.04 LTS Version 5.30 (2011/12/26現在)
手順通りに従って、無事、OSのインストールができました。
次。
オンボードNICのうち、一個だけ離れているLANポートを認識しなかったので、これも、Intelさん行って見つけてきた。
Network Adapter Driver for PCI-E Gigabit Network Connections under Linux
(2011/12/26現在、バージョン1.95)
これも、手順通りに従ってコンパイルしてインストール。
無事、認識できました。
ただ、NICドライバは、カーネルのバージョンが上がる度に再コンパイルが必要なので注意。
なんでも屋さんの自称SEさんが、知らなかったことをメモ代わりに書いてます。
たまに関係のないことも書きますが、良かったら参考にどうぞ。
2020/11
なんでも屋さんだったSEさんは、転職しました。今は社内SEさんとして、自社システム開発してます。でも、一人なんだよね・・・
2021/8 もう少し自分で考えてよって人が増えました...いい歳なんだからさー、指示待ちやめてよねー
2023/11 転職してから早3年、仲間が4名になりました!
2024/10 この一年で貯金がかなり減りました・・・
2011-12-27
2011-12-20
PHPセッション開始のサンプル
# セッションIDの保存は、クッキーのみを利用する。 ini_set('session.use_cookies', 1); ini_set('session.use_only_cookies', 1); ini_set('session.use_trans_sid', 0); # セッション名を変更する。 session_name('SITENAME'); # 第1引数:セッションクッキーの有効時間(秒数)。0でブラウザを閉じるまで。 # 第2引数:セッションクッキーが有効なパス。供用サーバーで独自ドメインがない場合は、 # 自分が管理するディレクトリ以下に対してのみ、ブラウザからセッションクッキ # ーを送信させる。 # 第3引数:セッションクッキーが有効なドメイン。 # 第4引数:HTTPSでのみセッションクッキーを有効とする場合は、true とする。 # 第5引数:セッションクッキーへのアクセスはHTTPのみとし、JavaScriptからのアク # セスは許可しない。 session_set_cookie_params(0, '/user/', NULL, false, true); # セッションを開始する session_start(); # セッションハイジャック対策 # セッション固定化攻撃対策 # F5連打対策 # 前回セッションIDを再生成した日時と現在日時を比較し、一定期間(例えば20分)経過 # していたら、セッションIDを再生成する。 $_SESSION['lasttime'] = isset($_SESSION['lasttime']) ? $_SESSION['lasttime'] : 0; $now = time(); if (($_SESSION['lasttime'] + 20 * 60) < $now) { session_regenerate_id(true); $_SESSION['lasttime'] = $now; }
2011-12-02
kvmでゲストをコピーしたときも
kvmでゲストをコピーして新しく作ったときも、
結局はMACアドレスが変更になるだけだから、
この方法でいいんだよ。
■ vmwareのvmdkをコピーしたときは
http://chibitcpu.blogspot.com/2011/03/vmwarevmdk.html
結局はMACアドレスが変更になるだけだから、
この方法でいいんだよ。
■ vmwareのvmdkをコピーしたときは
http://chibitcpu.blogspot.com/2011/03/vmwarevmdk.html
2011-11-30
PHPで2重登録、2重ポスト、CSRF対策
こんな感じで実装できると思う。
■ input.php ... 入力画面など
■ regist.php ... 登録処理など
■ input.php ... 入力画面など
<?php // セッションを開始する session_start(); // ワンタイムチケットを生成する。 $ticket = md5(uniqid(rand(), true)); // 生成したチケットをセッション変数へ保存する。 $_SESSION['ticket'] = $ticket; ?> <html> <head> <title>サンプル登録画面</title> </head> <body> <form action="regist.php" method="POST"> <input type="text" name="UserName" value=""> <input type="submit" value="regist"> <!-- 生成したワンタイムチケットを隠しフィールドとして、 登録処理へPOSTする --> <input type="hidden" name="ticket" value="<?=$ticket?>"> </form> </body> </html>
■ regist.php ... 登録処理など
<?php // セッションを開始する session_start(); // ポストされたワンタイムチケットを取得する。 $ticket = isset($_POST['ticket']) ? $_POST['ticket'] : ''; // セッション変数に保存されたワンタイムチケットを取得する。 $save = isset($_SESSION['ticket']) ? $_SESSION['ticket'] : ''; // セッション変数を解放し、ブラウザの戻るボタンで戻った場合に備え // る。 unset($_SESSION['ticket']); // ポストされたワンタイムチケットの中身が空だった、または、ポス // トすらされてこなかった場合、不正なアクセスとみなして強制終了す // る。 if ($ticket === '') { die('不正なアクセスです'); } // ポストされたワンタイムチケットとセッション変数から取得したワン // タイムチケットが同じ場合、正常にポストされたとみなして処理を行 // う。 if ($ticket === $save) { echo 'Normal Access'; } // ブラウザの戻るボタンで戻った場合は、セッション変数が存在しない // ため、2重送信とみなすことができる。 // また、不正なアクセスの場合もワンタイムチケットが同じになる確率 // は低いため、不正アクセス防止にもなる。 else { echo 'Dual Posted'; } ?>
2011-11-29
PHPの配列は
こんな感じで配列を作ると、添字は順番に振られるけど、順番には並んでいない。
なので、添え字を使って処理するときは問題ないけど、例えば配列の並び順に従って二つ以上の配列を処理するときは、ksort()使って添え字でソートしておく必要がある。
$arrVar = array(); $arrVar[] = "a"; $arrVar[] = "b"; $arrVar[] = "c";
なので、添え字を使って処理するときは問題ないけど、例えば配列の並び順に従って二つ以上の配列を処理するときは、ksort()使って添え字でソートしておく必要がある。
$arrVar = array(); $arrVar[] = "a"; $arrVar[] = "b"; $arrVar[] = "c"; $arrTmp = array(); $arrTmp[] = "あ"; $arrTmp[] = "い"; $arrTmp[] = "う"; ksort($arrVar); ksort($arrTmp);
2011-11-26
オブジェクトは参照渡し
マニュアル、ちゃんと読めってね。
PHP Manual オブジェクトと参照
http://php.net/manual/ja/language.oop5.references.php
引用 ここから
PHP Manual オブジェクトと参照
http://php.net/manual/ja/language.oop5.references.php
引用 ここから
オブジェクトと参照
PHP 5 でのオブジェクト指向プログラミングのポイントとしてよく言われるのは 「オブジェクトはデフォルトでは参照渡しとなります」ということです。 しかし、正確には少し異なります。 この節では、いくつかの例を用いてその誤解をといていきます。
PHP の参照は一種のエイリアスで、ふたつの異なる変数に同じ値を書き込めるものです。 PHP 5 以降、オブジェクト変数の値にオブジェクト自身は含まれなくなりました。 含まれるのはオブジェクトの ID のみで、 これを用いて実際のオブジェクトにアクセスできるようになっています。 オブジェクトが引数として渡されたり返り値となったり あるいは別の変数に代入されたりした場合、 それはエイリアスではありません。ID のコピーを保持し、 同じオブジェクトを指すようになるのです。
ここまで
2011-11-09
2011-11-08
kvmでvmvgaドライバ
Ubuntu 10.10 でKVM環境を構築したよ。
で、ゲストでWindows XP を動かしてみた。
vgaドライバがなかったので、vmvgaドライバを入れてみた。
で、rdesktopで接続して仕事していたら、起動後3時間すると、
ゲストのCPU使用率が100%になって
ゲストのCPU使用率が100%になって
にっちもさっちもいかなくなった。
最初は「何が悪いの」的な感じで、何が何だかだったけど、
最終的に、ビデオカードのモデルを「vmvga」から「vga」に戻したら、
何時間経過しても問題なくなった。
POSTと同時にGETする
formタグでPOSTと同時にGETも行うには、
<form action="./target.php?hoge=hoehoge&moge=mogemoge" method="POST">
・・・
</form>
としておけばよい。
<form action="./target.php?hoge=hoehoge&moge=mogemoge" method="POST">
・・・
</form>
としておけばよい。
2011-11-03
2011-10-27
date()関数は賢い
UNIXタイムスタンプについて調べていたとき、
PHPで、
ってやったら、
って出た。
ん?日本と9時間違うはずなのに...
で調べてみたら、Wikipedia に書いてあった。
もろ、1時間進んでたときだったのね。
で、次のコードで確認してみたら、思った通りにちゃんと出た。
結果はこれ
サマータイムじゃないから、フラグも立ってない。
PHPで、
date_default_timezone_set('Europe/London'); echo date('Y-m-d H:i:s', 0);
ってやったら、
1970-01-01 01:00:00
って出た。
ん?日本と9時間違うはずなのに...
で調べてみたら、Wikipedia に書いてあった。
Wikipedia 英国夏時間
1968年2月18日1時(UTC)から1971年10月31日2時(UTC)までの期間、グリニッジ標準時よりも1時間早い英国標準時(BST: British Standard Time, UTC+1)を標準時とし、通年でこれを用い、夏時間が実施されなかった。
もろ、1時間進んでたときだったのね。
で、次のコードで確認してみたら、思った通りにちゃんと出た。
// タイムゾーンを Europe/London にする date_default_timezone_set('Europe/London'); echo date('Y-m-d H:i:s I e P T', 0); // タイムゾーンを Asia/Tokyo にする date_default_timezone_set('Asia/Tokyo'); echo date('Y-m-d H:i:s I e P T', 0); // タイムゾーンを Europe/London にする date_default_timezone_set('Europe/London'); // 1971/10/31 02:00:00 $intTime = mktime(2,0,0,10,31,1971); echo date('Y-m-d H:i:s I e P T', $intTime); // タイムゾーンを Asia/Tokyo にする date_default_timezone_set('Asia/Tokyo'); echo date('Y-m-d H:i:s I e P T', $intTime);
結果はこれ
1970-01-01 01:00:00 0 Europe/London +01:00 BST 1970-01-01 09:00:00 0 Asia/Tokyo +09:00 JST 1971-10-31 02:00:00 0 Europe/London +00:00 GMT 1971-10-31 11:00:00 0 Asia/Tokyo +09:00 JST
サマータイムじゃないから、フラグも立ってない。
2011-10-25
isset()とis_null()の関係
PHPのマニュアルを見ていて、へぇーって。
■PHP Manual 付録 PHP型の比較表
http://www.php.net/manual/ja/types.comparisons.php
isset()で false が返るモノと
is_null()で true が返るモノが
同じだった。
・NULL
・宣言された直後の変数
・宣言されていない変数
■PHP Manual 付録 PHP型の比較表
http://www.php.net/manual/ja/types.comparisons.php
isset()で false が返るモノと
is_null()で true が返るモノが
同じだった。
・NULL
・宣言された直後の変数
・宣言されていない変数
2011-10-22
JavaScriptのif文
JavaScript で if() を実験してみた。
実験ソースはこれ
結果はこれ
特に、"1","0","-1"とダブルクォートで括った場合、こんな感じに評価されるので注意。
実験ソースはこれ
var objArray = {'true':true, 'false':false, 1:1, 0:0, '-1':-1, '"1"':'1', '"0"':'0', '"-1"':'-1', 'NULL':null, '"js"':'js', '""':''}; for (var i in objArray) { document.write('if (' + i + ') は '); if (objArray[i]) { document.write('true です'); } else { document.write('false です'); } document.write('<br />');
for (var j in objArray) { if (i === j) continue; document.write('if (' + i + ' == ' + j + ') は '); if (objArray[i] == objArray[j]) { document.write('true です'); } else { document.write('false です'); } document.write('<br />'); } }
結果はこれ
if (true) は true です if (true == false) は false です if (true == 1) は true です if (true == 0) は false です if (true == -1) は false です if (true == "1") は true です if (true == "0") は false です if (true == "-1") は false です if (true == NULL) は false です if (true == "js") は false です if (true == "") は false です if (false) は false です if (false == true) は false です if (false == 1) は false です if (false == 0) は true です if (false == -1) は false です if (false == "1") は false です if (false == "0") は true です if (false == "-1") は false です if (false == NULL) は false です if (false == "js") は false です if (false == "") は true です if (1) は true です if (1 == true) は true です if (1 == false) は false です if (1 == 0) は false です if (1 == -1) は false です if (1 == "1") は true です if (1 == "0") は false です if (1 == "-1") は false です if (1 == NULL) は false です if (1 == "js") は false です if (1 == "") は false です if (0) は false です if (0 == true) は false です if (0 == false) は true です if (0 == 1) は false です if (0 == -1) は false です if (0 == "1") は false です if (0 == "0") は true です if (0 == "-1") は false です if (0 == NULL) は false です if (0 == "js") は false です if (0 == "") は true です if (-1) は true です if (-1 == true) は false です if (-1 == false) は false です if (-1 == 1) は false です if (-1 == 0) は false です if (-1 == "1") は false です if (-1 == "0") は false です if (-1 == "-1") は true です if (-1 == NULL) は false です if (-1 == "js") は false です if (-1 == "") は false です if ("1") は true です if ("1" == true) は true です if ("1" == false) は false です if ("1" == 1) は true です if ("1" == 0) は false です if ("1" == -1) は false です if ("1" == "0") は false です if ("1" == "-1") は false です if ("1" == NULL) は false です if ("1" == "js") は false です if ("1" == "") は false です if ("0") は true です if ("0" == true) は false です if ("0" == false) は true です if ("0" == 1) は false です if ("0" == 0) は true です if ("0" == -1) は false です if ("0" == "1") は false です if ("0" == "-1") は false です if ("0" == NULL) は false です if ("0" == "js") は false です if ("0" == "") は false です if ("-1") は true です if ("-1" == true) は false です if ("-1" == false) は false です if ("-1" == 1) は false です if ("-1" == 0) は false です if ("-1" == -1) は true です if ("-1" == "1") は false です if ("-1" == "0") は false です if ("-1" == NULL) は false です if ("-1" == "js") は false です if ("-1" == "") は false です if (NULL) は false です if (NULL == true) は false です if (NULL == false) は false です if (NULL == 1) は false です if (NULL == 0) は false です if (NULL == -1) は false です if (NULL == "1") は false です if (NULL == "0") は false です if (NULL == "-1") は false です if (NULL == "js") は false です if (NULL == "") は false です if ("js") は true です if ("js" == true) は false です if ("js" == false) は false です if ("js" == 1) は false です if ("js" == 0) は false です if ("js" == -1) は false です if ("js" == "1") は false です if ("js" == "0") は false です if ("js" == "-1") は false です if ("js" == NULL) は false です if ("js" == "") は false です if ("") は false です if ("" == true) は false です if ("" == false) は true です if ("" == 1) は false です if ("" == 0) は true です if ("" == -1) は false です if ("" == "1") は false です if ("" == "0") は false です if ("" == "-1") は false です if ("" == NULL) は false です if ("" == "js") は false です
特に、"1","0","-1"とダブルクォートで括った場合、こんな感じに評価されるので注意。
if ("1") は true です if ("1" == true) は true です if ("1" == false) は false です if ("0") は true です if ("0" == true) は false です if ("0" == false) は true です if ("-1") は true です if ("-1" == true) は false です if ("-1" == false) は false です
2011-10-20
2次元配列は表じゃない
例えば、
$arrVal = array(array('AA', 'BB', 'CC'), array(11, 12, 13), array('ab', '12', 'c4'),)
と定義した配列の場合、こんな感じの表をイメージすると思う。
+------+------+------+ | 'AA' | 'BB' | 'CC' | +------+------+------+ | 11 | 12 | 13 | +------+------+------+ | 'ab' | '12' | 'c4' | +------+------+------+
でも、実際は表じゃなくてこんな感じ
+----------------------+----------------------+----------------------+ |+------+------+------+|+------+------+------+|+------+------+------+| || 'AA' | 'BB' | 'CC' ||| 11 | 12 | 13 ||| 'ab' | '12' | 'c4' || |+------+------+------+|+------+------+------+|+------+------+------+| +----------------------+----------------------+----------------------+
こんな感じで、
「配列の各要素の中が配列」
になっている。
PHPにそんなマニュアルがあったなんて
PHPで1年半開発してきたけど、今日、始めてこんなマニュアルがあるのに気づいた。
■PHPマニュアル
付録 PHP型の比較表
http://www.php.net/manual/ja/types.comparisons.php
==で緩やかに比較したときの、あの、わけの分からないTRUEとFALSEの評価と
is_null()、empty()、isset()の結果が一覧表で載っていた。
知らなかった...
マニュアルは、ちゃんと読みましょう。ね。
で、どうしても解せない不愉快な評価結果。
if (0 == NULL) は TRUE と評価され
if (0 == "0") は TRUE と評価されるのに
if ("0" == NULL) は FALSE と評価される。
証明が成り立っていない。だめだ、俺の中であり得ない。
世の中、理不尽なことばかりだ。
if ("" == NULL) は TRUE だけど
「仕様です」
ではなくて、この理由をご存知の方、教えてください。
■PHPマニュアル
付録 PHP型の比較表
http://www.php.net/manual/ja/types.comparisons.php
==で緩やかに比較したときの、あの、わけの分からないTRUEとFALSEの評価と
is_null()、empty()、isset()の結果が一覧表で載っていた。
知らなかった...
マニュアルは、ちゃんと読みましょう。ね。
で、どうしても解せない不愉快な評価結果。
if (0 == NULL) は TRUE と評価され
if (0 == "0") は TRUE と評価されるのに
if ("0" == NULL) は FALSE と評価される。
if (FALSE == NULL) は TRUE と評価され
if (FALSE == "0") は TRUE と評価されるのに
それでもやっぱり
if ("0" == NULL) は FALSE と評価される。
証明が成り立っていない。だめだ、俺の中であり得ない。
世の中、理不尽なことばかりだ。
if ("" == NULL) は TRUE だけど
if ("" == "0") は FALSE だから
if (NULL == "0") は FALSE なんだろうか?
「仕様です」
ではなくて、この理由をご存知の方、教えてください。
2011-10-19
phpのdateとtimestamp
例によって、phpのバージョンはこれね。
$ php -v
PHP 5.3.6-13ubuntu3.1 with Suhosin-Patch (cli) (built: Aug 29 2011 23:39:16)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
で、確認。
<?php
date_default_timezone_set('Asia/Tokyo');
echo date('Y-m-d H:i:s', 0);
?>
結果は 1970-01-01 09:00:00
ふむ。
じゃ、これは?
じゃ、これは?
<?php
date_default_timezone_set('Europe/Paris');
echo date('Y-m-d H:i:s', 0);
?>
結果は 1970-01-01 01:00:00
へー。
結論。
date()は、与えられたtimestampを、タイムゾーンの日時に変換する。
これで、やっとUTCからの経過秒数っていう意味がわかったよ。
MySQLのUNIX_TIMESTAMP() と FROM_UNIXTIME()
とりあえず、MySQLのバージョンね。
で、ログインしてやってみた。
ん?1970-01-01 00:00:00 も 1970-01-01 09:00:00 も結果は同じ?
ちょっと待て。
両方とも「0」かよ。
じゃこれはどうかな?
マニュアルはどうなってる?
>UNIX_TIMESTAMP() に範囲外の日付を渡すと、0 が戻されます。
あぁ、そういうことね。1970-01-01 00:00:00 は「範囲外」ってことね。
納得。
$ mysql --version mysql Ver 14.14 Distrib 5.1.58, for debian-linux-gnu (x86_64) using readline 6.2
で、ログインしてやってみた。
$ mysql -u root -p mysql> select from_unixtime(unix_timestamp('1970-01-01 00:00:00')) from dual; +------------------------------------------------------+ | from_unixtime(unix_timestamp('1970-01-01 00:00:00')) | +------------------------------------------------------+ | 1970-01-01 09:00:00 | +------------------------------------------------------+ 1 row in set (0.00 sec) mysql> select from_unixtime(unix_timestamp('1970-01-01 09:00:00')) from dual; +------------------------------------------------------+ | from_unixtime(unix_timestamp('1970-01-01 09:00:00')) | +------------------------------------------------------+ | 1970-01-01 09:00:00 | +------------------------------------------------------+ 1 row in set (0.01 sec)
ん?1970-01-01 00:00:00 も 1970-01-01 09:00:00 も結果は同じ?
ちょっと待て。
mysql> select unix_timestamp('1970-01-01 00:00:00') from dual; +---------------------------------------+ | unix_timestamp('1970-01-01 00:00:00') | +---------------------------------------+ | 0 | +---------------------------------------+ 1 row in set (0.00 sec) mysql> select unix_timestamp('1970-01-01 09:00:00') from dual; +---------------------------------------+ | unix_timestamp('1970-01-01 09:00:00') | +---------------------------------------+ | 0 | +---------------------------------------+ 1 row in set (0.01 sec)
両方とも「0」かよ。
じゃこれはどうかな?
mysql> select from_unixtime(0) from dual; +---------------------+ | from_unixtime(0) | +---------------------+ | 1970-01-01 09:00:00 | +---------------------+ 1 row in set (0.00 sec)
マニュアルはどうなってる?
>UNIX_TIMESTAMP() に範囲外の日付を渡すと、0 が戻されます。
あぁ、そういうことね。1970-01-01 00:00:00 は「範囲外」ってことね。
納得。
2011-03-10
vmwareのvmdkをコピーしたときは
マスターイメージをインストールして、使いまわしたいときあるよね。
でも、コピーして使うと...おや?eth0がない!
そんな時は慌てずに、Ubuntuなら
# sudo nano /etc/udev/rules.d/70-persistent-net.rules
とやって、
eth0の行を削除。
そしてeth1をeth0に変更後、上書き保存して再起動!
これで無事、eth0として認識されました。
2012/10/04 追記
CentOS 5.x をコピーした場合は、
何もしなくてもよかった。
ほんとか?
ちなみに、CentOS 6.x は、Ubuntuと同じやり方でOK。
でも、コピーして使うと...おや?eth0がない!
そんな時は慌てずに、Ubuntuなら
# sudo nano /etc/udev/rules.d/70-persistent-net.rules
とやって、
eth0の行を削除。
そしてeth1をeth0に変更後、上書き保存して再起動!
これで無事、eth0として認識されました。
2012/10/04 追記
CentOS 5.x をコピーした場合は、
何もしなくてもよかった。
ほんとか?
ちなみに、CentOS 6.x は、Ubuntuと同じやり方でOK。
登録:
投稿 (Atom)
.htaccessで403を404で返す
久しぶりにリライトルールを書いたよ。 ドキュメントルートに.htaccessを置く場合の記述↓ # 403.html は実体がなくてよい。この設定をすることで、あっても使われなくなる。 ErrorDocument 403 /403.html # 独自の404ページをドキュメ...
-
本題に入る前に、まずは、sh/bash系のシェルで標準出力と標準エラー出力をリダイレクトする方法から。 現在使用中のシェルを確認するには、 # echo $SHELL とすれば確認できる。 その他、利用できるシェルを確認するには # cat /etc/shell...
-
Internet Explorer も、気がついてみたらFirefoxまでも、複数タブ・ウィンドウ間で同一セッションになってしまった。確か、Firefox 3.6のときは、ウィンドウが別だったらセッションも別になっていたと思ったのになぁ... で、同一セッションになって困るの...
-
mb_send_mail()を使ってメールを送信する場合は、第5引数に Return-Path を指定する。 さもなければ、Return-Path は apache@hoge.dom (コマンドラインから実行したときは、実行アカウント名@hoge.dom)になる。 第5引...