PHP

binaryへのキャストって……?

PHP

昨日の「NULLへのキャストって……?」ではスルーしたけど、マニュアルの引用部分にあった(binary)も気になった人がいるはず。 型キャスト使用可能なキャストを以下に示します。 (int), (integer) - 整数へのキャスト (bool), (boolean) - 論理値へのキャスト …

NULLへのキャストって……?

PHP

PHPの型キャストは(array)とか(object)とか変態的なのがあるけど、最近(unset)なるものが存在することに気づいた。 unset($var)のことではない。(unset)$varだ。 型キャスト使用可能なキャストを以下に示します。 (int), (integer) - 整数へのキャスト (bool…

素のPHPはもはやテンプレートエンジンとしては使えない

PHP

なんか未だに「PHP自体がテンプレートエンジンなのになんでSmartyとか使うの?」みたいに考えている人がいるようなのでちょっと。 といっても、言いたいことはSymfony開発者でありTwigの現在の開発者*1でもあるFabien氏がこれでもかってぐらいに語っているの…

Mountain LionでPHPのビルド

SSDに入れ替えたタイミングでOSもMountain Lionにアップデートしてみた。 XcodeとCommandline Toolsを入れてHomebrewで各種入れ直すところまではすんなりいったけど、自前のPHPビルドだけうまくいかなくて苦労した。 普通にやると個々のコンパイルは通ってる…

MacBookにPHP環境作ってみた

そういや自宅のMacBookにはPHP環境作ってないなーと思ったので作ってみた。 Mac OS Xには最初からApacheとPHPが入っているのだけど、モジュールとかどうなってるのかよくわからないし、せっかくなら最新版にしたいな、ということでソースからビルドしてみた…

XMLを整形して出力する

PHP

また長いこと放置状態になっていたのでつまらないTipsでお茶を濁してみる。 外部システムの連携なんかをやってるとXMLでデータをやり取りすることがあると思うんだけど、システムが吐いてくるXMLって改行が入ってなかったりするので、デバッグで覗いたりログ…

異なる言語間での暗号化と復号

仕事でデータを暗号化して保存する必要が出てきたので色々調べてみた。 メインのシステムはPHPで作っているんだけど、Javaなども絡んでくるので、お互いが処理できる暗号方式でなければいけない。 仕様さえ明確にしてあればオレオレアルゴリズムでもいいんだ…

PHP用のプロファイラXHProf

PHP

今までPHPのプロファイリングはXdebugとWinCacheGrindを使っていたんだけど、XHProfとかいうのが便利らしい。 ※画像撮るのが面倒だったので、画面は参考サイトなどを参照w まだbetaみたいだけどPECLのプロジェクトになっていて簡単にインストールできる。逆…

エラー抑制演算子を使わざるを得ないとき

PHP

PHP プログラマが "@" を使うべきでない 5 つの理由 - 肉とご飯と甘いもの @ sotarok http://d.hatena.ne.jp/sotarok/20090721/1248112106PHPでエラー抑制演算子@を正当に使ってるなぁと思ったケース - それ図解で。・・・tohokuaikiのチラシの裏 http://d.…

call_user_func_arrayとparent

PHP

可変長引数のメソッドがあって、それをオーバーライドしつつ親クラスの同メソッドを呼び出したかったんだけど、一瞬どうやればよいのか迷ったのでメモ。

str_replaceを配列で使うときの注意

PHP

PHP: str_replace - Manualstr_replace - 検索文字列に一致したすべての文字列を置換する 説明 mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )この関数は、subject の中の search を全て replace に置換します。…

sqlite関数とPDO SQLite

なんかsqlite関数とPDOのSQLiteドライバはSQLiteのバージョン違うのね。 sqlite関数はSQLite2でPDOはSQLite2とSQLite3が使える。 同じ環境で動かしてるのになんでファイルフォーマットがおかしいとか言われるのかと思ったよ。 そしてCakePHPのSQLite DBOはSQ…

生のPOSTデータが取れない

PHP

別に今まさに困っているというわけではないんだけど、PHPで生のPOSTデータが取れなくてどうしたもんだろうと思ったのでメモ。 正確にはContent-Typeがmultipart/form-dataの時に取れない。 まずは$HTTP_RAW_POST_DATAについて。 PHP: $HTTP_RAW_POST_DATA - …

extensionの読み込み順でハマった

PHP

php_exifエクステンションを有効にしたら、また昨日みたいに動かなくなった。 しかも今度はコマンドラインですらエラーが出る始末。 php_mbstring.dll が見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションをインストール…

指定されたモジュールが見つからないとか言われる

Windows上に開発環境なんて作ったこと無かったので微妙にはまった。 PHP自体はWindowsでもコマンドライン上で使ってはいたんだけど、Apache入れてMySQL入れて、なんてのはLinuxでやるもんなぁ。 構成 各インストール場所はこんな感じ。C:\Program Filesとか…

