2015-10-21 (水)

コマンドラインで URL encode するやつ [PHP]

[2015-07-28-2] のコマンドライン版。

function urlencode() {
  echo $(php -r "echo rawurlencode('$1');")
}

function urldecode() {
  echo $(php -r "echo rawurldecode('$1');")
}

urlencode "http://masutaka.net/"
=> http%3A%2F%2Fmasutaka.net%2F

urldecode "http%3A%2F%2Fmasutaka.net%2F"
=> http://masutaka.net/



PHP 便利!

2014-02-13 (木)

phpenvでちょっと古めのphp-5.3.28をインストールしたメモ [Homebrew][OSX][PHP]

ちょっと5.3系があるとうれしいかも的な状況になったので、OSX Mavericksで
php-5.3.28をビルドしてみました。すると、こんなリンクエラーになります。

続きを読む

2014-02-11 (火)

Homebrewのnginxをphpenvのphp-fpm付きでセットアップしたメモ [Homebrew][OSX][nginx][PHP]

最新のPHPを使えるようになったので[2014-02-09-1]、nginxもセットアッ
プしてみました。

これでようやくOSX MavericksのApache&PHPとオサラバできます。

続きを読む

2014-02-09 (日)

HomebrewのphpenvでPHPをインストールしたメモ [Homebrew][OSX][PHP]

Vagrant使ってたから、OSXでPHP使う必要なかっただけだから..(震え声)

そういうわけでphpenvでPHP環境を作ってみました。まずは基礎知識。

続きを読む

2014-01-25 (土)

改めてHomebrewをクリーンインストールしたメモ [Homebrew][OSX][Ruby][Perl][PHP]

BoxenからHomebrewに戻ってきたので[2014-01-25-1]、改めてまっさらな状
態からインストール。[2011-07-26-1]以来だね。/usr/localは空っぽにしといた。

http://brew.sh より。

$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"


続きを読む

この記事に言及しているこのブログ内の記事

2012-08-06 (月)

LL Decade は元組み込みプログラマーでも楽しめるイベントだった #lldecade [Perl][PHP][Python][Ruby][勉強会]

この記事で開催を知った LL Decade。LL はおろか、Decade の単語の意味
も知らなかった元組み込みプログラマー、現 Web プログラマーですが、予
想以上に楽しめるイベントでした。

しかし暑かった。予定どおり汗だくで会場に到着。今回は机がなかったの
で MacBookAir は使わず、iPhone に軽くメモりながら純粋に楽しむことに
専念。

基調講演で初めて @miyagawa 氏を拝見。手錠をはめられてプログラミン
グ..の下りが印象に残りました。PHP は知れば知るほど変態言語で、第一
印象よりかなり好きになりましたが、私も手錠をはめられている感じはす
るのですよね...。

意外だったのは今まで Python に全く関わらずに生きてきたのに、
Language Update Decadev で話を聞いて、やってみようかなと思ったこと。
LL イベントは各言語をつまみ食い出来るので、組み込みなど別な分野の人
が参加しても楽しめますね。今回はまつもとさんの mruby の話も熱かった
ですし。

先週の Jenkins ユーザ・カンファレンスの熱が残っているのか、CI の話
もセッションまるまる使われていました。まあでも CI は各言語やフレー
ムワークに共通する内容は薄いので、CakePHP2 と Jenkins みたいにドン
ピシャの話が聞きたいですね。それは個々の勉強会でやることか。。あ、
もちろん各トークは面白かったです。 @yamashiro さんの話は特に。

JsTestDriver いいかもと思ったけど、複数サーバが必要なのは残念でした。

Javascript が機械語という解釈は今回一番面白かった。すなわち永遠に生
き続ける。確かに各ブラウザ対応を考えると素で書くのはしんどい。アセ
ンブラに対する C みたいに、今後はもっとしっくりと上に乗っかるとうれ
しいですね。> jQuery, JSX, CoffeeScript

2012-05-13 (日)

PHPカンファレンス関西2012に参加してきました #phpkansai [PHP][勉強会]

今まで参加した勉強会で一番実践的だったと思います。
もちろん私にとって。

とか言いつつ、20 分くらい遅刻してしまいましたw

PHP5.3、PHP 5.4、次のPHP


第2回 関西PHP勉強会 [2011-11-26-3] で一度聞いてはいましたが、それで
も知らないことは多々ありました。

