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

k-holyのPHPとか諸々メモ

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

画像アップロード(4)IEでもドラッグ&ドロップ対応、Ajax化しつつJavaScript無効の環境にも対応

前回の記事 画像アップロード(3)ドラッグ&ドロップ対応(IE除く) の続きです。 画像アップロード(1)Canvasでプレビューして普通に画像をアップロード 画像アップロード(2)クライアント側で簡易バリデーション、複数ファイル対応 画像アップロード(3)ドラッ…

画像アップロード(3)ドラッグ&ドロップ対応(IE除く)

前回の記事 画像アップロード(2)クライアント側で簡易バリデーション、複数ファイル対応 の続きです。 画像アップロード(1)Canvasでプレビューして普通に画像をアップロード 画像アップロード(2)クライアント側で簡易バリデーション、複数ファイル対応 画像…

画像アップロード(2)クライアント側で簡易バリデーション、複数ファイル対応

前回の記事 画像アップロード(1)Canvasでプレビューして普通に画像をアップロード の続きです。 画像アップロード(1)Canvasでプレビューして普通に画像をアップロード 画像アップロード(2)クライアント側で簡易バリデーション、複数ファイル対応 画像アップ…

画像アップロード(1)Canvasでプレビューして普通に画像をアップロード

AJAXとかドラッグ&ドロップといったややこしい処理はおいといて、HTML5のCanvasを使ってクライアント側でプレビューしてみるテストです。 画像アップロード(1)Canvasでプレビューして普通に画像をアップロード 画像アップロード(2)クライアント側で簡易バリ…

PHPUnit 4.1系で \Symfony\Component\HttpFoundation\File\UploadedFile のモックオブジェクトを作成しようとすると "Erroneous data format for unserializing" のエラーが発生した件

PHPUnit 4.1系で \Symfony\Component\HttpFoundation\File\UploadedFile のモックオブジェクトを作成しようとすると "Erroneous data format for unserializing" のエラーが発生します。 PHP 5.6.1 + PHPUnit 4.1.6 で確認しました。 エラーメッセージで検索…

グラフ描画ライブラリ Chart.js で凡例を表示する

JavaScriptのグラフ描画ライブラリ Chart.js サンプルが綺麗でシンプルなためかデザイナーの方に人気のようで、いろんなブログで紹介されてます。 しかしサンプルではラベルを設定しているにも関わらず凡例が表示されておらず、「凡例を表示する機能がない」…

Windows環境のPHPで日本語ファイルパスを扱う場合の注意点

まず手元の Windows7 + PHP 5.6.0 で検証した上での結論を書くと 「Windows で日本語ファイルパスを扱う場合 SplFileInfo は使うな」 です。 ロケール設定を適切に行うことで basename() や pathinfo() に関しては、Shift_JISのコード表に起因するいわゆる「…

ローカル開発環境(Windows7)のPHPを5.5.16から5.6.0に更新した

ローカル開発環境(32bit Windows7)でのPHP 5.6への更新作業メモです。 アーカイブを展開してシンボリックリンクを切り替える 最新リリース版をダウンロード PHP 5.6.0 VC11 x86 Thread Safe (2014-Aug-27 21:52:22) 過去バージョンの動作環境もそのまま残…

手動でシンボリックリンク切替デプロイしてみたメモ

コマンドは許可されてるけど訳ありでFTP/SCPアップロードから逃れられない、でもComposerだって普通に使いたい、vendorディレクトリ以下を一括アップロードなんてしたくない…。 そこで、手動シンボリックリンク切り替えデプロイを断行してみました。 以下の…

Composerでプロジェクトグローバルにインストールした Stagehand_TestRunner + PHPUnit を ver.4 に更新(Windows7 + NYAOS編)

