テーブルでTDに値が入っていない行を隠す – jQueryパーツ001

条件1 hoge
条件2 piyo
条件3
条件4 piyo
条件5

みたいなテーブルで、右欄が空の場合に行を隠すjQuery。

テーブルのコード

jQueryのコード

サンプル

(374)

カテゴリー: jQuery | コメントをどうぞ

PHPでデフォルトのSessionを使うとブラウザキャッシュが無効になる

普通にheader関数でCache-Control:max-age=360とかやったけど、ブラウザで見るとno-cacheとか色々設定されていて、Pragma:no-cacheとかも設定されている。
これは、session.cache_limiter設定値がデフォルトでnoneになっているために、Cache-Control, Expires, Pragmaをキャッシュ無効な設定をはき出す様になっている。
部分的にキャッシュを有効化したい場合、PHPマニュアルの関数を使って、設定値をprivateとかにして、適当なsession.cache_expire設定値を入れてやれば良い。
キャッシュさせるパーツにセッションを使わずget渡しにして、session_startしないのもあり。

(353)

カテゴリー: PHP | コメントをどうぞ

PHPの謎バグ

PHPでオブジェクトを配列にキャストする場合、Object $objを$array = (array)$objみたいにキャストすると、$obj->propが$array[‘prop’]になるわけだけど、JSONで渡ってきた値をphpのjson_decodeでデコードしたオブジェクトをこのキャストした場合・・・

配列をvar_dumpしたときに

‘1’=>’北海道’
‘2’=>’青森’

みたいになるんで、$array[‘1’]にアクセスすると当然’北海道’が戻ってくるべきなんだけど、$array[‘1’]でも$array[1]でもnullが戻ってきてアクセス不能になるという謎現象に陥った。

$temporary = array();
foreach($array as $key=>$val){
$temporary[$key] = $val;
}

みたいな無駄な処理を通すと、$temporary[1]にアクセスすると’北海道’ が得られるようになった。

どうも、PHPの内部処理で型キャストで配列を作る場合に内部構造がおかしくなって、連想配列と数値インデックスの単純配列の動きがおかしくなってしまうようだ。

(242)

カテゴリー: PHP | コメントをどうぞ

支那方面からの攻撃 – port 3306 MySQL

何となくnetstat -anとか打ってみたら、124.243.125.33とかのIPからport3306に腐るほど接続が来ていた。

3306はMySQLのウェルノウンポート。
mysqlのユーザ管理はしてあるけど気持ち悪いので、/etc/my.cnfにskip-networkingオプションを設定した。

ローカルのサーバならルータのフィルタで3306を塞ぐとこだけど、VPSじゃMySQLへのネットワーク接続は不要(ローカルホストならソケット通信できる) なのでネットワーク機能をまとめて落とした(ネットワーク接続が必要なら、iptablesででも制限してやれば良いだろう)

(441)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

postfixを利用する

 sendmailであるとかqmailとかと言ったSMTPDがあるけど、最近利用しているのはpostfixだ。
 開発環境で、全ての送信メール内容を確認したいという場面があるけど、postfixだとこれが簡単にできる。

yum install postfix
yum install cyrus-sasl

 ついでなのでSMTP Authも導入するため、Cyrus-saslも導入しておく。
>>/etc/postfix/main.cf

myhostname = wp.xn--ockc3f5a.com #ホスト名を設定
mydomain = xn--ockc3f5a.com #ドメインを設定
mydestination = wp.xn--ockc3f5a.com, xn--ockc3f5a.com, $myhostname, localhost.$mydomain, localhost #このホストが目的地であるドメインを設定
mynetworks = 127.0.0.0/8, 210.170.x.y #信頼するネットワークを設定(このアドレスから送信されたメールはリレー許可される)
home_mailbox = Maildir/ #メールをデフォルトのDovecotの位置に保管する
always_bcc = catch_all@wp.xn--ockc3f5a.com #これで全てのメールのBCCが送信される
smtpd_sasl_auth_enable = yes #SMTP Authを使用する
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,permit_auth_destination,reject_unauth_destination #メールの許可設定;信頼されるネットワーク、SMTP Authで認証されたユーザ、認証された宛先を許可し、認証されない宛先を拒否する
broken_sasl_auth_clients = yes #非標準のSMTP Authサポート通知を有効にする
smtpd_sasl_security_options = noanonymous #匿名ユーザからのメールを拒否する

 あとは、開発サーバで外にメールを送りたくない場合、