PHP5.3


レイト・スタティック・バインディングがサポートされた。static:: が
C++ とかと同じように動作する。self::who じゃなくて static::who と
書くと、継承先の who() が使われる。

goto がサポートされた。loop の中には入れない。

クロージャがサポートされた。

クラススコープ外で const を使えるようになった。define は APC 使った
時に実行されてしまう。const はそうじゃないらしい。

省略三項演算子がサポートされた。フォームのデフォルト値を処理するの
に便利とのこと。さっそく試してみた。確かにこれは便利。

// セットされていれば、その値が使われる。
$aaa = 'masutaka';
$value = $aaa ?: 'aaa';
var_dump($value);
//=> string(8) "masutaka"

// されていなければ、デフォルト値('aaa')が使われる。
$aaa = 0;
$value = $aaa ?: 'aaa';
var_dump($value);
//=> string(3) "aaa"



PHP5.4


Traits がサポートされた。早く使おう。
Class が垂直再利用なのに対して、Traits は水平利用とのこと。なるほど。
Ruby だと mixin に相当するとのこと。Module かと思ってた。
こんな風に Class と同様に利用できる。

trait foo {}
class bar { use foo; }


Traits を使えば __get() や __set() [2012-05-13-1] をきれいに実装で
きるとのこと。
Trait を複数使う場合の文法もある。
関数の名前を変えたり、public を private に変えたり出来る。
Trait から Trait を作ることも出来る。
abstract で抽象メソッドを作れたりもする。

CLI Server(ビルドインサーバー)がサポートされた。
php -S 127.0.0.1:1080 とかで、Web サーバを起動できる。
便利だけど正式運用は厳しい。php が落ちたら web server も落ちるから。
watch dog 必須。

ショートタグがサポートされた。

<?= ?>


が常に利用可能。今までも php.ini で設定できたそう。

<?= h('') ?>


とかも書ける。

Ruby っぽい配列文法がサポートされた。
今まで何度も何度も要望があがっていたが、今回ようやく実装されたのは
echo foo()[1]; を書きたい要望があったためだそう。なるほど。

バイナリ記法がサポートされた。
0b1111 とか。

パッチは必要だが Facebook の Hiphop Virtual Machine が内々にサポー
トされたそう。PHP のコードを C++ に変換するアレですね。

PHP-Ninja




http://php-ninja.com/
WordPress x nginx x Zcloud

発表者は @miya0001 さん。

PHP-Ninja はめっちゃ速い。5000-8000 req/sec 処理可能とのこと。
普通のレンタルサーバは 20 req/sec
高負荷時に CPU のコアをダイナミックに増減。これはすごい!

http://wp.remotemanager.me/
複数の WordPress を一元管理 (3サイトまで無料)

あとで忍者の一人に聞いてみたら、独自ドメインにはまだ対応してないそう。

PHP on クラウド! – AWS Elastic Beanstalkの真価 –



AWS SDK for PHP

AWS の各種サービスを PHP で操作する SDK
PHP を使って、システム運用の自動化も。

DynamoDB を使った、HTTP のセッション共有が可能
SDK にクラスが同封

AWS 使ったことないですが、これも早く使いたいですね。

PHPから利用するMySQLのネイティブドライバ「mysqlnd」について



CentOS6.2にPHP5.3.9とMySQL5.5を導入 - OSSDBwiki

MySQL native driver for PHP (mysqlnd_ms)

オリジナルより速い。
5.4 から本家に取り込まれるかも。

MySQL 向けのロードバランサ
PHP から送られてきたクエリーを更新もしくは検索かを判断して、
マスター/スレーブに自動的に振り分ける。

設定ファイルは json

プログラムは一切変更する必要がないので、Cake とかでも動くはず。
確認は出来てないけど。導入は低コスト。

クリティカルな場面ではマスターに処理を投げたい時もあるはず。
プログラムで制御できるのか? 今のバージョンでは出来るかも?

プログラム側はいっさい変更せずに MySQL のロードバランサが使えるのは
よいですね。導入が低コストなのも○

CakePHP最新情報




生の @cakephper さんを初めて拝見。
懇親会でいろいろお話しすることも出来ました〜

Cake2 では autoload が賢くなったそう。
Cake1 App::import()
Cake2 App::users()

