Hatena::ブログ(Diary)

bushimichiの日記 RSSフィード

この日記のはてなブックマーク数

2010-12-10

Web製作でよく使うPHP変数の値有無判定関数

| 19:52 | Web製作でよく使うPHP変数の値有無判定関数を含むブックマーク

/**
 *
 * @param mixed $v 
 * @return boolean 
 *
 **/
 function v($v){
   if(is_bool($v)){
     return $v;
   }elseif(is_numeric($v)){ // all numeric (0 and '0') are true.
     return true;
   }elseif(is_string($v)){
     return !empty($v);
   }elseif(is_array($v)){
     $v = array_filter($v,"v");
     return !empty($v);
   }elseif(is_object($v)){
     return v(get_object_vars($v));
   }else{
     return !empty($v);
   }
 }

実際にHTMLに出力するときは 0を値とみなすことのほうが多いと思いますので

0もTRUE扱いにしています。

PHPのStringのゼロに注意

| 19:18 | PHPのStringのゼロに注意を含むブックマーク


$a = 0;
if(empty($a)){
  echo 'TRUE';
}else{
  echo 'FALSE';
}

これが、TRUEになることは容易にわかるのですが

$a='0';
if(empty($a)){
  echo 'TRUE';
}else{
  echo 'FALSE';
}

これも、TRUEになるとは盲点でした。恐るべしPHP

PINGが通らないときにまず疑うことは、iptablesの設定

| 00:37 | PINGが通らないときにまず疑うことは、iptablesの設定を含むブックマーク

ネットワークの設定もひと通りすませて

いざPINGを飛ばしてレスポンスを確認したときに

まったく応答がなく四苦八苦したときは、

接続先のiptablesを確認してみることをおすすめします。

無用な接続を弾くためにiptablesをしっかり設定したつもりが

接続許可する予定のクライアントまで遮断していたなんてことはないですか?

とりあえず、PINGが通らないときは、/etc/init.d/iptables stop してみましょう。

それでも通らないときはどこかネットワークが切れてると思います。

LANケーブルかHUBルーターが故障ってのが次の確認箇所。

ネットワークがつながらないときは無限あり地獄のような

出口の見えない焦燥感に苛まれますので、誰かのお役に立てば幸いです。

2010-12-01

|| をつかって変数を初期化

| 10:50 |  || をつかって変数を初期化を含むブックマーク

値の不明な変数初期化する場合

if($a){ 
  $a = 'hogehoge';
}

もしくは

$a = $a ? $a : 'hogehoge';

これを以下のように書きます。

$a || $a = 'hogehoge';

|| は、if文の条件式にしか普段は使わないのだけれども

編集の初期化処理などに使うと1行で簡潔にかけて意外ときれい。

あまりこういう記述を増やすとPerlみたいに暗号のようなコードになりそうなので

ほどほどにしながら、ワンポイントで使うといいかも。

bushimichibushimichi 2010/12/01 10:53 >||
if($a) $a='hogehoge';
||<

