page_adsence

2011年2月25日金曜日

inputの属性にdisabled="true"が含まれているとPOSTされない件

disabledがtrueになっている要素に関してはPOSTされないらしい。
POSTしたい場合は、JSでPOSTする前にdisabledをfalseにしてからPOSTするか、
disabled属性ではなく、readonly属性に変更するという2種類の対応方法がある。

例)
<form action="hoge.php" method="post">
    <input type="text" name="disabled" disabled="true" /> ← こっちはPOSTされない
    <input type="text" name="readonly" readonly="readonly" /> ← こっちはPOSTされる
</form>

2011年2月24日木曜日

PHPで多次元配列のソートをする方法

array_multisortを使えば多次元配列のソートが可能なのは知っていたけど、
ソートキーって複数設定できたりするってことを初めて知った。

例えば二次元配列要素内の

二つの要素をソートキーに使いたい場合、

分類、商品売上順とか

伝票日付、伝票番号、行番号とか。。。

【コード、年齢】でソートを行う例です。

$data[] = array('code' => '01','age' => 30);
$data[] = array('code' => '02','age' => 25);
$data[] = array('code' => '01','age' => 18);

foreach($data as $key => $val)
{
$sortcode[$key] = $val['code']; //第一キー指定
$sortage[$key] = $val['age']; //第二キー指定
}

array_multisort($sortcode,SORT_ASC,$sortage,SORT_ASC,$data);

ソート実行前

Array
(
[0] => Array
(
[code] => 01
[age] => 30
)

[1] => Array
(
[code] => 02
[age] => 25
)

[2] => Array
(
[code] => 01
[age] => 18
)

)


ソート実行後

Array
(
[0] => Array
(
[code] => 01
[age] => 18
)

[1] => Array
(
[code] => 01
[age] => 30
)

[2] => Array
(
[code] => 02
[age] => 25
)

)

文字コードのShift-JISとSJISは別物らしい

Ajaxで通信しているところで、通信元はShift-JISで記載されてて、API側のPHPにはSJISと記載されていた。
てっきり同じ文字コードだと思っていたので問題ないんじゃないかと思っていたけど、
実際は別物で、きちんと書き分けないと文字化けしてしまう。

2011年2月22日火曜日

グラフィックボード増設

会社のPCでデュアルモニターにしようとしてグラボ買って増設したんですが、
知らないことが多すぎて無駄に時間食ってしまった…。

よっぽど特殊なマザボじゃない限りはオンボードのグラボと増設したグラボの共生は無理らしい。
PCIe x16は基本的には排他制御になっていて、さしたら他のグラボは使えなくなる。
なのでデュアルにしたい場合は増設するグラボの出力端子が2つ以上あるものを使う必要があり、
今回の場合はD-sub×2が必要だったが、現状はD-sub×1、DVI×1、HDMI×1の状態になっている。
なので、DVIをD-subに変換するコネクタを買ってDVIに挿す必要がある。

グラボの増設ってPCIeスロットに挿してドライバ入れれば動くと思ってたけど、意外と面倒だ…。

2011年2月16日水曜日

vimで画面分割

デュアルディスプレイにできない代わりに、せめて画面分割でもやろうと思って調べてみた。
とりあえずやり方は以下の通り。
:sp
画面を上下に分割
:vsp
画面を左右に分割
:sp ファイル名
指定したファイルを分割した画面に表示
:vsp ファイル名
指定したファイルを分割した画面に表示
Ctrl-w p
画面間の移動
Ctrl-w k
上の画面に移動
Ctrl-w j
下の画面に移動
Ctrl-w l
右の画面に移動
Ctrl-w h
左の画面に移動
Ctrl-w +
カーソルのある画面を一行分大きくする(縦)
Ctrl-w -
カーソルのある画面を一行分小さくする(縦)
Ctrl-w >
カーソルのある画面を一行分大きくする(横)
Ctrl-w <
カーソルのある画面を一行分小さくする(横)
Ctrl-w =
画面のサイズを同じにする

2011年2月14日月曜日

マグネトラクションエッジ

今日たまたまボードの話でマグネトラクションエッジについて話題に上がったので、
書いてみる。

「マグネトラクションエッジ」

聞いたことない単語だったけど、これはエッジが波打ってるやつのことらしい。
LIBのバナナとかがそうなっているのは知ってたけど、
正式名称は知らんかった。

アイスバーンでもガッツリ噛んでくれるらしい。
へー。

2011年2月10日木曜日

javascriptで0詰めしたい場合