PHPUnit 4 に対応、PEARおよびPHPUnit3.6のサポートを終えた Stagehand_TestRunner V4 をローカル開発環境 (Windows7) に入れたメモです。特に新しいことはしていません。 内容的には Composerでプロジェクトグローバルに Stagehand_TestRunner + PHPUnit を…

PHPTALテンプレート変数のパス参照でPHPTAL_VariableNotFoundExceptionがスローされる件

PHPTALにおけるテンプレート変数のパス記述に関するメモです。多分他の人にはあまり役に立たないと思います。 PHPTAL_Context::path() におけるパス参照時の PHPTAL_VariableNotFoundException発生条件 ソースはここ PHPTAL/classes/PHPTAL/Context.php パス…

Entity Object + Value Object 実践中

現在、データベースのレコード単位で一意に識別されるデータを不変オブジェクトをベースにしたEntity Objectと、その属性となるValue Objectの設計を実践中ですが、やったこと&やっていることのメモです。 内容的には Traitで不変オブジェクトにしてキャッ…

mysqliのコンストラクタで"No such file or directory"のエラー

mysqli::__construct() で以下のエラーが発生。 mysqli::mysqli(): (HY000/2002): No such file or directory 調べてみると、MySQLのソケットファイル(mysql.sock)が見当たらない場合にこのエラーが発生することがあるようです。 パッケージでインストールし…

Composerでプロジェクトグローバルに Stagehand_TestRunner + PHPUnit をインストール(Windows7 + NYAOS編)

今度はローカル開発環境の Windows7 + NYAOS で composer global install してみました。 以下、シェルは NYAOS を使っています。 Composerをインストール 当然すでにcomposerは導入済みなのですが、Linuxの場合と同じ手順を踏んでやってみます。 PHPのイン…

Composerでプロジェクトグローバルに Stagehand_TestRunner + PHPUnit をインストール

久々にお仕事でroot権限のあるLinuxサーバ (CentOS 6.5)を使えることになったのでComposerで Stagehand_TestRunner(3.6.2) + PHPUnit(3.7.37) をインストールしたメモ。 Composerをインストール 作業用ユーザー(application)のホームディレクトリ以下にプロ…

Apache2.2.20でBasic認証しまくったら警告を吐いて止まらなくなった話

今時Basic認証かよ、などと思われそうですが、むしろ今時HTTPSでない認証はあり得ないので、明示的なログアウト/再ログインが必要のないケースであればBasic認証で問題ないんじゃないかというわけで。 非ブラウザのHTTPクライアントアプリケーションと連携し…

Traitで不変オブジェクトにしてキャッシュ可能なクラスを作る

PHP

Qiitaに投稿した PHP Advent Calendar 2013 20日目の記事 PDOでオブジェクトをフェッチ&JSONとCSVファイル出力 の補足…というか、むしろ当初はこちらが本題の予定だったものです。 名著と評判の『Effective Java 第2版』を何年か前に読んで、不変オブジェク…

噂のPhalcon FrameworkをWindowsで動かしてみた

"The fastest PHP Framework" を標榜する Phalcon フレームワーク、実はWindows版もあるんです。 Phalcon for Windows を入れる extension として実装されてるわけですが、Windowsの場合は DLL ファイルを置くだけなのである意味Linux版よりもインストールは…

GitHubに置いてるライブラリをCoverallsに対応した

自分のライブラリを Travis CI でのユニットテストに対応しましたが、このたびカバレッジレポートを公開できるサービス Coveralls にも対応したメモです。 恥ずかしながらこれまでカバレッジレポートの意義が理解できてなかったんですが、 php-coveralls を…

マイクロフレームワークをつくろう - Pimpleの上に (フォームオブジェクトとドメインデータで投稿フォーム)

Pimpleを拡張して自分好みに使うために作成した小さなアプリケーションクラスを使って、マイクロフレームワークっぽいものを作る試みです。 記事にはしていないものの、コードの方は頻繁に更新しています。 フレームワーク全体に影響する部分としては以下の…