CakeEmail
EmailCompornent と違って、utf8 決めうちではない。
これはめっちゃ助かります。

CakePHP2.1
JsonView/XMLView の追加
View の継承機能

CakePHP2 本が今年の 7 月にでるそう。これは..買おうかな?

FuelPHP をさわってみて




たしかにインストールはめっちゃ簡単。3コマンドで終了。@omoon がすご
く楽しそうに発表しているので、ちょっと使いたくなってしまいました。

メモ取ってなかったので、LT は割愛。。
モックオブジェクトは是非使ってみたいです。

まとめ


今回は自分に関係ある発表ばかりだったので、かなり役に立ちました。
今後はもっとテスト関係の発表を聞きたいかなあ。調べてもなかなか情報
が出てこなくて。(もちろん cake 以下とかのテストコードは見てます。)

懇親会はヤバかったですねw
LT って、短いと何回もループさせられるものだったとは。。
有名人の方々ともお話しできて良かったです。

@shin1x1 さんはじめ、運営の方々ありがとうございました!

関連情報: はてなブックマーク - マスタカのはてなブックマーク - PHP - 勉強会

2012-05-13 (日)

PHP の特殊メソッド __get(), __set() [PHP]

class に public な変数(プロパティ)を定義することは、オブジェクト指
向のカプセル化の観点から論外ですが、private なプロパティを定義して、
get_プロパティ名(), set_プロパティ名() とかを作るのもイケてなかった
のですね。(薄々気づいてはいましたが...。)

PHP には __get() と __set() という特殊メソッドがあります。
例えば
$myclass = new MyClass;
$myclass->hoge = 1;
の場合、定義していれば MyClass::__set() が呼ばれます。

以下のように private なプロパティを定義し、__get(), __set() を介し
てアクセス制御すると良いでしょう。このプロパティは読み取り専用、こ
のプロパティは両方大丈夫とか。

class Post {
  private $title;
  private $content;
  private $author;
  private $comments;

  private $_getters = array('title', 'content', 'author', 'comments');
  private $_setters = array('title', 'content', 'author');

  public function __get($property) {

    if(in_array($property, $this->_getters)) {
      return $this->$property;
    }

    if(in_array($property, $this->_setters)) {
      throw new Exception('Property "' . $property . '" is write-only.');
    }

    throw new Exception('Property "' . $property . '" is not accessible.');
  }

  public function __set($property, $value) {

    if(in_array($property, $this->_setters)) {
      $this->$property = $value;
      return;
    }

    if(in_array($property, $this->_getters)) {
      throw new Exception('Property "' . $property . '" is read-only.');
    }

    throw new Exception('Property "' . $property . '" is not accessible.');
  }
}

$post = new Post;

$post->title = "タイトルだよ〜ん\n";
//=> エラーが発生することなく、代入できる。
print_r($post->title);
//=> エラーが発生することなく、「タイトルだよ〜ん」と表示される。

$post->comments = "コメントだよ〜ん\n";
//=> エラーが発生することなく、代入できる。
print_r($post->comments);
//=> 例外が発生する。PHP Fatal error:  Uncaught exception 'Exception' with message 'Property "comments" is read-only.'



プロパティによっては、加工してから get/set したいものもあるかもしれ
ません。その場合も __get(), __set() を拡張すれば良いです。PHP マニュ
アルのオーバーロードの項
が参考になると思います。ただし、今回参考に
したコード
は間違っているので、注意が必要です。。。

PHP 5.4 からは trait が使えるので、trait 化して自作の各 class に組
み込むと良いと思います(まだ環境を作ってないので、未確認..)。

この記事に言及しているこのブログ内の記事

2011-12-30 (金)

{Jenkins x CakePHP2 (6/6)} 他にインストールしたプラグイン [Jenkins][PHP]

※ 詳細情報は「Jenkinsの管理」>「プラグインの管理」から辿れる、各プ
   ラグインのリンク先を参照して下さい。

Emotional Jenkins Plugin


これはインストールした方がよいでしょう。そしてテストを失敗させましょうw
各プロジェクトの設定で ON/OFF できます。

IRC Plugin


設定すると、指定した channel に Jenkins さんが常駐します。ビルド結
果を IRC で通知してくれるだけでなく、IRC から Jenkins を実行できた
りもします。