jsでsprintfみたいに0詰めしたりできる関数ないかと思って探していましたが、
結局みなさん自作してるみたいですね。
今回は時間がなかったのでただ0詰めするだけの方法を調べました。
こんな感じでできるみたいですね。

// これを03にする
var time = '3';
var tmp  = '0'+time;
tmp.slice(-2);

楽だ。

2011年2月3日木曜日

winSCPでファイルやフォルダ名に日本語が含まれているとうまく転送できない件

新しい会社に入ってからやたらwinSCPの調子が悪いと思っていたら、
どうやらファイルのパスに日本語が混ざっているのが原因らしい。

日本語が混ざっているフォルダにあるファイルをwinSCP経由でサーバにコピーしようとすると、
「ファイル・フォルダ XXXXXXXX はありません」
というエラーメッセージが出てきてコピーできなかった。

ファイルを日本語が含まれていない場所にコピーしてから、
サーバにコピーすると問題無くアップロードできました。
今までは無意識に日本語ファイル名が含まれてないところから上げていたんだと知って、
ちょっとびっくり。

やっぱり日本語ファイル名とかフォルダ名はつけない方がいいなー。

2011年2月2日水曜日

rsyncの書き方

rsyncはネットワーク経由のコピーも可能なファイル・ディレクトリ同期ツールで、コマンドひとつでディレクトリツリーを一気に転送できるほか、差分のみの転送やコピー対象の条件指定といった多彩な機能を搭載している。 rsyncという名前に反してローカル間のコピーも可能で、makeファイル内でデータディレクトリを丸ごとコピーするといった用途にも便利に使えます。

基本的な書き方は以下の通り
rsync [オプション] コピー元 [コピー元...] コピー先


参考サイト
http://webos-goodies.jp/archives/51213844.html
http://d.hatena.ne.jp/kobapan/20091016/1255677010
http://d.hatena.ne.jp/pyopyopyo/20040925/p3

多重ループから抜ける方法

通常、ループ処理を行っている途中で、そのループから抜ける場合はbreakと記述する。


foreach( $array as $key => $value ){
    if ( $key == 1 ) break;
}

多重ループの場合は一度breakと記述するだけでは、現在プール処理している部分から抜けるだけで、
その外側のループはそのまま処理されてしまう。
こういった場合には以下のように記述する


以下の場合は$array1のループ処理は通常通り処理されてしまう。
foreach( $array1 as $key1 => $value1 ){
    foreach( $array2 as $key2 => $value2 ){
        if ( $key2 == 1 ) break;
    }
}

以下の場合は2重ループの外側までbreakされる。
foreach( $array1 as $key1 => $value1 ){
    foreach( $array2 as $key2 => $value2 ){
        if ( $key2 == 1 ) break 2;
    }
}

こういった形で、breakの後に数字を記述することで、その数のループ処理から抜けることができる。
break以外にcontinueでも同様のことができる。

smartyテンプレートのコンパイルキャッシュが更新されるタイミング

同僚がSmartyのコンパイルキャッシュが更新されないといった話を聞いたので、Smartyに関して調べてみた。

Smartyのコンパイルキャッシュが更新されるタイミングは、テンプレートファイルの最終更新日時がキャッシュファイルより新しかった場合に、再度コンパイルされる。

また、Smartyがコンパイルキャッシュを使用するのは、$cachingと$compile_checkの両方が有効になっていた場合に使用される。
$force_compileはtrueにすると毎回コンパイルをし直すようにできる。
開発中はこれをtrueにしておくとよいが、運用時にはfalseにした方が負荷軽減できる。

とりあえず以上。

Excel_Reviserでエクセルファイルが壊れていると出てきた場合

ERROR file(エクセルファイル名) is broken (ExBlock)

というようなエラーが出た場合、
865行目あたりにある下記の部分をコメントアウトすると動く。
if ($ExBlock > ($len_ole / 512 +1))
die("ERROR file($Fname) is broken (ExBlock)");

VMWare上では出なかったけど、本番サーバに上げたら出るようになった。
この原因は整数のバイトサイズの違いにより、ファイル破損と誤判定しているらしい。
とりあえず今回はコメントアウトで対応。

2011年2月1日火曜日

preg_replace_callbackに関して

preg_replace_callbackのcallback関数にクラスメソッドを使いたい場合は以下のように記述する。
グローバル関数の場合は以下のように記述する
preg_replace_callback('正規表現', 'コールバック関数名', 置換するテキスト)

クラスメソッドの場合は以下のように記述する
preg_replace_callback('正規表現', array($this, 'コールバック関数名'), 置換するテキスト)