2010-12-10
Web製作でよく使うPHP変数の値有無判定関数
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のゼロに注意
PHP | |
$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の設定
ネットワークの設定もひと通りすませて
いざPINGを飛ばしてレスポンスを確認したときに
まったく応答がなく四苦八苦したときは、
接続先のiptablesを確認してみることをおすすめします。
無用な接続を弾くためにiptablesをしっかり設定したつもりが
接続許可する予定のクライアントまで遮断していたなんてことはないですか?
とりあえず、PINGが通らないときは、/etc/init.d/iptables stop してみましょう。
それでも通らないときはどこかネットワークが切れてると思います。
ネットワークがつながらないときは無限あり地獄のような
出口の見えない焦燥感に苛まれますので、誰かのお役に立てば幸いです。
2010-11-30
月、日の桁数をそろえたい時にsubstrの便利な使い方
PHP | |
月とかカレンダーの日を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文字を出力する形です。
別にそれほどエレガントでないかもしれませんが
同じ文字数にそろえたいレイアウトの整形という意味では
非常に的を得た方法ではないかなと思います。
bushimichi
for($i=1;$i<=12;$i++){
echo sprintf('%02d月', $i);
}
こっちのほうが、普通か。。。
2010-11-29
suPHP の Premature end of script headers: の苦悩
suPHP をApacheにインストールして、PHPをCGI実行させてやろうとしたときに出たエラーメッセージ
Premature end of script headers:
とにかく、何が問題なのかは教えてくれず、どこか悪いといっているようです。
ブラウザをたたいても恐怖のInternetServerErrorだし。
いろいろ原因はあるみたいですが、はじめから設定内容を確認するしかなさそうです。
今回は、php-cgi バイナリーの設定ができていないという致命的なミスがあり
PHPをコンパイルしなおすところからやり直しました。(かなり嵌った)
結論:もう少しやさしめのエラーメッセージを希望!
2010-11-12
SugarSyncの無料ストレージ容量が5GBにアップ!
いやはや、この無料のストレージ容量が増えたのはすごくうれしい。
個人的に、DropBoxやらSugarSyncなんかのファイル同期ストレージは
ヘビーに利用しているのでどんどんデータがたまって容量不足にいつも困ってました。
ちょこっと書いたソースやドキュメントをとりあえず同期して
気が向いたら続きを書くといった場所を選ばない開発ができます。
5GBも使えるとほぼ開発環境を丸ごとほりこんでも大丈夫じゃないでしょうか。
どこでも同じ設定で使えるのは開発を始めるときの障壁が少なくなりますしね。
これでもっと開発が楽しくなる予感!
※有料のLiveDrive使って容量無制限のストレージも使ってるけど
ソフトが重たいのが難点。あとLinuxと同期できるとなおうれしい。
2010-10-20
もっと気楽に書こう
ブログを書くのがどうも進まないので、
もう少し、気楽にどうでもいいことも書くようにしようかと思います。
はじめは、技術系の備忘録的な意味で書いてましたが
備忘録といっても、仕事関係はオープンにできないことが多いので
必然的に、汎用的な内容を選ぶことになります。
ただ、それだとネタをそれほど持ち合わせていない私はすぐに窮してしまい
どんどん書かなくなってしまったので書くモチベーションを維持できるよう
適当なことも、もう少し入れていこうかと思います。
「そんなにまでしてなぜブログを書くんだ?」と言われますと
単純に、文章を書くのが苦手なのでそのトレーニングの意味が大きいです。
その中で、ただ書くだけじゃなく技術系のことなら多少知識や経験もあるので
残すと役に立つかなとなんとなく思ったからです。
ただ、実際にはぜんぜん書けてないのでこの有様です。
とにかくエントリーが続けれるようにがんばります。
2010-09-10
DirectoryIndex と mod_rewrite を使うときの注意
Apache | |
DirectoryIndex と mod_rewrite を使うときに / で終わるパス(ディレクトリ)を指定したときの動作には注意が必要です。
mod_rewrite で、index.html → index.php とか index.rb とかしている場合
http://example.com/index.html
にアクセスすると
http://example.com/index.php
http://example.com/
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を使うときに気をつけたいこと
MySQL | |
これにはちょっと驚いたけど、FAQに書いてありました。
http://faq.sakura.ad.jp/faq/1032/app/servlet/qadoc?000526
MyISAMだとテーブルロックなので、更新と参照のバランスよっては
問題になる可能性がありますね。
あらかじめ設計時に気をつけたいポイントです。
2010-06-22
PECLでSQLiteをインストールできないとき
PHP | |
こちらで紹介されているように、途中エラーで止まってしまう場合の対処
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 で文字化けする場合
PHP | |
fgetcsv の仕様が、PHP4 -> PHP5 で変わったらしくLocale に依存するらしい。
日本語が文字化けする場合は、以下のように明示的にLocaleを変更する
setlocale(LC_ALL,'ja_JP');
fgetcsv 実行前に上記を書けばOK。




if($a) $a='hogehoge';
||<
if文の { をつけずに書いたらほぼ同じか。。。