PHPのソートとかarray_uniqueの挙動

PHP

少し前にPHP 5.2.9でarray_uniqueの仕様が変更されてアレだって話が話題になっていたが、今のプロジェクトでもそれが問題に上がった。悩ましい。 array_unique関数がPHP5.2.9から後方互換性を失いました - hnwの日記 http://d.hatena.ne.jp/hnw/20090228 上…

URL形式のストリームフィルタで文字コード変換ができない

PHP

以前、ストリームフィルタで文字コード変換してみるというエントリを書いたんだけど、今回別の方法でフィルタを使おうと思ったらハマったのでメモ。 前回はstream_filter_prepend/append関数でストリームのリソース(ハンドル)に対してフィルタを追加したん…

Group-Office 3.0を入れてみた

日本語化パッチ等が存在するのは2系なんだけど、最新リリースの2.18が2007年10月と古い(のと、日本語化パッチが微妙だった)ので思い切って3系を入れてみた。 一言で言うと別アプリのようだった。2系から3系へのアップグレードもサポートしているようなので…

mbstring.func_overloadの罠

PHP

mbstringを愛用している日本のPHPerならphp.iniのmbstringセクションで必ずと言っていいほど目にする設定、mbstring.func_overload。 これを有効にするとmail()やstrほげほげ()がmb_send_mail()やmb_strほげほげ()にオーバーロードされて、mail()関数を呼び…

ストリームフィルタで文字コード変換してみる

PHP

PHPでもJavaやその他の言語のようにストリームにフィルタを挟むことが出来るようだ。 これを使うと透過的に圧縮処理を行ったり、Base64変換を行ったり、文字エンコーディング変換を行ったりできるとのこと。 公式マニュアルのストリーム関数をざっと眺めてみ…

PHPの内部では変数をどのように扱っているのか知る

PHP

PHPが内部的に変数をどのように保持していて、どのように処理しているのかをこれ以上にないぐらいわかりやすく解説している記事がある。 特にリファレンスがどのように扱われているのかが例を挙げながら詳しく書かれているので、(PHPが好きか嫌いかはさてお…

PHPはコマンド実行関数多すぎだろ

PHP

backtick演算子(バッククォートで実行するやつ) shell_exec() exec() passthru() system() pcntl_exec() popen() proc_open() このうちbacktick演算子とshell_exec()は等価らしい。 ……どれ使えばいいんだyp! といつも思うので、実際に試してみた。 shel…

日の出/日の入り時刻が標準機能とか……これだからPHPは(ry

PHP

PHPのマニュアルを眺めてたら日の出とか日の入りの時刻を取得する関数があったんだけど、こんなん誰が使うんだよ(;´Д`) 少なくとも標準で組み込まれてる必要ねーだろうよ。 そもそもどうやって計算してるんだ? どれだけの精度があるんだ? 日の出/日の入り…

コマンドライン引数の処理あれこれ

PHP

PHPといえば「ほーむぺーじ」を作るためにあるような言語なわけだが、何故か自分はコマンドラインアプリを作る機会が多い*1ので、引数のパースについて少し考えてみる。 対象ファイルとスイッチのオンオフ程度なら$argvを回しながら自前でパースしても事足り…

register_globals()が無くなると聞いて

PHP

register_globals.php

PHPスクリプトの文字エンコーディング

PHP

php.iniのmbstring.internal_encodingやmb_internal_encoding()はPHPスクリプト自体の文字エンコーディングとは関係ない。 これらはmbstring系の関数が内部で処理するためのエンコーディング指定だ。 なのでinternal_encodingにShift_JISを指定したからとい…

mb_regex_encoding()でJISが指定できない

PHP

少し前に「マルチバイト対応の文字列折り返し処理」というエントリを書いたけど、その中でpreg_split()だとうまくいくのにmb_split()だとうまくいかない処理というのがあった。 で、今日たまたま似たような処理を書いていたんだけど、何故かmb_split()でもう…

ArrayObjectで指定できるフラグ

PHP

SPLのArrayObjectはコンストラクタの第二引数やsetFlags()でフラグを指定できるのだが、これの意味がよく分からなかったので調べてみた……けどやっぱりよくわからなかったので実際に試してみた。 コンストラクタの説明を見ると「setFlags()を見ろ」と書いてあ…

マルチバイト対応の文字列折り返し処理

PHP

一行n文字で自動的に折り返しする処理が必要になったのでその辺から拾って済ませようと思ったら、マルチバイト文字をきちんと処理できないものばかりで困った。特に半角カナとか記号が鬼門。 というわけで仕方なく自分で作った。 業務で必要なものだったから…

parse_ini_file()は定数の影響を受ける罠

PHP

PHP: parse_ini_file - Manual定数も ini ファイル上でパースされます。 そのため、parse_ini_file() をコールする前に ini ファイル上の値として定数を定義した場合、返り値に統合されます。 ini ファイル上の値だけが評価されます。(from http://jp.php.n…