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

k-holyのPHPとか諸々メモ

Webで働くk-holyがPHP(スクリプト言語)とか諸々のことをメモしていきます。ソースコードはだいたいWindowsで動かしてます。

Silex + Volcanus_Csv + PDO_SQLiteユーザー定義関数で KEN_ALL.CSV と戦う(準備編)

CSVファイルの入出力用ライブラリ Volcanus_Csv を使ったシリーズ記事 CSVファイルの入出力処理用ライブラリ Volcanus_Csv を公開しました SilexでVolcanus_CsvとStreamedResponseを使ってCSV出力・Content-Dispositionヘッダの設定方法いろいろ Silex + PDO…

Silex + PDO + Volcanus_CsvでSQLiteに郵便番号データを取り込んでみた

先日、CSVファイルの入出力用ライブラリ Volcanus_Csv を公開しました。CSV処理クラスを作成した者の宿命として、まずは全国の郵便番号データ…悪名高き「ken_all.csv」と戦ってみるつもりでいたのですが…。どうやら全国多数のプログラマ達の怨嗟の声を受け z…

SilexでVolcanus_CsvとStreamedResponseを使ってCSV出力・Content-Dispositionヘッダの設定方法いろいろ

先日公開したCSV入出力用ライブラリ Volcanus_Csv ですが、実際に使わないと改善点も見えてこないので、あれこれやってみます。今回は Silex で Volcanus_Csv のレスポンス出力を利用せず、通常のコントローラと同様に Response オブジェクトを利用してみま…

CSVファイルの入出力処理用ライブラリ Volcanus_Csv を公開しました

CSV形式ファイルの入出力処理を簡潔に行うためのPHPクラスライブラリ Volcanus_Csv を公開しました。データベースから取得したデータのCSV形式でのエクスポートや、CSV形式ファイルからのデータベースへのインポートにおいて、簡潔かつ柔軟に対応できること…

Gehirn (ゲヒルン) RS2を使ってみたメモ その2 Silex + MySQL

Gehirn (ゲヒルン) RS2を使ってみたけどPharファイルが使えないと思ったら使えるようになった件 の続き。 今回はSilexからMySQLを使ってみます。事前準備として、Gehirn WebServices ControlPanel にてデータベースを作成する必要があります。 コントロール…

Gehirn (ゲヒルン) RS2を使ってみたけどPharファイルが使えないと思ったら使えるようになった件

こちらの記事 22歳のセキュリティーコンサルタントが立ち上げたのはたった315円で利用できるインフラサービス で知った Gehirn RS2 というサーバレンタルサービス。 クラウド環境のレンタルサーバで、いわゆるPaaSになるんでしょうか? 独自ドメイン対応、複…

Silex + OptionsResolver で FizzBuzz パラメータ編

Silex + OptionsResolver で FizzBuzz の続きです。前回のサンプルだとSilex使っている意味がないので、パスで指定された値を使ってFizzBuzzを実行するよう、エントリスクリプトを書き換えました。"/{var}/{type}" という2つのパラメータを含んだパスへのGET…

Silex + OptionsResolver で FizzBuzz

Symfony2.1からOptionsResolverというコンポーネントが追加されましたが、連想配列によるオプション引数を扱うのに便利そうなので、こちらの記事を参考に試してみました。OptionsResolver を使って FizzBuzz 問題に取り組む - Sarabande.jpついでに、長い間…

WindowsでStagehand_TestRunnerの設定ファイルとカラーリングを有効にしたメモ

諸々の事情でまだ業務においてはCIはおろか自動テスト環境も整っていないんですが、クラスライブラリの開発ではいつも Stagehand_TestRunner を使った自動テストを行っています。V3になってから全面的にSymfonyコンポーネントを採用され、コマンドやオプショ…

キーでarray_filter()する方法とIMAGETYPE定数から得られる情報

PHP

イテレータよりも配列大好きなPHPerは array_filter() を愛用していることと思いますが(?)、PHPには配列のキーでフィルタかける関数がないのが残念なところです。何か代替案はないかと思って調べたところ、array_intersect_ukey() を使って実現できました…

SplFileInfoのメソッドとファイルシステム関数の比較調査メモ

PHPマニュアルの説明を読んでも違いがよく分からない SplFileInfo のファイル名やパスを取得する類のメソッドを、ファイルシステム関数と比較調査したメモです。SplFileInfo::__construct() の説明には "file_name で指定したファイル用の新しい SplFileInfo…

出力バッファリングとシャットダウン関数でエラー処理してみた

PHP

auto_prepend_fileで既存コードに手を加えずエラー発生時の処理を変更する方法の続きです。参考リンク紹介するだけというのもなんなので、シャットダウン関数を併用したエラー処理について試してみました。 試行錯誤する中で、どうにも無名関数だけでやるの…