default_transport = local

 この設定をすると、a@yahoo.co.jp宛でもb@microsoft.com宛でも、a@localhostやb@localhostに配送しようとする(つまり、外へのメール送信が出来なくなる) そこで、

luser_relay =catch_all

でキャッチオールしてしまえばほとんどのメールを収集できる(存在するユーザ名宛のメールはそのユーザに配信される)
しかし、Postfixは不明なユーザ宛メールを拒否しようとするので

local_recipient_maps =

の設定でその拒否を解除する。

あとはサービス設定と起動

/sbin/chkconfig sendmail off
/sbin/chkconfig –add postfix
/etc/init.d/sendmail stop
/etc/init.d/postfix start

 こんな感じで、簡単な設定で色々使える。

(623)

カテゴリー: サーバ設定 | コメントをどうぞ

PHP – staticで機能をまとめる

 ある程度の規模のシステムでファンクション名を決めていると、ファンクション名が被ることがある。
 そう言うとき、機能クラスを作って、そのstaticメソッドとして定義することで、クラス名::メソッド名でコールすることが出来るのでちょっと便利。

 staticは、クラスをインスタンス化していなくても呼び出せる物で、変数とメソッドについて定義できる。

class ORDER{
public static $PAYMENT_METHODS = array(‘CARD’, ‘PAYPAL’, ‘CHECK’);
public static makeList($list){

}
}

class INVOICE{
public static makeList($list){

}
}

みたいな定義をしておくと、同じmakeList命令をORDERのmakeListとINVOICEのmakeListに明示して使い分けることが出来る。
非staticだと、

$order = new ORDER();
$order->makeList($order->PAYMENT_METHODS);
$invoice = new INVOICE();
$invoice->makeList($list);

のように、newを使ってインスタンスを作らなければならないけど、static宣言している場合は

ORDER::makeList(ORDER::$PAYMENT_METHODS);
INVOICE::makeList($list);

みたいに呼び出せるので、コードが楽になる。

(81)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP], PHP | コメントをどうぞ

AJAX関連でJSON – PHPとJAVAと

 AJAXで扱うデータを交換するのにJSONってのがある。
 簡単に言えばJavaScript形式の変数をどばっと流してしまうもので、なかなか便利。
 うちの会社ではPHPが主力言語なので、PHPでJSON変換処理をしているんだけど、DBの大きなデータをJSON通信しようとすると結構重い。 具体的には、4MB位ある配列を丸ごとJSON化したら3.5秒かかった。
 JSON化モジュールはとても簡潔に書かれていて、これ以上軽量化は出来そうにない。
 個人的には、OO主義者でJavaも結構いけるクチなので、JSONICを組み込んでTOMCAT5からJSPで組んでみたら、JSON化処理時間は400ミリ秒に短縮できた。
 Javaでは出力ストリームにGZipやDeflateフィルタを設定することで、データの転送自体も圧縮することが出来るのでこの用途にはJavaが適しているだろう。
 JSON化する前の変数を作り出す処理などを含めた全体で比較すると、PHPでは8秒台だったがJavaでは750ミリ秒と1/10以下まで短縮することが出来た。
 問題点としては、私以外の社内リソースにJavaが出来る人が居ないと言うところと、本番サーバに新たにJava環境を構築しなきゃならんのだけど、これだけの性能的アドバンテージがある状況では、Javaの採用が適しているのじゃないだろうか。

(451)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