読者です 読者をやめる 読者になる 読者になる

必ず===を使うこと

php

if ($k == ‘user_id’) { echo "等しい"; } で$k => 0 のときも「等しい」が表示される。やばいよ、これ。理屈でも分からん。もう絶対に==使うの辞めよう。

utf8の日本語を2バイトにしたければshift_jisに変換すればよい

php

phpのstrlenでutf8のマルチバイトの長さを計ると一文字3バイトでカウントされる。これを2バイトでカウントしたければsjisにすればよいだけ。

日付のフォーマットはdate関数で

php

いっつも忘れるのでメモ。2014/01/05な感じの日付データを2014/1/5な感じに変更したい場合なんだけどdate使えば一発のところsubstrを使っていつもやっちゃう。

php foreachのバグというか気をつける点について

php

これも昔に出くわしていながらよく原因を調べずに今日また同じ問題に遭遇してしまった。

1 == '1a' は true です

php

自戒の念を込めて書く。比較の時は、トリプルイコール(===)使えって散々言われてきたけど面倒くさくていつも==で済ませていた。今日 1 == '1a' がtrueになってヒヤッとした。分かってるつもりで分かっていなかった。適当な性格がこういう所でコーディングに…

csvを読み込むやり方

php

いつも忘れるのでメモしておく

PHPのページャー処理にPearのPagerを使う

php

ずーっと前から気になっていたにもかかわらず自前の微妙なページャーを使っていたんだけど、ようやくPearに用意されているPagerモジュールを使ってみた。以下の様な感じで使う。(CakePHPで利用) 20, "itemData" => $data, "mode" => "Sliding", "prevImg" =…

strtotimeのまずい点

php

3/31に3月を-1 monthした場合、2月にならない3/31 を -1 month -> 2/31 -> 2/28 + 3 -> 3/3 が帰ってくる↓も。基本的に月末はまずい 5/31 -> 5/1 7/31 -> 7/1 10/31 -> 10/13/31に+1monthすると5/1になる。(3/31+1m -> 4/31 -> 4/30+1d -> 5/1)mktime使う…

配列にキーがあるかどうかを調べたいときは、issetではなくarray_key_existsを使う

php

issetはキーがあってもnullだとfalseになるのでその場合は、array_key_existsを使う。 if (array_key_exists("key", $val)) { echo "exists"; } 最初あまりに使っていなくて、array_key_exists($val["key"])とかやってた。あほだ。

PHPで取得したXMLをブラウザでそのままツリー表示したい

php

下記のようにContent-typeをxmlにしないといけない $xml = file_get_contents($xml_get_url); header('Content-type: application/xml; charset=UTF-8'); echo($xml);

PHPでスレッド処理

php

curl_multi系の関数を利用するとphpでスレッド処理っぽいことができるらしい。試してはいないけど。参考サイト PHPでマルチスレッド(バックグラウンド処理)を実現する方法 - EC studio 技術ブログ

ajaxのアクセスしか許可していないサイトへPHPでアクセスする方法

php

ajax通信する際、ブラウザが自動でヘッダーに下記を付与するため、 一般的には下記がヘッダーに含まれているかどうかでajaxによる通信かどうかを判断する。 X-Requested-With:XMLHttpRequest なのでphpで上記のヘッダーを偽装してしまえばajax通信でなくとも…

phpで文字列から数値のみを抜き出す

php

phpのfileとfile_get_contentsとreadfileの違い

php

どれもfopenと違ってファイル内容を一括で読み込む点は同じ それ以外の違いについて fileは配列を返す(行末の改行は除去されないので注意) file_get_contentsは文字列を返す readfileは標準出力する ファイルが無い場合はWarningになるので、@fileとかにする…

PHPでの時間の比較はstrtotimeを使うこと

php

if ('6:44:39' <= '10:44:40') echo "ok";↑のプログラム、OKになると思いますか? 実はokになりませんので注意。 時間の比較はstrtotimeを使うこと。 if (strtotime('6:00:00') <= strtotime('10:00:00')) echo "ok";以下検証

isset()はnullもfalseを返す

php

つい忘れてしまうのでメモ。何も考えずに添字の有無チェックに使わないよう注意。 //こんな感じでチェックすればissetでfalseになっても同じnullだから良いかも $arr = array('a'=>1,'b'=>2,'c'=>null); $var = isset($arr['c']) ? $arr['c'] : null; 定期的…

utf8を使う場合のphp.ini の設定

php

デフォルトのままだとメールで文字化けするので下記設定を行う [mbstring] mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.encoding_translation = Off mbstring.dete…

メール送信の文字化け対応

php

UTF8で記述された丸囲み数字(①)やローマ数字(Ⅰ)をメール送信の際にJISに変換しようとすると、JISがそれらの文字に対応していないため、文字化けが発生する。 それらの文字列を使わないようにするのがベストだけど、そうもいってられないケースの場合は、下記…

array_merge と +演算子の挙動

php

array_mergeと+演算子の挙動を理解していなかったのでメモ。 array_mergeの特徴 キーが数値の場合、0からに振りなおすため、同じキーでも追加する キーが文字列の場合、キーを保持するが同じキーは上書く +演算子の特徴 キーが数値でも文字列でもキーを保…