auto_prepend_fileで既存コードに手を加えずエラー発生時の処理を変更する方法

PHP

PHPではエラー発生時も普通にレスポンスヘッダでステータス200を返しますが、それだと困るという場合もあるかと思います。 PHPの設定ディレクティブに auto_prepend_file という、全てのスクリプトが読み込まれる前に別のスクリプトを自動で差し込める機能が…

SymfonyのFinderコンポーネントを使ってみた

今まで、ディレクトリ内ファイルの再帰処理にはSPLの RecursiveDirectoryIterator + RecursiveIteratorIterator 、フィルタ処理が必要な場合は RecursiveFilterIterator 、独自ソートが必要な場合は SplHeap を継承という感じで組み合わせて使っていたんです…

BEAR.Sundayを触ってみたメモ (3)はじめてのページリソース

※この記事は2012年7月19日時点のsandboxアプリケーションを元に書いたものなので、あまり参考にはなりません。BEAR.Sundayを触ってみたメモ (1)インストール BEAR.Sundayを触ってみたメモ (2)はじめてのアプリケーションリソース の続きです。今回は はじめ…

BEAR.Sundayを触ってみたメモ (2)はじめてのアプリケーションリソース

BEAR.Sundayを触ってみたメモ (1)インストール の続きです。2つ用意されているチュートリアルのどちらにしようか考えましたが、DBありきではなく簡単なアプリケーションリソースの作成からやった方が、リソース指向を謳うBEARらしいかなと思い、"はじめての"…

BEAR.Sundayを触ってみたメモ (1)インストール

BEAR.Sundayを試してみる人が増えてきたので、自分も試してみました。 以前(dev2)はWindowsではうまく動かせずインストール途中で挫折してしまったのですが、今回はどうでしょうか。手順は公式Wikiを参考に http://code.google.com/p/bearsunday/wiki/Instal…

Composerの使い方を調べたメモ(3) 名前空間を使わないPSR-0準拠のライブラリをオートロード

名前空間を使わないPSR-0のライブラリをComposerのオートローダで利用する方法について調べたメモです。英語が不得手な自分は、マニュアルのサンプルを眺めながら試行錯誤を繰り返すしかないわけで、トンチンカンなことをやってる/書いてるかもしれないと、…

Composerの使い方を調べたメモ(2) GitHubのリポジトリをPackagistに登録してcomposerでインストール

Composerの使い方を調べたメモ(1)の続きです。 ライブラリ側のcomposer.jsonの書き方を調査する成り行きで、Githubに登録しているバリデーションライブラリをPackagistに登録し、composerでインストールしてみました。composer.json require にPHP 5.3.3以上…

Composerの使い方を調べたメモ(1)

Composer の使い方を調べたメモ。 Ryuzee.comの記事で分からなかった部分を実際に使って試してみました。 以下、内容はほぼ推測なので、間違いがあれば指摘していただけると嬉しいです。composer.json 上記の定義で "php composer.phar install" した結果、s…

Fileinfo関数でMIMEタイプを取得する

Fileinfo関数は以前はPECL拡張モジュールでしたが、PHP5.3.0以降は特にCライブラリの追加も必要なく、デフォルトで有効になってます。 今回、初めてこの関数をWindows版で使ってみたメモです。サンプルコード ソートとか余計な処理も入ってますが、Recursive…

filesize()関数における2GBの壁と4GBの壁

filesize()関数におけるというか、要は32bit整数の話なのですが。 マニュアルにもある通り、filesize()関数は2GBを越えるファイルについては期待通りの値を返さない場合があります。 PHP filesize - Manual今まで2GB超のファイルに対してファイルシステム関…

エラーハンドラが原因でSmartyのエラーが発生していた件

Smarty(3.1.8)を使っていますが、いつからかこんなエラーが発生するようになりました。 'filemtime(): stat failed for /path/to/compiled_template.html.php' in /path/to/vendor/Smarty/sysplugins/smarty_resource.php on line 693エラーメッセージから、…

Windowsでwgetとcomposer

今更ながら Composer というものを使ってみようと思い立ち、Windows7でwgetコマンドとcomposer.pharを使ってみたメモです。検索してみたら、GNU toolsのWindows版プロジェクト「GnuWin32」にwgetコマンドが移植されていることが分かったので、まずはそちらを…

Windows環境でGrowlによるStagehand_TestRunnerのテスト結果通知

なんかMacユーザの皆さんがGrowl Growlって言ってるけど…どーせWindowsじゃ使えないんでしょ、って勝手にやさぐれてたら、実はWindows用のクローンがあったんです。(今更気付きました…)そろそろ、エディタの裏で動いてるStagehand_TestRunnerのAutotestを…

XAMPPでPEARを入れ直した件、環境変数PHP_PEAR_SYSCONF_DIRを忘れずに

