2012-02-06
CentOS5(64bit)にPHP5.3を入れてMemcachedを使うようにしたかったのでメモ
PHPに存在する2つのmemcacheモジュール
PHPには、memcahcedと対話する2つのExtensionモジュールがある。MemcacheとMemcachedである。
memcachedの方が後発で機能も豊富らしい。Igbinaryという文字列ではなくてバイナリ形式でのシリアライズ方式もサポートしている。
http://www.jqueryin.com/2011/04/19/php-memcache-vs-memcached/
http://stackoverflow.com/questions/1442411/using-memcache-vs-memcached-with-php
ただし、memcachedはPHP5.2以上でないと使えないのとlibmemcachedライブラリが必要みたい。まぁ、パッケージマネージャ使ってれば面倒な話ではないんでしょうけど。
Peclパッケージを見ると、どちらも同じくらいの開発の勢い。
http://pecl.php.net/package/memcache
http://pecl.php.net/package/memcached
どっちを使ってもいいけど、ややこしいので間違わないように。*1
自分はmemcacheを使いました。*2
php-memcache
どうもPHP53の64bit版が無いようなので、ソースから入れる
wget -O php-pecl-memcache.tgz http://pecl.php.net/get/memcache tar xvzfmp php-pecl-memcache.tgz cd memcache-3.0.6/ phpize make ./configure make make install
途中でzlib-develが無いと言われたので追加でインストールした。
そのあとphp.iniに
extension_dir = "/usr/lib64/php/modules"
extension=memcache.so
を入れる。
# php -m |grep memcache
memcache
memcachedをいれる
これも普通にダウンロードできないので、rpmforge-extrasのリポジトリを追加してrpmforgeを有効にする。
more /etc/yum.repos.d/rpmforge.repo # Name: RPMforge RPM Repository for Red Hat Enterprise 5 - dag # URL: http://rpmforge.net/ [rpmforge] name = Red Hat Enterprise $releasever - RPMforge.net - dag #baseurl = http://apt.sw.be/redhat/el5/en/$basearch/dag mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge #mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge enabled = 0 protect = 0 gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag gpgcheck = 1 [rpmforge-extras] name = RHEL $releasever - RPMforge.net - extras baseurl = http://apt.sw.be/redhat/el5/en/$basearch/extras mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge-extras #mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge-extras enabled = 0 protect = 0 gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag gpgcheck = 1
なんでダウンロードだけかというと、あとで別のrpmforgeが使えないサーバに持って行ってサーバ業者にお願いするからです。
yum --downloadonlyを使いたかったのだけど、これはyum-downloadonlyというパッケージが必要なので、
yum install -y yum-downloadonly yum --enablerepo=rpmforge-extras install --downloadonly memcached || ・・・ところが、perl-AnyEventが無いよって言われる。なければ自動的に引っ張ってきてほしいんだけど、 >|sh| yum install -y --downloadonly --enablerepo=rpmforge-extras perl-AnyEvent
ってしてもエラーが出る。
--> Running transaction check
---> Package perl-AnyEvent.noarch 0:5.240-1.el5.rf set to be updated
--> Processing Dependency: perl(JSON) >= 2.09 for package: perl-AnyEvent
--> Processing Dependency: perl(JSON::XS) >= 2.2 for package: perl-AnyEvent
--> Processing Dependency: perl(EV) >= 3.05 for package: perl-AnyEvent
--> Processing Dependency: perl(Net::SSLeay) >= 1.33 for package: perl-AnyEvent
--> Processing Dependency: perl(Guard) >= 1.02 for package: perl-AnyEvent
--> Processing Dependency: perl(Net::SSLeay) for package: perl-AnyEvent
--> Running transaction check
---> Package perl-AnyEvent.noarch 0:5.240-1.el5.rf set to be updated
--> Processing Dependency: perl(Net::SSLeay) >= 1.33 for package: perl-AnyEvent
---> Package perl-EV.x86_64 0:4.03-1.el5.rf set to be updated
--> Processing Dependency: perl(common::sense) for package: perl-EV
---> Package perl-Guard.x86_64 0:1.021-1.el5.rf set to be updated
---> Package perl-JSON.noarch 0:2.50-1.el5.rf set to be updated
---> Package perl-JSON-XS.x86_64 0:2.30-1.el5.rf set to be updated
---> Package perl-Net-SSLeay.x86_64 0:1.30-4.fc6 set to be updated
--> Running transaction check
---> Package perl-AnyEvent.noarch 0:5.240-1.el5.rf set to be updated
--> Processing Dependency: perl(Net::SSLeay) >= 1.33 for package: perl-AnyEvent
---> Package perl-common-sense.x86_64 0:3.0-1.el5.rf set to be updated
って依存性いっぱい。
perl-AnyEventが必要なんだけど、これに必要なのが
perl(Guard)
perl(EV)
と
ただ、perl(EV)に必要なのが
なので、順番としては
yum install -y --downloadonly --enablerepo=rpmforge perl-common-sense yum install -y --downloadonly --enablerepo=rpmforge perl-EV yum install -y --downloadonly --enablerepo=rpmforge perl-Guard yum install -y --downloadonly --enablerepo=rpmforge perl-Net-SSLeay yum install -y --downloadonly --enablerepo=rpmforge perl-JSON yum install -y --downloadonly --enablerepo=rpmforge perl-JSON-XS yum install -y --downloadonly --enablerepo=rpmforge perl-AnyEvent
という感じか。でこれらを全部rpm -ivh でインストール
perl-Net-SSLeayはbaseリポジトリにあった。
・・・・が、これ1.30で、1.33以上が必要なのでrpmforge-extrasからダウンロードする
yum install -y --downloadonly --enablerepo=rpmforge-extras --disablerepo=base perl-Net-SSLeay rpm -e perl-Net-SSLeay rpm -ivh perl-Net-SSLeay-1.36-1.el5.rfx.x86_64.rpm
ここまでやってようやく
yum install -y --downloadonly --enablerepo=rpmforge perl-AnyEvent
さてようやくmemcachedが行けるかと思いきや
yum install -y --downloadonly --enablerepo=rpmforge-extras memcached
Resolving Dependencies
--> Running transaction check
---> Package memcached.x86_64 0:1.4.7-1.el5.rfx set to be updated
--> Processing Dependency: perl(YAML) for package: memcached
--> Processing Dependency: perl(Term::ReadKey) for package: memcached
--> Finished Dependency Resolution
memcached-1.4.7-1.el5.rfx.x86_64 from rpmforge-extras has depsolving problems
--> Missing Dependency: perl(Term::ReadKey) is needed by package memcached-1.4.7-1.el5.rfx.x86_64 (rpmforge-extras)
memcached-1.4.7-1.el5.rfx.x86_64 from rpmforge-extras has depsolving problems
--> Missing Dependency: perl(YAML) is needed by package memcached-1.4.7-1.el5.rfx.x86_64 (rpmforge-extras)
と依存性エラー
yum install -y --downloadonly --enablerepo=rpmforge perl-YAML yum install -y --downloadonly --enablerepo=rpmforge perl-Term-ReadKey
ここまで来て、ようやくダウンロードできた。
あー、長かった・・。ここまでやってなんだけど、なんか、rpmforgeじゃなくてremi使うとイイっぽい。
で、起動させておく
/etc/init.d/memcached start # Distributed memory caching (memcached) を起動中: [ OK ] chkconfig memcached on chkconfig --list|grep mem # memcached 0:off 1:off 2:on 3:on 4:on 5:on 6:off
こんな感じ。
とりあえず使ってみる
<?php $session_save_path = 'tcp://localhost:11211'; if (ini_set('session.save_handler', 'memcache') && ini_set('session.save_path', $session_save_path)){ session_start(); var_dump(++$_SESSION['counter']); }
$session_save_path = "tcp://$host:$port1?persistent=1&weight=2&timeout=2&retry_interval=10,tcp://$host:$port2";
というように複数のmemcachedサーバに繋ぐこともできる。persistent=1は多分pconnectで接続するってこと。
2012-01-30
fontタグのsizeによる大きさをチェックするスクリプト
どの大きさが何ポイントはブラウザによるので、目で確かめる。
<html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script> $(function(){ for (var i=1; i<=8; i++){ $('body').append('<h2>fontsize:'+i+'</h2>'); for (var j=4; j<=50; j++){ $('body').append('fontsize: <font size="'+i+'">fontsize:'+i+'</font><font style="font-size:'+j+'px">style:font-size:'+j+'</font><br />'); } } }); </script> </head> <body> </body> </html>
2012-01-17
Confluenceのインストールしたり、移動したり
ライブラリ
http://www.oracle.com/technetwork/java/javase/downloads/index.html
rpm -ivh jdk-7u2-linux-x64.rpm
# yum install libXp.x86_64
基本的にこれだけ。
サーバを移動する
Confluenceデータディレクトリ/confluence.cfg.xml
にデータソースdsn://っぽいのがあるのでそこを適当に変える。
Confluence4の場合
Confluenceのbinディレクトリstartup.shとかshutdown.shとかあるところ?にsetenv.shっていうのがあって、この中に環境依存の記述ができてるので、それを変更する。具体的には、Shell変数の$JRE_HOME
なんでこんなところに・・・。
2012-01-12
LESS.jsでwatchモードが効かなかった話
何のことはない、less.jsはwatchモードが有効になるには、hostnameがlocalhost/127.0.0.1/0.0.0.0出なければならないみたい。
http://www.paulsprangers.com/2011/04/quick-tip-less-js-in-development-and-watch-mode/
less.jsの中に
location.hostname=="127.0.0.1"||location.hostname=="0.0.0.0"||location.hostname=="localhost"
って書いてある。
なので、これを弄ってやるとWatchモードが使える。
・・・だけど、これやったら今度はwatchがデフォルトで走って止まらないようになってしまったのだけど・・・
と思ってたら、
どうも、1.1.4では何の問題もなく上記の対応でwatchモードになる。
なんか、このブログ書いた時点での1.2.0がおかしいみたい。@importでlessを読み込もうとするとエラーになるし。
2012-01-07
テーマ下画像表示用ショートコード
[themeimage src="images/dummy/main.jpg" style="width:900px;"]
とかで、
<img style="width:900px;" src="http://xxxxxxxx/wp-content/themes/xxx/images/dummy/main.jpg">
を表示する。attributeはいくつでも可能。
多分幾多の人が作ってるかと思ったが、探すより調べた方が速いので書いた。
テーマのfunctions.phpに下記を追加
<?php /** * @brief テーマ下画像表示用ショートコード * @param * @retval */ function themeimage_show_func($attrs) { $attr = ''; $src = ''; foreach ($attrs as $key=>$value){ if ($key == 'src') { $src = $value; } else { $attr .= sprintf(' %s="%s"', $key, $value); } } $s = sprintf('<img src="%s/%s" %s/>', get_bloginfo('stylesheet_directory'), $src, $attr); return $s; } add_shortcode('themeimage', 'themeimage_show_func');

