PHP
ポストされたデータがのなかで指定したパラメータの値のみの配列が欲しいことがよくある。foreach() や array_filter() とかでぐるぐる回さなくても良い方法があった。 http://blog.pixelastic.com/2011/05/11/whitelisting-keys-array/ より
Linux などは、fputcsv() の改行コードが LF になってしまうのだが、 CRLF が望ましい場合が多いので困る。 以下のようにストリームフィルタを使う例が紹介されていた。http://stackoverflow.com/questions/12722894/how-can-i-change-the-line-endings-used…
RecursiveDirectoryIterator を使って削除。 isFile() || $item->isLink()) {…
http://d.hatena.ne.jp/hnw/20090523 より、NoRewindIterator でラップする。
確認する方法はINTサイズを見るのが手っ取り早い。 PHP_INT_SIZE 定数が 4 の場合は 32bit、8 の場合は 64bit となる。
単体テストでは外部リソースへのアクセスは行わないのが基本。もちろんファイルシステムも含まれる。テスト対象コード内にある外部リソースへのアクセス処理は、アクセス先を「モック」に差し替えることで対応できる。 なるべく設計レベルでモックへの差し替…
ApnsPHP でプッシュ通知するのにサーバ側にPEM形式の証明書が必要。 https://code.google.com/p/apns-php/wiki/CertificateCreation証明書を更新するたびに openssl コマンドを打つのも面倒なので、PHP プログラム内で作成できるようにした。ついでに秘密鍵…
PHPで外部プログラムを呼び出すには exec() paththru() popen() proc_open() shell_exec() system() などの関数を使う。shell_exec() は、「実行演算子 バッククォート (``)」 のエイリアスでもある。popen(), proc_open() は、標準入出力をストリームとして…
実際には foreach を使えばいいだけの話だが、 array_map(), array_keys(), array_values() の 3つの関数を組み合わせると、配列のキーと要素に対して処理できる。例: 'valueA', 'b' => 'valueB'); $result = array_map(function ($key, $value) { return …
PHP ソース解析のために必要になった。 定数:get_defined_constants() 変数:get_defined_vars() 関数:get_defined_functions() クラス:get_declared_classes() インターフェース: get_declared_interfaces() 命名規則で "defined" 派と "declared" 派が…
ちまたで人気の Composer を試してみた。http://getcomposer.org/だが、pear 経由では PHPUnit がインストールに失敗する。もしかしたら Composer の不具合かもしれないが、どうやら PHPUnit のpear の管理情報 (packages.json) に問題(?)があるらしい。http…
Pimple とはなんぞや?ということで、ソースコードやドキュメントから、どのようなものかを判断してみた。(つまり実際に動作は確認していないw)Pimple とは、Silex のベースとなっている PHP5.3 上で動作する DI コンテナとのこと。 公式サイト: http://pi…
dbdeploy 並みにシンプルで、PHP でわりと汎用的に使えるマイグレーションツールはないかと探しているところ。 初めは、 http://www.ryuzee.com/contents/blog/4268 を参考に Doctrine1 を試してみたのだが、ORM用ファイルがたくさん生成されるのが気に入ら…
配列演算子の仕様で(使えるかどうかは不明だが)オモシロい?挙動をすることが分かった。http://www.php.net/manual/ja/language.operators.array.php より + 演算子は、右側の配列を左側の配列に追加したものを返します。 両方の配列に存在するキーについ…
指定した月の末日を取得する方法として、 「翌月1日の前日」 というロジックが常套手段だったが、 「指定した月の日数」 という考え方もできる。こちらのほうがシンプル。PHP の場合、 date() 関数のフォーマット "t"を用いて簡単に取得できる。
(参考) http://memorandum.yamasnet.com/archives/Post-217.htmlWebサーバへのリクエストがクローラーかどうかを判定したい。 今回は、リクエストヘッダーの User-Agent で判定する。 get_browser() を使う PHP では、get_browser() 関数を使うと簡単。
Ubuntu 10.10 上で PHP のグラフ描画ライブラリ JpGraph 3.5.0b1 を試してみた。日本語対応するには、 http://blog.syuhari.jp/archives/408 に書いてあるとおりなんだけど、IPAフォントでなくてもいけた。今回は、Takaoフォントを使用してみた。
Debian lenny の PHP セッションは、ファイルを CRON で削除していた。 そして、php.ini の設定で セッションGC は無効な状態だった。php.ini を見ると、コメントで以下のように書かれている。 ; This is disabled in the Debian packages, due to the stric…
PHPでお金をかけずにPDF出力する方法の覚書 によると、 PHPからPDFを出力する方法は大まかに分けて3種類ある。 文字とか画像を座標を指定してページ上にコツコツ配置していく方法 テンプレートとなるwordやpdfファイルの文字列や画像を置換する方法 pdf以外…
http://d.hatena.ne.jp/mikeda/20090228/1235839592より、浮動小数点数(float型)を文字列に変換する場合、printf(), spfintf()を使おう。 結果が意図した書式にならない場合(科学表記)になることがある。 1.0E-5 echo sprintf('%f', $f), "\n" # => 0.00001…
register_global を有効にした場合、パラメータ名にドットがあると不都合があるという理由で、リクエストのパラメータ名にドット(.)が含まれていると無条件にアンダースコア(_)に変換されることが分かった。 この変換ルールは、 $_POST, $_GET, $_COOKIE, $_…
beanstalkd というジョブキュー管理サーバを使って PHP で非同期処理をしてみる。Ubuntu 10.04 にはパッケージが用意してあった。beanstalkd のインストール: $ sudo aptitude install beanstalkd/etc/defaults/beanstalkd を編集: # ↓以下のオプションを有…
64bit 環境で PHP を使うと整数の方が浮動小数の仮数部よりも精度が高いために、== での比較の前に丸め込みが発生し、以下のようなおかしな結果がえられる。 true 今のところ、PHP を使ってこの境界値付近を計算することはないと思うけどね。
PHP_INT_MAX で整数の上限が分かる。徐々に 64 bit 環境が増えてきたので、どのくらい違うのか調べてみた。(32 bit の場合): $ php -r 'echo PHP_INT_MAX, "\n";' 2147483647 (64 bit の場合): $ php -r 'echo PHP_INT_MAX, "\n";' 9223372036854775807 整数…
文字列中に埋められた「絵文字番号」を本来のコードに変換したい。絵文字を出力する方法として、 http://www.trekdevel.net/archives/633 が、ほぼ完璧に要件を満たしてくれている。今回は、以下の制約があるため、自分で実装することにした。 文字コードは…
APC (Alternative PHP Cache) は PHP の実行コードをキャッシュするモジュール。追加するだけでパフォーマンスをアップできる。また、実行コードだけでなく、任意のオブジェクトのキャッシュもできる(最近知った)。http://php.net/manual/ja/book.apc.php …
Debian lenny にて、php をコマンドラインで実行していると、特定のスクリプトで pg_close() 時に "Segmentation fault" が発生してしまう。php5-curl を外せばパーフェクトに動作する。残念だけど、以下のバグが残っているようだ。 http://bugs.php.net/bug…
「mb_encode_mimeheader()に渡す文字列はISO-2022-JPに変換するな。」 http://blog.cheki.net/archives/1125 ということらしい。mb_encode_mimeheader() は、 第一引数:内部エンコードの文字列 第二引数:"ISO-2022-JP" でいいみたい・・・。
PHP 5.2.1 から sys_get_temp_dir() が使える。それ以前なら環境変数から取得する。http://php.net/manual/ja/function.sys-get-temp-dir.php
PHP で環境変数を取得したい場合、$_ENV は、variables_order の設定によって使えたり使えなかったりするので、getenv() を使いましょうというキャンペーンらしい。http://blog.asial.co.jp/316う〜これにはハマりました。INI ファイルで仕様が変わる言語っ…