私の設定は以下のとおり。

Hostnamechat.freenode.net
Port6667
Channels Name#example
Nicknamejenkinsbot
Command prefixjenkinsbot:
(高度な設定)Use /notice commandチェックを入れる

Hostname と Port と Channels Name を設定するだけで動くはずですが、
私の環境では Nickname が初期値の jenkins-bot だと、Channels に
join してくれませんでした。なので試行錯誤の結果、微妙に変えました。

Command prefix は IRC の mentions っぽくしました。なんでも良いと思
います。

Use /notice command もチェックを入れた方がよいと思います。IRC の
/notice コマンドを使って通知します。

Redmine Plugin


プロジェクトのトップページに Redmine のリンクが現れます。
コミットメッセージの refs #100 とかが概チケットへのリンクになります。

2011-12-30 (金)

{Jenkins x CakePHP2 (5/6)} Jenkins を自動実行する [Jenkins][PHP]

「リモートからビルド (例: スクリプトから)」がうまくいかないので、
とりあえず「SCMをポーリング」にしました。

10 分おきにポーリングです。

*/10 * * * *


Jenkins は良くできたツールなんだけど、微妙に設定が効かないことがあ
るよなあ。単にまだ自分に馴染んでいないだけなのか。

2011-12-30 (金)

{Jenkins x CakePHP2 (4/6)} Jenkins から PHPUnit を実行する [Jenkins][PHP]

CakePHP2 から、奨励単体テストツールが SimpleTest から PHPUnit になっ
たのは周知のとおり。http://example.com/cakephp/test.php などから単
体テストができるようになり、カバレッジ率も測定できる環境が整ったら、
Jenkins でも実行したいところ。

コマンドラインから単体テストを実行する



まずはコマンドラインからテストを実行できることを確認する。

% cd app
% mkdir -p results
% ../lib/Cake/Console/cake testsuite --log-junit results/phpunit.xml --coverage-clover results/coverage.xml app AllTests

上の例では、Controller や Model を含めた全てのテストケースを実行す
る app/Test/Case/AllTestsTest.php を実行している。

このとき

PHP Fatal error: Class 'DOMDocument' not found in /usr/share/pear/PHPUnit/Util/Log/JUnit.php on line 135

なんていうエラーが起きたら、configure で –with-dom を有効にした
PHP がインストールされていない
。remi リポジトリからインストールする
と良い(詳細は割愛)。

% sudo yum --enablerepo=remi,epel,rpmforge,rpmforge-extras,rpmforge-testing install php-xml


ここまで出来たらあとは簡単。Jenkins に設定するだけ。

Jenkins側の設定


トップの「Jenkinsの管理」>「プラグインの管理」から、
results/coverage.xml を解析するためのプラグイン、Clover PHP Plugin
をインストールする。

続けて、プロジェクトに前述のコマンドを設定する。
1. プロジェクト(例:hoge)のトップページから「設定」をクリック。
2. 「ビルド」>「ビルド手順の追加」>「シェルの実行」をクリック。
   以下を設定する。

cd ${WORKSPACE}/app
mkdir -p results
../lib/Cake/Console/cake testsuite --log-junit results/phpunit.xml --coverage-clover results/coverage.xml app AllTests

3. 「ビルド後の処理」>「Clover PHP カバレッジレポートを集計」をクリック。
   「Clover XMLパス」に app/results/coverage.xml を指定する。
4. 同様に「JUnitテスト結果の集計」をクリック。
   「テスト結果XML」に app/results/phpunit.xml を指定する。

あとはビルドするだけ。エラーが発生してしまったら「コンソール出力」
を見ると、原因が大体分かります。

参考 URL:
Fatal error: Class ‘DOMDocument’ not foundと出たら: PHPの種 ブログ

2011-12-30 (金)

{Jenkins x CakePHP2 (3/6)} Jenkins からコーディング規約をチェックする [Jenkins][PHP]

手っ取り早く使ってみたかったので、最初に Jenkins からコーディング規
約チェック出来るようにしてみた。単体テストだと、最初にテストコード
を書かなくちゃいけないからね。

PHP_CodeSniffer のインストール


インストールすると、phpcs コマンドを使えるようになる。

pear コマンドでインストール出来るが、

% sudo pear install PHP_CodeSniffer


エラーが発生してインストールできなかったので、

