PHP

hidefを試す

PHP

一流のペチパーとやらにもなれば、「PHPのdefineはコストが高いからねー」とドヤ顔で語りつつ hidef なるものを使うらしい。 http://pecl.php.net/package/hidef しかし、"PHP hidef"とかでググっても、インストールの仕方とかごく基本的なことはともかく、h…

serializeしたオブジェクトの継承元が変わったらunserializeできるのか?

PHP

疑問点。PHPにおいてオブジェクトをserializeし、その後そのオブジェクトの継承関係が変わったら、正しくunserializeできるのか?検証コード。親クラスなしのDogというクラスのインスタンスをserializeしたファイルに書きだした後、Dog name = $name; } publ…

チラシの裏

PHPのMemcache::deleteがなぜかfalseを返す・・・と思って調べていたのだが、 http://jp2.php.net/manual/ja/memcache.delete.php これか・・・・!? the Memcache::delete(key) function is broken on several combinations of memcached+pecl-memcache co…

yaml拡張の奇妙なバグ?

【追記】バグではなく、YAMLの「落とし穴」らしいという結論に達しつつあります。PECLのyaml拡張はナウでヤングなPHPerが腐りきったSpycやSyck拡張のかわりに使うらしいYAMLライブラリ。が、 int(12) [1]=> int(1) }のような出力結果になる。 CentOS 5.5 PH…

Facebookのコードレビューツール

WHAT IS ARCANIST?Arcanist is the CLI for Facebook's code review tool, Differential. Since Differential isn't released yet, it may not be terribly useful on its own. https://github.com/facebook/arcanist ということなので、ArcanistはFacebook…

セッションIDの作り方

メモ。 PHP REMOTE_ADDR, 現在の秒数, 現在のミリ秒, (0, 1)の範囲のランダムなdoubleを結合してランダムな文字列を作る session.hash_functionで指定されたハッシュアルゴリズム(MD5 or SHA-1)でdigestをする session.entropy_lengthが0以上が指定されてい…

PhpRedisのlists, sets関数にハマった話