PHP

Apache 2.4のWindows版バイナリがApache Loungeに公開されてると知って、Windows7でApache 2.4 + PHP5.4環境に挑戦したものの、どうにも安定動作させられませんでした。 時間的な余裕もないので、とりあえずXAMPPのバージョンを1.7.4(PHP 5.3.5)から1.7.7(PH…

値をセットした時に任意のフィルタ処理を行うアクセサクラス

PHP

フレームワークのコードをななめ読みしていると、getterとsetterを兼ねた短い名前のメソッドが使われている例を、ちょくちょく見かけます。 たとえばJava風なら getName(), setName('foo') とするところを、name(), name('foo') とするようなメソッドです。…

Smarty3で文字列をテンプレートとして使う

今時Smartyなんて使うのは情弱だけだそうですが(すみません)、Smarty3で文字列をテンプレートとして使う方法を紹介します。コード 出力結果 なんてことはない、標準で対応していたのでした。 Smarty->registerResource()とか使わなくても良かった。リソー…

RedBeanで見るMass Assignment

PHP

Railsの仕様(と言っていいのかな?)に起因する、GitHubのMass Assignment脆弱性が狙い撃ちされたのが話題になりましたが、ORMライブラリRedBeanの、RedBean_OODBBean::import()がそのまんま、そういう実装だったのを思い出したので確認してみました。 You …

クラウドホスティングサービスfluxflexを触ってみた

PHP

昨年夏頃に話題になっていた、fluxflexというクラウドホスティングサービス(いわゆるPaaS)を触ってみました。今までPHPに対応したPaaSを何度か触ってみようとしたことはありましたが、いずれも恥ずかしながら何かを公開するまで到達できませんでした。 英…

output_add_rewrite_var()でCSRF対策してみる

PHP

output_add_rewrite_var() は、session.use_trans_sid で利用されているURLリライト機能に新しい名前と値のペアを追加する関数。session.use_trans_sidの場合と同様、有効になるHTML要素と属性は url_rewriter.tags の設定によって決まります。url_rewriter.…

PDOでSQLiteユーザー定義関数を使って正規表現マッチしてみる

PHP

SQLiteで正規表現マッチが使えるのか調べてて、公式ドキュメントの SQLite Query Language: expression http://www.sqlite.org/lang_expr.html で、LIKE, GLOB とともに REGEXP や MATCH が記載されているのを発見。 しかしながら、こんなことも書いてありま…

RecursiveIteratorIteratorとRecursiveDirectoryIteratorで再帰ファイル処理してみた

下記のような構造のディレクトリとファイルに対して、RecursiveDirectoryIteratorで走査し、RecursiveIteratorIteratorで処理を行う場合 DIR ├──DIR-1 │ ├──DIR-1-1 │ │ ├──DIR-1-1-1 │ │ │ ├──FILE-1-1-1-1.php │ │ │ └──FILE-1-1-1-2.txt │ │ ├──FILE-1-1-…

Silex製アプリケーションをSlimフレームワークで書き換えてみた

系図管理システム(仮)というものをSilex + SQLiteで作成していたんですが、SlimというSilex同様のREST APIを提供するマイクロフレームワークに書き換えてみました。 (SilexでもDoctrine2ではなくRedbean、TwigではなくPHPTALを使ってたので、フレームワー…

SplFileObjectとPHP5.4のCallbackFilterIteratorでCSV処理

普段はSPLをほとんど使っていない(DBからのファイル出力でIteratorを使ったことがあるくらい)のですが、練習のためにSplFileObjectを使ったCSV処理を書いてみました。 ただそれだけだと面白くないので、SplFileObjectを拡張してcurrent()メソッドにコール…

stream_resolve_include_path()関数で簡単オートロード

PHP

stream_resolve_include_path()はファイル名からinclude_pathを考慮したファイル検索を行なって、ファイルが存在すればパスを返してくれる関数。(5.3.2以降) http://jp.php.net/manual/ja/function.stream-resolve-include-path.phpこの関数を使って、includ…

str_getcsv()の第4引数($escape)の挙動

str_getcsv()はCSV1レコード分の文字列をパースして配列を返してくれるとても便利な関数。(5.3以降) http://jp.php.net/manual/ja/function.str-getcsv.phpこの関数、第2引数のdelimiter(区切り文字)、第3引数のenclosure(囲み文字)はいいとして、第4引…

エラーハンドラと例外ハンドラによるエラー処理 (PHP Advent Calendar jp 2011 Day 11)

PHP

@calpo22 さんの記事 PyrusでプロジェクトローカルなPEARライブラリインストール : PHP Advent Calendar jp 2011 Day 10 - くろまほうさいきょうでんせつ にき続き、 PHP Advent Calendar jp 2011 11日目の記事です。皆さん、エラー処理ちゃんとやってますか…