downloading PHP_CodeSniffer-1.3.2.tgz ...
Starting to download PHP_CodeSniffer-1.3.2.tgz (328,845 bytes)
......................done: 328,845 bytes
PHP Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 23378 bytes) in /usr/share/pear/PEAR.php on line 252
PHP Stack trace:
PHP 1. {main}() /usr/share/pear/pearcmd.php:0
PHP 2. PEAR_Command_Common->run() /usr/share/pear/pearcmd.php:305
PHP 3. PEAR_Command_Install->doInstall() /usr/share/pear/PEAR/Command/Common.php:271
PHP 4. PEAR_Installer->install() /usr/share/pear/PEAR/Command/Install.php:708
PHP 5. PEAR_Installer->_installFile2() /usr/share/pear/PEAR/Installer.php:1406
PHP 6. PEAR->isError() /usr/share/pear/PEAR/Installer.php:600
PHP 7. is_a() /usr/share/pear/PEAR.php:252


/etc/php.ini をこのように修正した。

memory_limit = 16M

memory_limit = 32M

※ 以降のどこの操作かは忘れましたが、同じ現象が発生したため、私の環
   境では最終的に 256M に落ち着きました。

PHP_CodeSniffer をインストールできた。

% phpcs --version
PHP_CodeSniffer version 1.3.2 (stable) by Squiz Pty Ltd. (http://www.squiz.net)
% phpcs -i
The installed coding standards are MySource, PEAR, PHPCS, Squiz and Zend


CakePHP 用の規約は同封されていないので、別途インストールした。

% cd ~/tmp
% git clone git://github.com/jrbasso/CodeSniffer_CakePHP.git
% cd /usr/lib/php/pear/PHP/CodeSniffer/Standards
% sudo cp -r ~masutaka/tmp/CodeSniffer_CakePHP CakePHP


無事追加された。

% phpcs -i
The installed coding standards are CakePHP, MySource, PEAR, PHPCS, Squiz and Zend


app/controllers 以下とかでチェックできるようになった。

% phpcs --report=summary --report-checkstyle=phpcs.xml --standard=CakePHP --extensions=php .


Jenkins 側の設定



Git プラグインと、Check-Style プラグインのインストール


1. トップの「Jenkinsの管理」>「プラグインの管理」をクリックする。
2. 「利用可能」タブをクリックし、Git Plugin と Checkstyle Plugin を
   選択し、インストールする。

ジョブを作成する


1. トップから「新規ジョブ作成」をクリックする。
2. 「ジョブ名(要はプロジェクト名)」に適当な名前(例:hoge)を指定する。
   /var/lib/jenkins/workspace 以下に同じ名前のディレクトリが作られるの
   で英語名が良い。
3. 「フリースタイル・プロジェクトのビルド」を選択し、OK をクリック。
4. 「ソースコード管理システム」の Git を選択。Repository URL を指定
   する(例:/home/foo/hoge.git)。

Check-Style プラグインを設定する



1. そのまま同じ設定画面の「ビルド」>「ビルド手順の追加」>「シェルの
   実行」をクリック。Controller と Model 以下の .php ファイルを対象と
   したい場合は、以下を設定する。

cd ${WORKSPACE}/app
mkdir -p results
find Controller Model -type f -name "*.php" ! -name AppController.php -print0 | \
xargs -0 phpcs --report=summary --report-checkstyle=results/phpcs.xml --standard=CakePHP --extensions=php || id

   ※ 1つでもエラーがあるとビルド失敗だと判断されてしまうので、この例
   では最後に id コマンドを実行して、常にビルドが成功するようにしている。
2. 「ビルド後の処理」>「CheckStyle警告の集計」をクリック。「集計す
   るファイル」に app/results/phpcs.xml を指定する。

あとはビルドを実行するだけ。警告出まくりだけど、Jenkins から
CakePHP コーディング規約をチェック出来た。

参考 URL:
CakePHPのコーディング規約違反をPHP_CodeSnifferでチェックする #CakephpAdvent2011 : candycane development blog

2011-12-30 (金)

{Jenkins x CakePHP2 (2/6)} Jenkins の認証設定 [Jenkins][PHP]

今回採用したセキュリティポリシー


ログインしないとアクセス出来ないようにする。
管理者が手動でアカウントを作成すると、ユーザーがサインアップできる。
第3者は勝手にサインアップできない。

設定方法


「Jenkinsの管理」>「システムの設定」>「セキュリティを有効化」にチェック

「アクセス制御」>「ユーザー情報」>「Jenkinsのユーザーデータベース」にチェック
「ユーザーにサインアップを許可」のチェックを外す。

「アクセス制御」>「権限管理」>「行列による権限設定」にチェック。
「追加するユーザー/グループ」から masutaka を追加。全アクセス権を付与。

トップに戻り masutaka のサインアップをすると、ログイン出来るようになる。

2011-12-30 (金)

{Jenkins x CakePHP2 (1/6)} Jenkins のインストール方法 [Jenkins][PHP]

CakePHP-2.0.4 で継続的インテグレーション(CI)ができる環境を構築する
ため、Jenkins をインストールすることにした。

ネット上を探し回ったんだけど、まだ Jenkins x CakePHP2 の情報はまと
まってないみたい。毎度のことながら途中何度も何度もハマり、設定して
はアンインストールし、設定してはアンインストールしを 7〜8 回はやっ
たと思う。同じように困っている人と、将来の自分のために構築メモを残
すことにする。全 6 回。

Jenkins のバージョンは 1.445、CentOS のバージョンは 5.6。

Jenkins をインストール&起動した。Jenkins 用のリポジトリを yum の
リポジトリリストに追加して、yum install するだけ。

% sudo yum install java-1.6.0-openjdk
% sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
% sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
% sudo yum install jenkins
% sudo /sbin/service jenkins start


http://example.com:8080 にアクセスできるようになった。設定ファイル
や workspace は /var/lib/jenkins に、ログは /var/log/jenkins に作ら
れる。

設定やビルド結果は xml で保存され、MySQL とかは使わないので、気楽と
言えば気楽。

そして、ここまでは簡単。


2011-11-26 (土)

第2回 関西PHP勉強会 LightningTalk [PHP][勉強会]

第2回 関西PHP勉強会 目次に戻る

Memcached は NoSQL


memcached って、NoSQL に分類されるのね。知りませんでした。。データ
数は 100,000 件とかにすれば、違いがより分かりやすかったかも?

PHP でも顔認識してみようぜ!


OpenCV を PHP から使う!
画像をアップロードすると、顔を認識してくれる。iPhoto とかであるやつですね。
実演は無事成功。8888

Windows Azure で PHP 動くんです


Windows Azure ってのがあるのですね。
クラウドで動く Windows Server

初心者でもわかる CakePHP と PDFlib


PDFlib は何十万もするらしい。。。弊社ではちょい無理です。
FPDF は無償。これはメモメモ。
12 月中に第 2 回関西 PHP 初心者勉強会やるらしいです。

PHP で Twitter


OAuth には、twmode とかこのブログとかで使ったことがあるので、これは
馴染み深かった。PHP でも簡単にできるんですね〜

php でも jubatus


データを突っ込むと、そのデータが何かを類推してくれる。
例えば、はてブのタグの suggestion とか。でも試作は失敗とのことw

facebook アプリ


heroku 使うやつだったけかな。雛形が用意されているので、結構簡単に作
れるらしい。プロジェクタートラブルはご愁傷様でした。

2011-11-26 (土)

第2回 関西PHP勉強会 セッション2 PHP5.4おいしさつまみぐい [PHP][勉強会]

第2回 関西PHP勉強会 目次に戻る



@tanakahisateru さんの発表。

5.4 はゆるやかな変更
5.4 から 2 進数リテラル(例: 0b1111)が使える。

Array Short Syntax


array() 使わなくても [] でいいやつね。
YAML 使わなくてもシンプルにできるかも、とのこと。

Builtin Server


"php -S localhost :8080" で簡単起動。PHP5.3 とかの既存の環境を変更
せずに試せる。.php だけでなく、static なファイル .html とかも表示で
きる。引数にビルトインサーバ用スクリプトを指定すると、CakePHP とか
の .htaccess を要求するフレームワークも動かせる。

TRAIT


親クラス以外からもメソッド実装を持って来れる。
class の代わりに、trait で定義する。
使いたい class でだけ use で使う。
これはいい!

クロージャ


5.3 まではクロージャの中で $this を使えなかった。

この記事に言及しているこのブログ内の記事

2011-11-26 (土)

第2回 関西PHP勉強会 セッション1 あらためてPHP5.3 [PHP][勉強会]

第2回 関西PHP勉強会 目次に戻る



@shin1x1 さんの発表。

PHP5.2 から大きく機能追加されたとのこと。PHP6 のリリースがいつにな
るか分からないので、PHP6 から PHP5.3 にバックポートされたためだそう。

class の外でも const が使えるのはうれしいですね〜。と言いたいところ
ですが、define しか知りませんでした。。でも今試しました。OK! できた!

const AAA = 'huga';	/* クラスの中に書いても外に書いても OK */

pr(self::AAA);		/* クラスの中の時 */
pr(AAA);		/* クラスの外の時 */



namespace


PHP5.3 未満には存在しなかった。グローバルネームスペースのみ。
バックスラッシュで階層化。(なんでスラッシュじゃないの?と思った。)
影響は .php ファイルのみ。
use でインポート、エイリアス
クラス、インターフェイス名と、関数、変数とでは名前空間の検索方法が異なる。
名前空間の付け方 -> PSR-0 でルール化
結論。ハマりどころを抑えておけば問題なし。

クロージャ


似たような処理を関数化することは多いと思うが、クロージャを使えばメ
ソッドを関数の中に閉じ込められる。うまく使うと、保守性の高いコーディ
ングが出来そう。そういえば C 言語でもクロージャは書けるみたいですね。
[2010-03-30-1]

LSB


Late Static Bindings 遅延静的束縛
実行時に評価される。
self:: を static:: にするだけ。

まとめ


PHP マニュアル読みなさい。
ちょっと試したいときは、Silex というフレームワークがオススメ。

休憩


なんと!バームクーヘンが出て来ました。PHP 界隈ではスイーツ恒例だそ
うです。(フィルムをはがして撮れば良かったorz)
画像

2011-11-26 (土)

初めて PHP 勉強会に参加してきた! #kphpug [PHP][勉強会]

ごあいさつ



PHP 界隈の皆様はじめまして。@masutaka です。PHP 歴は 8 ヶ月ほどです。
普段は Emacs に住んでいます。組み込み系の業務で C 言語を 11 年くら
い使っていた関係で、私のPHP コードはすごく C 言語っぽい気がしてま
す...。他、EmacsLisp と Ruby でたまに小粒なツールを作ります。

第2回 関西PHP勉強会



というわけで、第2回 関西PHP勉強会に参加してきました。PHP 勉強会に参
加するのは今回が初めてです。Emacs とも Ruby とも雰囲気が違って良い
ですね〜。初心者が一番参加しやすいんじゃないでしょうか。楽しかった。
@shin1x1 さんを初めとする運営の方々、ありがとうございました。

長くなってしまったので、各セッションは別記事にしました。ほとんど個
人的なメモです。

セッション1 あらためてPHP5.3
セッション2 PHP5.4おいしさつまみぐい
LT(Lightning Talk)

来年の 5 月に PHP カンファレンス関西が開かれる予定とのこと。これは
行かねば!

2011-03-11 (金)

CakePHP-1.2 系の構築方法 [PHP]

自分用のメモ。
Macports の Apache を使っている。


一回だけ



edit httpd.conf

sudo cp /opt/local/etc/php5/php.ini-development /opt/local/etc/php5/php.ini


edit php.ini

% sudo -u mysql mysql_install_db5



CakePHP を作るたびに



.htaccess に以下を追加。

RewriteBase /~masutaka/cake/


app/.htaccess に以下を追加。

RewriteBase /~masutaka/cake/app/


app/webroot/.htaccess に以下を追加。

RewriteBase /~masutaka/cake/app/webroot/


Apache が読み書きできるように。

mkdir -p app/tmp/cache
chmod -R o+rw app/tmp


edit app/config/core.php

//date_default_timezone_set('UTC');

date_default_timezone_set('Asia/Tokyo');


edit app/config/core.php

Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi');

Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mimasutaka');


edit app/config/core.php

Configure::write('Security.cipherSeed', '76859309657453542496749683645');

Configure::write('Security.cipherSeed', '768593096574535424967496836450123');


% mysql5 -u root
>create database cake character set utf8;



参考情報:
Snow LeopardなMacBookにMacPortsで開発環境入れ直し(Apache2/PHP5/MySQL5/PostgreSQL8.3) [C!]
fresh install of cakephp 1.3, Fatal Error: Call to a member function cd() - CakePHP | Google グループ

最終更新時間: 2017-10-23 00:08

検索


最近の話題
- 2017-10-22
  github-nippou を golang で書き換えて v4.0.1 リリースしてました
- 2017-10-21
  async.el 使ったら helm-github-stars.el を変更せずに非同期化できた
- 2017-10-15
  golang の並列処理を Ruby と比較しながら学ぶ
- 2017-09-24
  『応仁の乱』を読んだ
- 2017-08-31
  ZenHub と GitHub の Issue/PR URL をトグルするブックマークレットを作った
- 2017-08-07
  github-nippou v3.0.0 released
- 2017-08-02
  『サーバーレスシングルページアプリケーション』を読んだ
最近追記された記事
- 2017-06-02-1 (114日前)
- 2017-04-29-1 (176日前)
- 2017-04-13-1 (190日前)
- 2017-04-13-1 (192日前)
- 2017-03-02-1 (234日前)
- 2017-02-25-1 (239日前)
- 2017-02-21-1 (243日前)
- 2015-06-07-1 (249日前)
- 2016-10-19-1 (258日前)
- 2016-01-01-1 (270日前)
カテゴリ
- Anthy (3)
- Apache (11)
- Apple (1)
- ATOK (4)
- au (3)
- AWS (19)
- Bazaar (1)
- Berkshelf (2)
- BigQuery (1)
- BitBar (3)
- Book (88)
- Boxen (2)
- Bugsnag (1)
- capistrano (4)
- chalow (56)
- ChatWork (1)
- Chef (17)
- Chrome (3)
- Chromecast (1)
- CircleCI (10)
- clang (26)
- Comics (2)
- Cooking (10)
- cvs (15)
- cygwin (12)
- D3.js (1)
- Debian (55)
- Docker (3)
- E-mail (8)
- elasticsearch (4)
- Emacs (221)
- Emacs講座 (10)
- English (4)
- feedforce (7)
- fetchmail (3)
- Firefox (20)
- Fluentd (4)
- ftp (1)
- Game (20)
- GCP (1)
- Gem (5)
- Git (9)
- GitHub (19)
- golang (7)
- Google (1)
- gpg (4)
- GrowthForecast (7)
- Health (3)
- Heroku (9)
- Homebrew (10)
- HTML (6)
- iBook (1)
- iPhone (15)
- IRC (1)
- Jenkins (8)
- JS (1)
- Karabiner (1)
- KeySnail (3)
- Kibana (1)
- Kindle (1)
- Kubernetes (2)
- Langrich (7)
- LDAP (6)
- Life (19)
- Linux (6)
- Mackerel (1)
- Mew (18)
- MongoDB (1)
- Mozilla (19)
- Music (1)
- MySQL (1)
- NAS (4)
- nginx (6)
- NHK (1)
- Node (1)
- ntp (4)
- OOP (1)
- OpenID (2)
- openssl (1)
- Opera (2)
- OSX (41)
- Perl (14)
- PHP (19)
- PostgreSQL (1)
- procmail (4)
- Programing (3)
- Puppet (1)
- Python (2)
- Rails (12)
- Rake (2)
- RaspberryPi (1)
- RedHat (29)
- Redmine (3)
- Rspec (1)
- Ruby (50)
- samba (3)
- screen (7)
- sed (5)
- serverspec (6)
- sh (8)
- Slack (2)
- Solaris9 (22)
- Spring (2)
- ssh (4)
- StatusNet (21)
- svn (12)
- Swift (1)
- Tablet (1)
- tdiary (3)
- Twitter (14)
- Twmode (6)
- Ubuntu (5)
- UNIX (102)
- vagrant (8)
- Video (21)
- vim (1)
- Wercker (9)
- Windows (29)
- Wine (3)
- XML (11)
- XP (1)
- zsh (25)
- インストールメモ (33)
- クイックシェイプ (12)
- ネタ (15)
- 勉強会 (15)
- 携帯 (6)
- 正規表現 (4)
過去ログ
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12
2002 : 01 02 03 04 05 06 07 08 09 10 11 12
2001 : 01 02 03 04 05 06 07 08 09 10 11 12
Google+