php --rf 関数名

PHP

昨日の昼ごろから突然、下のような状態になって php.net が見られなくなってしまったわけですが…。 どうしよう $haystack と $needle の順番が分からない! そんな時も安心、実はCLIのphpコマンドで関数のリフレクションが見られるのでした…! http://jp.php…

GitHubに置いてるライブラリをTravis CIに対応した

PHP

自分のライブラリをTravis CIでテストしてみたメモです。 ほぼ自分専用だし、別に困ってないし…と思って今まで手を付けてなかったんですが、個人ライブラリではユニットテストもそこそこ書くようになってて、 業務でも PHP 5.3系 / 5.4系 プロジェクトが併存…

offsetExistとPHPTALの罠

テンプレートをValidに書けることが売りの(?)テンプレートエンジン PHPTAL で、 マジックメソッド、ArrayAccessインタフェースを実装した配列風オブジェクトを使った時に引っかかった罠についてメモです。 内容的には ArrayAccess + マジックメソッドで公…

issetとemptyとoffsetExist

タイトルは「いとしさとせつなさと…」みたいな感じで読んでください。 マジックメソッド、ArrayAccessインタフェース、Traversableインタフェースを実装した配列風のクラスを作成する際に引っかかりがちな(?)、__isset() と offsetExists() の仕様上の罠…

ArrayAccess + マジックメソッドで公開する値と内部の値を変換するクラスにTraversableを実装する際の注意点

とてもターゲットの狭い記事ですが、ほぼ自分用メモです。 たとえば、外部からセットされたDateTimeオブジェクトを内部的にUnixTimestampに変換して保持し、外部に返す際は再びDateTimeオブジェクトに変換して返すようなオブジェクト。 そのために、マジック…

3つのテンプレートエンジンを共通のインタフェースで利用するためのライブラリ Volcanus_TemplateRenderer

Smarty3, PHPTAL, Twigを共通のインタフェースで利用するためのライブラリ Volcanus_TemplateRenderer を公開しました。 k-holy/volcanus-template-renderer 既存のフレームワークを使ってる大多数の人には何の役にも立たない、誰得なライブラリですが…。 Pa…

SilexでUrlGeneratorを使ったサブディレクトリ運用でサブリクエスト

