#php #php #mac #memcache #環境構築

環境情報

  • Mac OSX Snow Leopard 10.6.4
  • XAMPP 1.7.3

手順書

1. Apple Developer Tools (Xcode)の最新版をインストール

2. XAMPP Developer Packageをインストール

http://www.apachefriends.org/en/xampp-macosx.htmlより下記赤線のリンクをダウンロードします。 xampp develop package for mac 参考リンク:http://blog.m-schmidt.eu/2010/03/30/develop-memcached-web-apps-with-xampp-under-mac-os-x/ ダウンロードしたdmgファイルを開いてDevel-Package.mpkgをダブルクリックでインストールします。

3. ターミナルを開いて(/Applications/Utilities/Terminal)下記コマンドを実行

cd /tmp
pecl download memcache
tar xzf memcache-2.2.5.tgz
cd memcache-2.2.5
/Applications/XAMPP/xamppfiles/bin/phpize-5.3.1
MACOSX_DEPLOYMENT_TARGET=10.6 CFLAGS='-O3 -fno-common -arch i386 -arch x86_64' LDFLAGS='-O3 -arch i386 -arch x86_64' CXXFLAGS='-O3 -fno-common -arch i386 -arch x86_64' ./configure --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config-5.3.1
make
sudo make install

成功したら/Applications/XAMPP/xamppfiles/lib/php/php-5.3.1/extensions/no-debug-non-zts-xxxxのフォルダ(xxは20090626みたいな日付)にmemcache.soというファイルが生成されます。

4. php.iniファイルの編集

/Applications/XAMPP/xamppfiles/etc/php.iniファイルを開いて”Dynamic Extensions”のブロックを検索し、下記内容を追記します。私の環境では538行くらいでした。

extension=memcache.so

こんあ感じです。 Add memcache extention to php.ini

5.memcacheを立ち上がる

ターミナルで下記コマンドを実行します。

memcached -m 8 -l 127.0.0.1 -p 11211 -d

これは自分の環境でmemcacheをIP:127.0.0.1、ポート:11211、8MBのRAMスペースで立ち上がる意味です。

6. phpで動作確認

下記ファイルを用意します。ファイル名は任意です(ここではmemcache.phpとしました)。

<?php

$memcache = memcache_connect('127.0.0.1', 11211);

if ($memcache) {
	$memcache->set("str_key", "String to store in memcached");
	$memcache->set("num_key", 123);

	$object = new StdClass;
	$object->attribute = 'test';
	$memcache->set("obj_key", $object);

	$array = Array('assoc'=>123, 345, 567);
	$memcache->set("arr_key", $array);

	var_dump($memcache->get('str_key'));
	var_dump($memcache->get('num_key'));
	var_dump($memcache->get('obj_key'));
}
else {
	echo "Connection to memcached failed";
}
?>

これを/Applications/XAMPP/xamppfiles/htdocsに置いて、ブラウザでhttp://localhost/memcache.php(あるいはhttp://127.0.0.1/memcache.php)を開きます。 下記のようなページが表示されればOKです。 memcache test in php

ちなみにmemcacheを停止するコマンドは:

killall memcached
#php #php

kohanaというphpフレームワークを触り始めました。MVCパターンなのでいろんなところで結構Railsと似ていますが、コード量が明らかにRailsより多くてまだ慣れてません。さすがにRailsやってから他の言語やフレームワークを触るとキツイです。

kohanaにはデフォルトでmodulesにuserguideが付いてます。ローカルでもガイドのドキュメントやAPIを参照できるため結構便利です。

userguideモジュールをアクティブする方法

bootstrap.phpの中に’userguide’を検索してコメントアウトします。

アクセスURL

例えばbase_urlが’myapp’の場合は: http://localhost/myapp/userguide/docs になります。

内容としては公式サイトのhttp://kohanaframework.org/guide/about.kohanaと同じになります。

#github

プロジェクトに検索機能を追加しようとする。

git checkout -b add-search
=> ブランチ'add-search'を作成し、それに乗換

// ファイル修正

git add .
git commit -am "Done"
=> 修正ファイルをコミット、コミットメッセージは"Done"

git checkout master
=> masterブランチに乗換

git merge add-search
=> add-searchでの修正内容をマージ

git push
=> サーバにpush

Rails: default_scopeを使った場合注意しておきたいことArticleモデルがあるとします。ブログの記事は普通最新の順番で並んでまのでこんなdefault_scopeを定義したかもしれません。

# in Article model
default_scope :order => "articles.created_at DESC"

これで普通にArticle.allとかfindのときはデフォルトで作成日時が最新のものから並びますが Article.firstとArticle.lastにも影響があります。 つまり

Article.first # <Article id:999, ...>
Article.last  # <Article id:1, ..>

考えてみれば当たり前のことですが、念のため覚えておきましょう。

PostとCommentのModelがあってPostが複数のCommentを持ってます。やりたいのはPostの表示画面(show view)でCommentを削除するリンクを作成ことです。

前提

まずPostとCommentのModel、及びroutes.rbの設定を理解しましょう。

# post model
has_many :comments

# comment model
belongs_to :post

# routes.rb
resources :posts do
  resources :comments
end

方法

Viewのerbファイルでは下記のようなリンクを作成します。

<% @article.comments.each do |comment|
  <%= comment.content %>
  <%= link_to "Delete", article_comment_path(@article, :comment_id => comment), :method => :delete %>
<% end %>

これはcomments_controllerのdestroyアクションを呼ぶのでdestroy actionを作成する必要があります。

# in comments_controller.rb

def destroy
  comment = Comment.find(params[:comment_id]
  comment.destroy
  redirect_to request.referer
end

:comment_idはviewで設定するパラメータ名と一致すればOKです。