PhpRedisとRedis 1.2.6で、 connect('127.0.0.1', 6379); if ($redis->rPush('php', 'sucks')) { // do someting } のようなコードを書こうとしたら、rPushがfalseを返してきて困った。rPushだけではなく、lists, setsの操作メソッドは軒並み駄目。しかし、…

Symfonyを書くのが楽しくなるTip

symfonyには"symfony cc"なる、僕のような初心者には何をやっているかよく分からないコマンドがあって、僕のような初心者はこれをタイプするたびに「symfony ccって何だよ。symfony(笑)」と思わずニヤリとしてしまって、そういうわけでなんやかんやでsymfony…

nginxでPHPを動かす

業界標準のCentOSで皆の大好きなPHPを皆の大好きなnginxで動かす。大前提としてnginxでPHPを動かすならば選択肢はFastCGIということになる。php-fpmというものがあるらしいが、できるだけ標準・準標準のRPMを使うことを考える。まず、CentOSの標準のPHPは--e…

誰が得するのか分からない

php_app - PHP eval server for Erlang/OTP http://github.com/skeltoac/php_app clone&ビルド。 $ git clone git://github.com/skeltoac/php_app.git $ cd php_app $ erl 1> make:all(). PHPを実行するサーバーを起動。 2> php:start(). PHPコードを実行。 …

The Return of Gearman

Eric Day氏による興味深いスライド。 Gearman and libdrizzle Slides The Return of Gearman(PDF) C版のGearmanライブラリとそれを利用したMySQLのUDF, PHP拡張について非常によくまとまっている。特に、UDFを利用したクローラーの例が参考になる。 MySQLに(…

MIME文書を解析する

Pythonで書けばこれだけのことだけど、 import sys from email import message_from_file msg = message_from_file(sys.stdin) for part in msg.walk(): tp = part.get_content_maintype() if tp == 'text': pass elif tp == 'image': pass elif tp == 'vide…

メールの送信にPEARのMailパッケージを使う

PHP

ちょっと気になって、PEARのMailとMail_mimeを調べていたのだが、普通に使えるライブラリっぽいので驚いた。PHPのmail関数とか、mb_send_mail関数とかは、今となってはどのように使うのか全く分からないし、何のために存在しているのか全く分からないが、PEA…

ネストしたループを抜ける

PHP

id:cocoitiにPHPでネストしたループ構造を抜けるには"break (ループ構造数)"を使うということを教えてもらいました。これは本当に知りませんでした。Live and learn !

終了タグ

PHP

久しぶりにPHPを触りました。しかもZend Framework。 Zend Frameworkを触っていて、「PHPの終了タグは省略できるようです inspired by phpspot開発日誌」というネタを思いついたが、微妙に既出なのかもしれない・・・ PHPの終了タグは省略できるようです htt…

焼肉デビュー

PHP

id:rskyさんを囲む会に潜入し、待望のPHP焼肉デビューを果たしました!

どうでもいい日記

PHP

久しぶりにPHPを触ると、mbstring.http_input, mbstring.http_output, mbstring.internal_encodingとかわけ分かんねーよ!

PHPプログラマにありがちだと思うこと

PHP

ふと思いついたので書き留めてみる。 別に他意はありません。 みんな自分のフレームワークを作っている。 みんな自分のORMを作っている。 「でも結局はSQLを直接書くよね」と言う。 みんな自作のテンプレートエンジンを作りたいと思っている。 実際に作っち…

Djangoプログラマから見たCatalyst, Symfonyの良いところ

最近、自分でCatalystで遊んだり、自分の周りで「空前のSymfonyブーム」が起きている??関係で、非PythonのWebフレームワークを触っています。備忘録がわりに、Catalyst, Symfonyがよいと思った点をメモしておきます。 Catalyst Catalystを完全に理解したと…

Picora

PHP

偶然発見したPHPのフレームワーク"Picora". これは本当に短いです。フレームワーク本体のコード行数は600行弱で、しかもその半分くらいはPHPDocのコメントです。 Picora - PHP Micro Framework http://livepipe.net/projects/picora/ そのかわり機能は限定さ…

デバッグフィルタ

そろそろ「サンプル・アプリケーションを動かすには?」、「画面が真っ白になって何も現れません!」という段階から脱するべきだと思い、Django風のデバッグ用エラー画面をOutputFilterとして書いてみています。 piece posted by (C)perezvon>

ファイルアップロード

だいぶ前に実装していて、すっかり忘れていました。 継続ベースのファイルアップロード機能 http://trac.piece-framework.com/piece-unity/ticket/47 この件、あとはテストコードを完全なものにするだけなので、当てにしていてください!サンプル・アプリケ…

そろそろ本気でSmartyを使いたい(3)

しばらくPieceから離れると、__flowExecutionTicketKey, __flowExecutionTicketというキーの名称を忘れてしまう。 そもそも__flowExecutionTicketは長い。 XMLHttpRequestで画面遷移を行ったり、EnterでフォームがSubmitされてしまう挙動を防ぐためのJavaScr…

そろそろ本気でSmartyを使いたい(2)

<form method="post"> <input type="hidden" value="{$__flowExecutionTicket}" name="{$__flowExecutionTicketKey}" id="flowExecutionTicket" /> <p> {piece_submit name="confirm" value="Back"} {piece_submit name="save" value="Save"} </p> </form> 上のようなテンプレートを書いたときに、 <form method="post"> </form>

そろそろ本気でSmartyを使いたい

Piece FrameworkではSmartyはなんだか使い難く、「関西方面ではFlexyを使っているんだろうな」と思いながら、騙し騙しSmartyを使い続けてきたのですが、Pieceで快適にSmartyを使うために、そろそろ本気で取り組んでみようと思います。(でも、もしかしたら、S…

PieceFramework Cheatseat

PHP

プラグイン設定ポイント KernelConfigurator キー 説明 デフォルト値 eventNameKey イベント判定用パラメータのキー _event autoloadClasses ? array() eventName 現在のリクエスト内でのイベント null(通常は_GET or _PORTから自動取得) importPathInfo ? f…

PHPプログラマ宣言

PHP

なんだか煮詰まってきたのと、しばらくさぼっている間にPiece Frameworkがパワーアップしているのと、それに、まだ公にできない神秘的・思想的理由により、しばらくPHPのプログラムを書く事にします。期間は、高階関数やジェネレータが恋しくなるまで。 以下…

YAMLラッパー

PHP

PHPでYAMLを扱う際に、SpycとSyckを意識したくないので、ラッパー・ライブラリを書きました。機能、特徴は、 エラー処理はPEAR_ErrorStackで。 Syckが使用できれば、そちらを使う。 spyc.php, spyc.php5の面倒を見てくれる。 こんな感じで使用します。

Session, Flowの中でファイル・アップロードを扱う

PHP

PHPオブジェクトの特殊メソッドに__wakeupと__sleepというものがありますが、あまり有効に利用されていないような気がします。 __sleepを利用した例として、次のような事例を考えてみました。 PHPのファイルアップロードで作成されるテンポラリファイルは、…

Oh please

PHP

コメントは積極的に書こう。例えば、PEAR::HTML_AJAXのこのコードのように。 // HTML/AJAX/JSON.php line 155 // oh please oh please oh please oh please oh please if(function_exists('mb_convert_encoding')) return mb_convert_encoding($utf16, 'UTF-…

PHPでJSONをエンコードする

PHP

PHPでJSONのエンコードを行う拡張・ライブラリとしては、以下のようなものがあります。 php-json Jsphon(なんて読むの?) HTML_AJAX Services_JSON Zend Framework 他言語環境でJSONを確実に扱うには、文字列をユニコードで出力しなくてはなりません。上記の…

PieceとJSON/JSONP

PHP

PHPのWebフレームワークのAJAXへの対応状況はまちまちで、どれもAJAXを通して応答を返すことをアプリケーション開発者が意識しなくてはならなかったり、かなり泥臭い対応をしなくてはならなかったりします。 Piece Frameworkは現時点で、AJAXやJSON/JSONPと…

iconvで文字エンコーディングを変換する

PHP

PHPの文字エンコーディングに関する処理は、mbstring関数を使うのが一般的でしょうが、環境によってはmbstring関数が使えず、iconv関数しか選択肢がないこともあります。 iconvはmb_convert_encodingとパラメータの取り方が違い、しかも変換結果も異なること…

年齢0x1Aは有効な値か?

PHP

会員登録などのフォームで、「年齢」等、整数を要求するテキストフィールドあるとします。ここに"0x1A"と入力した場合、検証エラーとして処理を止めるべきでしょうか。それとも自動的に10進数に変換して処理を続行するべきでしょうか。 いくつかのフレームワ…

Zend PHP Certification

PHP

PHPの暗黙の型変換についてPHPの公式リファレンスで再確認していたのですが、いままで知らなかったことも勉強できて、なかなか有意義でした。例えば、is_numeric関数がローケルに左右されるとか。 【追記】is_numericがローケルに左右されるというのは勘違い…

HTML_TagCloudのProposalに関して思ったこと

PHP

HTML_TagCloud 0.1.1(beta)がリリースされました。 HTML_TagCloudは少し前に遊んでみたのですが、なぜPHP4のサポートをしていないのが不思議に思っていました。 今回、ふとPEARのProposalに対するコメントを眺めていて(Proposalと投票が行われたのははだいぶ…

Fileinfo拡張を使う

PHP

PHPでファイルのContent Typeを調べる方法としては、mime_content_typeを使うといった手段がありますが、Mimetype 関数Pのリファレンスには、 この拡張モジュールは廃止予定です。PECL の Fileinfo 拡張モジュールが、同等の機能(に加えてそれ以上の機能)…

Smartyのプラグイン関数

PHP

僕がSmartyに触りだしたのはEthnaを使い始めてからなので、Smarty歴は1年未満と(その前は主にHTML_Template_Sigma, HTML_Template_Flexyを使っていました)、非常に短いのですが、最近Smartyも結構使えるんだなというのを実感しています。 Smartyについて知ら…

Piece勉強会

PHP

遅くなりましたが、18日のPiece勉強会@アシアル様に参加された方、お疲れさまでした。 非常に貴重な機会を頂き、非常に勉強になりました。 正直、PHPディベロッパーとしての自分の立ち位置は微妙だと自分では思っているのですが、多少PHPに対して希望を持て…

Piece FrameworkはRESTに対応しうるか?

PHP

Piece Frameworkをつかって、Tropyクローンを作りました。まだ、いろいろ実験中なので、もう少し安定してからソースを公開したいと思います。 Piece Frameworkに初めて出会ったときに、こういうことができるなと予想していたことが幾つかあったのですが、Tro…

SyckをMac OSXにインストールする

Piece Frameworkを触り始めてから、YAMLを使う機会が増えたので、Spycだけでなく、Syckも試してみることにしました。 PHP拡張モジュールのビルドとインストールには「プログラマーのための YAML 入門」のこの記事が参考になります。 さらに、Mac OSXの場合、…

Piece Frameworkで独自レンダラを使う

PHP

Webアプリケーションを開発していると、同じデータを異なる形式で出力したいということが多々あります。例えば、通常はブラウザで閲覧しているけれども、その内容をExcel、 PDFでダウンロードしたい、という様な状況です。 エントリポイント内でレンダラを独…

Piece Frameworkで独自のプラグインを作る

PHP

Piece_Unity_Plugin_Factory::addPluginDirectoryを使うと、PEARでインストールしたディレクトリ以外に、Piece_Unityのプラグインを置くことができます。 KernelConfiguratorプラグインが提供する設定ポイントpluginDirectoriesを使うのが推奨のようです。詳…

Piece FrameworkでRenderer_Redirectionを使う

PHP

Piece FrameworkでURLリダイレクトをさせるやり方が気になったので、調べてみました。http(s)で始まるビューを指定すると、Renderer_Redirectionを使ってリダイレクトさせることができます。 ある状態に達したら必ずリダイレクトさせる場合は、フロー定義の…

Piece Frameworkのテンプレートの定義済みの変数

Piece Frameworkでテンプレートを記述する場合、有用な(むしろ必須の)変数がいくつか定義されています。 Dispatcher_Simple, Dispatcher_Continuationで利用可 __eventNameKey サーバに返されるイベント名を識別するための文字列です。もっとも一般的な使い…

Piece Frameworkを導入する

PHP

Piece Frameworkを使って簡単なWebアプリケーションを作ってみたいと思います。 まずはおなじみのHello Worldです。 インストール 公式ページのドキュメントに従ってインストールします。 pear channel-discover pear.hatotech.org pear install hatotech/Pi…

LL Ring「君ならどう書く」のEthnaアプリケーションを試してみる。

PHP

LL Ringには参加できなかったが、ここのトラックバック元の記事を眺めたり、GREE Labsで公開されているEthna製アプリケーションを試してみると、多少どんなイベンドだったのか分かったような気になる。 さて、そのEthna製のアプリだが、なんと言うか、ひどい…

HTML_TagCloud

PHP

HTML_TagCloudは自分で使ってみると面白い! 今まで、いろいろなサイトで同じようなギミックが使われているのを見て、目障りに感じることもあったが見方が変わった。意図的に情報を発信したい、取得したい者にとっては効果的だ。 それはともかく、PEARに提案…

Mac OS XにAPCを導入する

PHP

PHP4.4.4を入れたのを機にAPCを導入しました。 sudo pecl instal APC だけでダウンロード、ビルドが完了。 あとは、php.iniの末尾にでも apc.enabled=1 apc.shm_segments=1 apc.optimization=0 apc.shm_size=128 apc.ttl=7200 apc.user_ttl=7200 apc.num_fil…

MacにeAcceleratorをインストールする

PHP

PHPを使っていると、どうしてもPEARを使いたくなるが、PEARをインクルードすると明らかに重くなる。これは多数のPHPファイルをバイトコードに変換するのに時間がかかるためだ。 そんな状況で有効なのが、PHPファイルをあらかじめバイトコードに変換しておく…