相変わらずSilexとPimpleを拡張した自作フレームワークを行ったり来たりしています。 SilexアプリケーションでUrlGeneratorを使ったサブディレクトリ運用への対応(たとえば http://example.com/foo/ 以下をアプリケーションのルートとする)で、コントロー…

SqaleのPHPアプリケーションでSilexのサービスプロバイダ用Traitを使ってみたメモ

クラウドホスティングサービス Sqale では国内ホスティングサービスとしては珍しく(?)、動作環境にPHP5.4を選択できます。 せっかくなので、以前に書いたSilexアプリケーションのコードをSilex付属のサービスプロバイダ用Traitを利用したものに書き換える…

SqaleのPHPアプリケーションで.user.iniを使ってみたメモ

クラウドホスティングサービス Sqale がPHP対応された際にキャンペーンで無料アプリケーションを1個いただいて、色々試してみましたが、その後しばらく触ってませんでした。 久しぶりに公式の Sqale - PHPアプリケーションのマニュアル を見てみると、PHPア…

マイクロフレームワークをつくろう - Pimpleの上に(システム日付編)

Pimpleを拡張して自分好みに使うために作成した小さなアプリケーションクラスを使って、マイクロフレームワークっぽいものを作る試みです。 マイクロフレームワークをつくろう - Pimpleの上に(Pimple拡張編) マイクロフレームワークをつくろう - Pimpleの…

マイクロフレームワークをつくろう - Pimpleの上に(Monolog導入・エラーログとスタックトレース出力編)

Pimpleを拡張して自分好みに使うために作成した小さなアプリケーションクラスを使って、マイクロフレームワークっぽいものを作る試みです。 マイクロフレームワークをつくろう - Pimpleの上に(Pimple拡張編) マイクロフレームワークをつくろう - Pimpleの…

マイクロフレームワークをつくろう - Pimpleの上に(ルーティング編)

Pimpleを拡張して自分好みに使うために作成した小さなアプリケーションクラスを使って、マイクロフレームワークっぽいものを作る試みです。 マイクロフレームワークをつくろう - Pimpleの上に(Pimple拡張編) マイクロフレームワークをつくろう - Pimpleの…

マイクロフレームワークをつくろう - Pimpleの上に(Symfony HttpFoundationでフラッシュメッセージとCSRF対策編)

Pimpleを拡張して自分好みに使うために作成した小さなアプリケーションクラスを使って、マイクロフレームワークっぽいものを作る試みです。 マイクロフレームワークをつくろう - Pimpleの上に(Pimple拡張編) マイクロフレームワークをつくろう - Pimpleの…

マイクロフレームワークをつくろう - Pimpleの上に(例外処理とエラー画面・Twitter Bootstrap導入編)

Pimpleを拡張して自分好みに使うために作成した小さなアプリケーションクラスを使って、マイクロフレームワークっぽいものを作る試みです。 マイクロフレームワークをつくろう - Pimpleの上に(Pimple拡張編) マイクロフレームワークをつくろう - Pimpleの…

マイクロフレームワークをつくろう - Pimpleの上に(PHPTAL導入編)

Pimpleを拡張して自分好みに使うために作成した小さなアプリケーションクラスを使って、マイクロフレームワークっぽいものを作る試みです。 マイクロフレームワークをつくろう - Pimpleの上に(Pimple拡張編) マイクロフレームワークをつくろう - Pimpleの…

マイクロフレームワークをつくろう - Pimpleの上に(RESTインタフェース編)

Pimpleを拡張して自分好みに使うために作成した小さなアプリケーションクラスを使って、マイクロフレームワークっぽいものを作る試みです。 マイクロフレームワークをつくろう - Pimpleの上に(Pimple拡張編) マイクロフレームワークをつくろう - Pimpleの…

マイクロフレームワークをつくろう - Pimpleの上に(Rendererクラス作成編)

Pimpleを拡張して自分好みに使うために作成した小さなアプリケーションクラスを使って、マイクロフレームワークっぽいものを作る試みです。 マイクロフレームワークをつくろう - Pimpleの上に マイクロフレームワークをつくろう - Pimpleの上に(とりあえず…

マイクロフレームワークをつくろう - Pimpleの上に(Symfony HttpFoundation導入編)

Pimpleを拡張して自分好みに使うために作成した小さなアプリケーションクラスを使って、マイクロフレームワークっぽいものを作る試みです。 マイクロフレームワークをつくろう - Pimpleの上に マイクロフレームワークをつくろう - Pimpleの上に(とりあえず…

マイクロフレームワークをつくろう - Pimpleの上に(とりあえずフォーム編)

Pimpleを拡張して自分好みに使うために作成した小さなアプリケーションクラスを使って、マイクロフレームワークっぽいものを作る試みです。 マイクロフレームワークをつくろう - Pimpleの上に コードはWindows版 PHP5.4 ビルトインWebサーバにて動作確認して…

マイクロフレームワークをつくろう - Pimpleの上に(Pimple拡張編)

DIコンテナの効能が謳われだして久しい昨今、業務でもSilexでいくつか小さなアプリケーションを作ったりする中で、ようやくその利点を実感するようになりました。 そのうち、実は自分が惚れたのはSilexではなくて、その母体たるPimpleだったんじゃないかと考…

Fabricタスクをモジュール分割して楽々composer更新

Windows7 (MinGW / MSYS) で Fabric シリーズ記事です。 Windows7 (MinGW / MSYS) に Python 2.7 + virtualenv + Fabric を入れたメモ Windows7 (MinGW / MSYS) に virtualenvwrapper を入れたメモ Fabricで接続情報を指定する方法いろいろ&FabricからPHPス…

真性PHPerでも分かった?FabricでWindowsからファイルアップロード

Windows7 (MinGW / MSYS) で Fabric の続きです。 Windows7 (MinGW / MSYS) に Python 2.7 + virtualenv + Fabric を入れたメモ Windows7 (MinGW / MSYS) に virtualenvwrapper を入れたメモ Fabricで接続情報を指定する方法いろいろ&FabricからPHPスクリプ…

Fabricで接続情報を指定する方法いろいろ&FabricからPHPスクリプトを実行してみたメモ

Windows7 (MinGW / MSYS) で Fabric の続きです。 Windows7 (MinGW / MSYS) に Python 2.7 + virtualenv + Fabric を入れたメモ Windows7 (MinGW / MSYS) に virtualenvwrapper を入れたメモ ですが、多分今回の内容は実行環境に関係なく共通だと思います。 …

SqaleでPHPアプリケーションのデプロイ時にPHPスクリプトから.htaccessファイルを作成してみたメモ

SqaleでPHPアプリケーションを動かす記事の続きです。 Sqaleではデプロイ完了後にフックさせるpostinstallスクリプトに対応しており、これを使ってCLI版のPHPを呼び出せることが分かりました。 前回の記事 SqaleのPHPアプリケーションでSwiftMailerを使って…

SqaleのPHPアプリケーションでSwiftMailerを使ってメール送信してみたメモ

SqaleでPHPアプリケーションを動かす記事の続きです。 最近、メールサーバを導入していない環境でメールを送信するため、Symfony系フレームワークで標準採用されているライブラリ swiftmailer を扱う機会がありました。 Sqale のアプリケーション環境におい…

SqaleのPHPアプリケーションでSilexを動かしてみたメモ

私のような真性PHPerは指を咥えて見ているしかなかったクラウドPaaS Sqale ですが、PHPに対応されたとの嬉しい知らせがありました。 SqaleでPHPアプリケーションも利用可能になりました! | Sqale Information 更に、このタイミングでアプリケーション1個が…

Volcanus_CsvとSymfony-FinderでローテートされたApacheログをLTSVフォーマットに集約してみる

CSVファイルの入出力用ライブラリ Volcanus_Csv を使ったシリーズ記事です。 話題の LTSV を扱ってみようと思い立ったものの、お世話になっているレンタルサーバGehirn RS2ではApacheのログフォーマット変更は難しい…。 そんなわけで、ローテート済みのcombi…

Silexアプリケーションをサブディレクトリで運用する(mod_rewriteとUrlGenerator)

Advent Calendar 用のサンプルコードを書くに当たって、Silexアプリケーションをサブディレクトリで運用したメモです。 なお、例のごとくサンプルコードではテンプレートエンジンにSmartyを使っています。 Apache + mod_rewrite で解決 Apache + mod_rewrite…

HttpFoundationで画像の条件付きGETを実装してみる (Symfony Advent Calendar JP 2012 - Day 22)

Symfony Advent Calendar JP 2012 22日目の記事です。 まずはじめにお断りしておきますが、この記事はSymfony未経験者向けです。 (飛び入り参加なのに低レベルな内容ですみません…) HTTP/1.1 には If-Modified-Since, If-Unmodified-Since, If-Match, If-N…

Smarty3のHTMLエスケープ方法いろいろ + 修飾子プラグインと変数フィルタ (PHP Advent Calendar 2012 Day 11)

PHP Advent Calendar 2012 11日目の記事です。昨日は Shusuke Otomo さんの 初めて Pull Request した話。 #phpadvent2012 | slumbers でした。 皆さん、テンプレートエンジンは何を使ってますか? おおっぴらに使ってますと発言するのもちょっと勇気がいる…