if文の { をつけずに書いたらほぼ同じか。。。

2010-11-30

月、日の桁数をそろえたい時にsubstrの便利な使い方

| 11:46 | 月、日の桁数をそろえたい時にsubstrの便利な使い方を含むブックマーク

月とかカレンダーの日をfor文でまとめて出力するときに

以下のように書くことがあるかと思います。


for($i=1;$i<=12;$i++){
  echo $i.'月<br>';
}

=================

1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月
12月

ただ、これだとレイアウト的に1桁の月と2桁の月でサイズがずれたりすることがあります。

そこで、1桁の月に頭に0をつけて 01月 02月 ... という風に表示したいとします。

IF文で書くと以下のような感じ。ちょっとIF文が仰々しくてあまりうれしくありません。

for($i=1;$i<=12;$i++){
  if($i < 10){
    echo '0'.$i.'月<br>';
  }else{
    echo $i.'月<br>';
  }
}

これを、substrで書くとこんな感じ

for($i=1;$i<=12;$i++){
  echo substr('0'.$i, -2) . '月<br>';
}

=================

01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月

全部の月の頭に0をつけて文字列として右から2文字を出力する形です。

別にそれほどエレガントでないかもしれませんが

同じ文字数にそろえたいレイアウトの整形という意味では

非常に的を得た方法ではないかなと思います。

bushimichibushimichi 2010/12/01 10:27 for($i=1;$i<=12;$i++){
echo sprintf('%02d月', $i);
}
こっちのほうが、普通か。。。

2010-11-29

suPHP の Premature end of script headers: の苦悩

16:16 | suPHP の Premature end of script headers: の苦悩を含むブックマーク

suPHP をApacheインストールして、PHPCGI実行させてやろうとしたときに出たエラーメッセージ

Premature end of script headers:

とにかく、何が問題なのかは教えてくれず、どこか悪いといっているようです。

ブラウザをたたいても恐怖のInternetServerErrorだし。

いろいろ原因はあるみたいですが、はじめから設定内容を確認するしかなさそうです。

今回は、php-cgi バイナリーの設定ができていないという致命的なミスがあり

PHPコンパイルしなおすところからやり直しました。(かなり嵌った)

結論:もう少しやさしめのエラーメッセージを希望!

2010-11-12

SugarSyncの無料ストレージ容量が5GBにアップ!

11:34 | SugarSyncの無料ストレージ容量が5GBにアップ!を含むブックマーク

いやはや、この無料のストレージ容量が増えたのはすごくうれしい。

SugarSync


個人的に、DropBoxやらSugarSyncなんかのファイル同期ストレージ

ヘビーに利用しているのでどんどんデータがたまって容量不足にいつも困ってました。

ちょこっと書いたソースやドキュメントをとりあえず同期して

気が向いたら続きを書くといった場所を選ばない開発ができます。

5GBも使えるとほぼ開発環境を丸ごとほりこんでも大丈夫じゃないでしょうか。

どこでも同じ設定で使えるのは開発を始めるときの障壁が少なくなりますしね。

これでもっと開発が楽しくなる予感!


※有料のLiveDrive使って容量無制限のストレージも使ってるけど

ソフトが重たいのが難点。あとLinuxと同期できるとなおうれしい。

2010-10-20

もっと気楽に書こう

10:35 | もっと気楽に書こうを含むブックマーク

ブログを書くのがどうも進まないので、

もう少し、気楽にどうでもいいことも書くようにしようかと思います。

はじめは、技術系の備忘録的な意味で書いてましたが

備忘録といっても、仕事関係はオープンにできないことが多いので

必然的に、汎用的な内容を選ぶことになります。

ただ、それだとネタをそれほど持ち合わせていない私はすぐに窮してしまい

どんどん書かなくなってしまったので書くモチベーションを維持できるよう

適当なことも、もう少し入れていこうかと思います。

「そんなにまでしてなぜブログを書くんだ?」と言われますと

単純に、文章を書くのが苦手なのでそのトレーニングの意味が大きいです。

その中で、ただ書くだけじゃなく技術系のことなら多少知識や経験もあるので

残すと役に立つかなとなんとなく思ったからです。

ただ、実際にはぜんぜん書けてないのでこの有様です。

とにかくエントリーが続けれるようにがんばります。

2010-09-10

DirectoryIndex と mod_rewrite を使うときの注意

| 00:37 | DirectoryIndex と mod_rewrite を使うときの注意を含むブックマーク

DirectoryIndex と mod_rewrite を使うときに / で終わるパス(ディレクトリ)を指定したときの動作には注意が必要です。


mod_rewrite で、index.html → index.php とか index.rb とかしている場合

http://example.com/index.html 

アクセスすると

http://example.com/index.php

と通常はURLリライトされます。ところが

http://example.com/ 

とindex.htmlを省略してアクセスすると

403 forbidden 

が出る場合があります。

http://example.com/ → http://example.com/index.html → http://example.com/index.php

上記のような連続したURLリライトを期待したのですが 403 と怒られました。


どうもこれは、DirectoryIndexの設定で index.html を参照するように設定しているためで

単にURLを index.htmlリライトするのではなく

実際に index.html ファイルの有無を判断するようで

mod_rewirte でURLの書き換えが起こる前に

先にindex.htmlのチェックし、ファイルがないので 403 forbidden となるようです。

手っ取り早く対処するには、ダミーのindex.htmlを置くのが簡単です。

2010-08-26

さくらインターネットで、MySQLを使うときに気をつけたいこと

| 17:24 | さくらインターネットで、MySQLを使うときに気をつけたいことを含むブックマーク

スタンダードプランだとInnoDBストレージがが使えない。

これにはちょっと驚いたけど、FAQに書いてありました。

http://faq.sakura.ad.jp/faq/1032/app/servlet/qadoc?000526

MyISAMだとテーブルロックなので、更新と参照のバランスよっては

問題になる可能性がありますね。

あらかじめ設計時に気をつけたいポイントです。

2010-06-22

PECLでSQLiteをインストールできないとき

| 17:41 | PECLでSQLiteをインストールできないときを含むブックマーク

こちらで紹介されているように、途中エラーで止まってしまう場合の対処

http://blog.plastik.jp/archives/44

上記内容の中で、「ソースを直接編集」の部分がどのファイルを編集するべきか

すぐにがわからなかったのでメモ

-> sqlite.c を直接編集

vi sqlite.c

## Line: 56 行目をコメントアウト /* 〜 */ で囲う
/* static unsigned char arg3_force_ref[] = {3, BYREF_NONE, BYREF_NONE, BYREF_FORCE }; */

## Line: 125, 126 の arg3_force_ref を third_arg_force_ref に変更
PHP_FE(sqlite_open, arg3_force_ref) → PHP_FE(sqlite_open, third_arg_force_ref)
PHP_FE(sqlite_popen, arg3_force_ref) → PHP_FE(sqlite_popen, third_arg_force_ref)

このあと、make && make install でいけました。

2010-06-17

fgetcsv で文字化けする場合

| 14:12 |  fgetcsv で文字化けする場合を含むブックマーク

fgetcsv の仕様が、PHP4 -> PHP5 で変わったらしくLocale に依存するらしい。

日本語が文字化けする場合は、以下のように明示的にLocaleを変更する

  setlocale(LC_ALL,'ja_JP');

fgetcsv 実行前に上記を書けばOK。