<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>bluegold &#187; php</title>
	<atom:link href="http://blog.bluegold.me/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.bluegold.me</link>
	<description>OpenSolaris と MacBook で自宅ネットワークを構築するメモ</description>
	<lastBuildDate>Thu, 26 Aug 2010 14:38:53 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>nginx を SMF で管理する</title>
		<link>http://blog.bluegold.me/2010/08/management-nginx-with-smf/</link>
		<comments>http://blog.bluegold.me/2010/08/management-nginx-with-smf/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 16:36:59 +0000</pubDate>
		<dc:creator>bg</dc:creator>
				<category><![CDATA[OpenSolaris]]></category>
		<category><![CDATA[fastcgi]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[opensolaris]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.bluegold.me/?p=500</guid>
		<description><![CDATA[nginx や PHP の fast-cgi のプロセスを OpenSolaris の SMF で管理するための manifest の紹介。]]></description>
			<content:encoded><![CDATA[<p>もう1年以上前に書いていた下書きをようやく公開。</p>
<p><a href="/2008/11/nginx-php-fastcgi/">前回（と言っても1年半前か）</a> までで nginx と PHP の fast-cgi のビルドと設定が終わったので、OS の起動時に自動的に起動するようにサービスとして登録を行います。</p>
<p>OpenSolaris ではサービスの管理に <a href="http://en.wikipedia.org/wiki/Service_Management_Facility">SMF</a> という仕組みを使用しています。SMF はサービスの依存関係を記述できたり、サービスの起動を監視して自動的に再起動してくれたりと、Linux などで使われている /etc/init.d の rc スクリプトに比べるとメリットがありますが、コマンドが独自だったり、自分で SMF にサービスを登録するには manifest と呼ばれる XML ファイルを書く必要があるので、慣れるまではハードルがあります。（この辺は Mac OS X の launchd と似ている。）</p>
<p><span id="more-500"></span></p>
<p> 以下が、私が nginx を管理するために作成した nginx.xml です。</p>
<pre class="brush: xml;">
&lt;?xml version='1.0'?&gt;
&lt;!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'&gt;
&lt;service_bundle type='manifest' name='export'&gt;
  &lt;service name='network/nginx' type='service' version='0'&gt;
    &lt;create_default_instance enabled='true'/&gt;
    &lt;single_instance/&gt;
    &lt;dependency name='fs' grouping='require_all' restart_on='none' type='service'&gt;
      &lt;service_fmri value='svc:/system/filesystem/local'/&gt;
    &lt;/dependency&gt;
    &lt;dependency name='net' grouping='require_all' restart_on='none' type='service'&gt;
      &lt;service_fmri value='svc:/network/loopback'/&gt;
    &lt;/dependency&gt;
    &lt;exec_method name='start' type='method' exec='/usr/local/sbin/nginx -c /usr/local/conf/nginx.conf' timeout_seconds='60'&gt;
      &lt;method_context working_directory='/usr/local/logs'&gt;
        &lt;method_credential user='root' group='root'/&gt;
        &lt;method_environment&gt;
          &lt;envvar name='PATH' value='/usr/bin:/bin:/usr/local/bin'/&gt;
        &lt;/method_environment&gt;
      &lt;/method_context&gt;
    &lt;/exec_method&gt;
    &lt;exec_method name='stop' type='method' exec=':kill' timeout_seconds='60'&gt;
      &lt;method_context/&gt;
    &lt;/exec_method&gt;
  &lt;/service&gt;
&lt;/service_bundle&gt;
</pre>
<p>このファイルを以下のように SMF に登録します。</p>
<pre class="bq">
# svccfg -v import nginx.xml
</pre>
<p>同様に PHP の FastCGI のプロセスも SMF に登録します。</p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;!DOCTYPE service_bundle SYSTEM &quot;/usr/share/lib/xml/dtd/service_bundle.dtd.1&quot;&gt;
&lt;service_bundle type=&quot;manifest&quot; name=&quot;php-fcgi&quot;&gt;
 &lt;service name=&quot;network/php-fcgi&quot; type=&quot;service&quot; version=&quot;0&quot;&gt;
   &lt;create_default_instance enabled=&quot;true&quot;/&gt;
   &lt;single_instance/&gt;

   &lt;dependency name=&quot;net&quot; grouping=&quot;require_all&quot; restart_on=&quot;none&quot; type=&quot;service&quot;&gt;
     &lt;service_fmri value=&quot;svc:/network/loopback&quot;/&gt;
   &lt;/dependency&gt;

   &lt;exec_method name=&quot;start&quot; type=&quot;method&quot; exec=&quot;/usr/local/sbin/php-fcgi.sh&quot; timeout_seconds=&quot;60&quot;&gt;
     &lt;method_context working_directory=&quot;/usr/local/www&quot;&gt;
      &lt;method_credential user=&quot;php&quot; group=&quot;webservd&quot; privileges=&quot;basic,net_privaddr&quot;/&gt;
      &lt;!--method_credential user=&quot;root&quot; group=&quot;root&quot; /--&gt;
       &lt;method_environment&gt;
         &lt;envvar name=&quot;PATH&quot; value=&quot;/usr/php/5.2/bin:/usr/local/sbin:/usr/bin:/bin&quot; /&gt;
       &lt;/method_environment&gt;
     &lt;/method_context&gt;
   &lt;/exec_method&gt;

    &lt;exec_method name='stop' type='method' exec=':kill' timeout_seconds='60'&gt;
      &lt;method_context/&gt;
    &lt;/exec_method&gt;

 &lt;/service&gt;
&lt;/service_bundle&gt;
</pre>
<p>この xml も同じように svccfg コマンドで登録します。</p>
<p>起動用の shell スクリプトは<a href="http://drupal.org/node/110224">こちらのサイト</a>のものを、ほぼそのまま使っています。</p>
<pre class="brush: bash;">
#!/bin/bash

LC_ALL=ja_JP.UTF-8

#FastCGI Webserver path
FCGI_WEB_SERVER_ADDRS=&quot;127.0.0.1&quot;

## ABSOLUTE path to the PHP binary
PHPFCGI=&quot;/usr/php/bin/php-cgi&quot;

## tcp-port to bind on
FCGIPORT=&quot;9000&quot;

## IP to bind on
FCGIADDR=&quot;127.0.0.1&quot;

## number of PHP children to spawn
PHP_FCGI_CHILDREN=5

## number of request before php-process will be restarted
PHP_FCGI_MAX_REQUESTS=1000

# allowed environment variables sperated by spaces
ALLOWED_ENV=&quot;PATH&quot;

## if this script is run as root switch to the following user
USERID=webservd

################## no config below this line

ALLOWED_ENV=&quot;$ALLOWED_ENV PHP_FCGI_CHILDREN&quot;
ALLOWED_ENV=&quot;$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS&quot;
ALLOWED_ENV=&quot;$ALLOWED_ENV FCGI_WEB_SERVER_ADDRS&quot;

if test x$UID = x0; then
  EX=&quot;/bin/su -m -c \&quot;$PHPFCGI -q -b $FCGIADDR:$FCGIPORT\&quot; $USERID&quot;
else
  EX=&quot;$PHPFCGI -b $FCGIADDR:$FCGIPORT&quot;
fi

echo $EX

# copy the allowed environment variables
E=

for i in $ALLOWED_ENV; do
  E=&quot;$E $i=${!i}&quot;
done

# clean environment and set up a new one
nohup env - $E sh -c &quot;$EX&quot; &amp;
</pre>
<p>サービスが SMF に登録できれば、svcadm コマンドで起動停止を切り替える事ができます。</p>
<h4>起動</h4>
<pre class="bq">
# svcadm enable nginx
# svcadm enable php-fastcgi
</pre>
<h4>停止</h4>
<pre class="bq">
# svcadm disable nginx
# svcadm disable php-fastcgi
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.bluegold.me/2010/08/management-nginx-with-smf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XCacheの管理について</title>
		<link>http://blog.bluegold.me/2009/06/xcache-administration-and-monitor/</link>
		<comments>http://blog.bluegold.me/2009/06/xcache-administration-and-monitor/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 17:23:02 +0000</pubDate>
		<dc:creator>bg</dc:creator>
				<category><![CDATA[技術]]></category>
		<category><![CDATA[munin]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xcache]]></category>

		<guid isPermaLink="false">http://blog.bluegold.me/?p=222</guid>
		<description><![CDATA[XCacheの管理画面を表示するための設定方法と、XCache を監視するための munin 用プラグインについて]]></description>
			<content:encoded><![CDATA[<p>前に書いた<a href="/2008/11/php-xcache-wordpress/">WordPressでXCacheを有効にする</a>について、「記事の通りにやったのに動かない！」と <a href="http://higash.net">HiGash.Net</a>の中の人に怒られたので、書きもれていた管理ページの表示方法について簡単にまとめます。
</p>
<p style="margin-top:2em;">「動かない」と言われた時は「後で書いておくよ」と軽い気持ちで答えてしまっていましたが、よく考えると XCache の管理ページなんてインストールした時に表示させただけで、その後はすぐに <a href="http://munin.projects.linpro.no/">munin</a> での監視を始めてしまったので、あまり記憶に残っていません。nginx 側で BASIC 認証を設定していたのが原因だったかで、うまく動かなくて苦労した記憶はあるのですが。（munin の設定については後述）
</p>
<p>前に書いた記事で php.ini の設定を載せましたが、管理者の設定が抜けていました。</p>
<pre class="brush: bash;">
[xcache.admin]
xcache.admin.auth = On
xcache.admin.user = &quot;admin&quot;
; xcache.admin.pass = md5($your_password)
xcache.admin.pass = &quot;d41d8cd98f00b204e9800998ecf8427e&quot;
</pre>
<p>パスワードは MD5 でハッシュを計算しておく必要があります。<br />
コードとしては下のような簡単なものですが、<a href="http://blog.bluegold.me/pass.php?password=hoge">このURL</a>でハッシュを計算するものを作ってみました。</p>
<pre class="brush: php;">
&lt;!--

http://blog.bluegold.me/pass.php?password=XXXX

XXX の部分にパスワードを入力します
--&gt;
xcache.admin.pass = &quot;&lt;?php echo md5($REQUEST[&quot;password&quot;]); ?&gt;&quot;
</pre>
<p><span id="more-222"></span></p>
<p>
php.ini に管理者の設定を行った後で XCaxhe に付属の管理ページ(xcache.php)を開くと、パスワード認証をした後で管理ページが表示されると思います。<br />
<img src="http://wp-cdn.bluegold.me/2008/11/xcache-300x214.png" alt="xcache" title="xcache" width="300" height="214" class="size-medium wp-image-85" />
</p>
<p>XCacheに付属の管理ページではキャッシュされているスクリプトや、使用メモリ、キャッシュヒットやキャッシュミスの回数などの基本的な情報を調べることはできますが、得られる情報はあくまでも「その時点」での情報でしかないので、キャッシュミスが増えているか等は分かりません。
</p>
<p>このサイトでは munin を利用して XCache のキャッシュ状況をモニターしています。munin はサーバなどをモニタリングして統計画像を作るためのソフトで、この種のソフトとしては非常に簡単に設定を行うことができます。監視用のプラグインは比較的用意に作ることができ、既に多くのソフトウェアに対応しています。
</p>
<p>XCache用のプラグインは標準ではインストールされていないので、<a href="http://www.ohardt.net/dev/munin/">ここ</a>から munin_xcache-0.2.tar.bz2 をダウンロードします。インストールは他のプラグインと同様に出来ますが、このプラグインは少し変わっていて「監視される側の php ファイル(munin_xcache.php)」 も一緒に入っています。こちらはウェブサーバーから見える場所においておく必要があります。
</p>
<p>
<img src="http://wp-cdn.bluegold.me/2009/06/localhost-xcache_hits-week.png" alt="munin のグラフ" title="localhost-xcache_hits-week" width="489" height="295" class="alignright size-full wp-image-230" /><br />
しばらくすると、このようなグラフが出来てきます。
</p>
<p>
6/16 の晩に WordPress 2.8 にアップグレードしたので、そこからキャッシュミスが多くなってきています。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bluegold.me/2009/06/xcache-administration-and-monitor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPressでXCacheを有効にする</title>
		<link>http://blog.bluegold.me/2008/11/php-xcache-wordpress/</link>
		<comments>http://blog.bluegold.me/2008/11/php-xcache-wordpress/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 06:20:38 +0000</pubDate>
		<dc:creator>bg</dc:creator>
				<category><![CDATA[技術]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[xcache]]></category>

		<guid isPermaLink="false">http://blog.bluegold.me/?p=83</guid>
		<description><![CDATA[PHP で XCache を有効にする方法と、WordPress のデータをキャッシュするプラグインの説明。]]></description>
			<content:encoded><![CDATA[<p><a href="/2008/11/nginx-php-fastcgi/" title="nginxでphpを利用する">前回</a>の記事でPHPの設定は完了していますが、ついでにPHPアクセラレータも導入してみます。PHPアクセラレータはPHPの実行時に中間的に生成されるバイトコードをキャッシュや最適化を行う事により、実行時のロスを減らす仕組みです。</p>
<p>
PHPアクセラレータには<a href="http://eaccelerator.net/" title="eAccelerator">eAccelerator</a>や<a href="http://pecl.php.net/package/APC" title="APC">APC</a>などいろいろとあるようですが、今回は使った事のない<a href="http://xcache.lighttpd.net/" title="XCache">XCache</a>を使ってみます。XCacheはバイトコードのキャッシュの他にPHPの変数をキャッシュする機能があるので、この機能をWordPressで使うように設定も行います。
</p>
<p>
XCacheのビルドは以下の通り簡単に行うことができます。</p>
<pre class="brush: bash;">
wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz
gzip -dc xcache-1.2.2.tar.gz | tar xvf -
cd xcache-1.2.2
./configure --enable-xcache
make
make install
</pre>
</p>
<p><span id="more-83"></span>
<p>
php.ini ファイルにXCacheの設定を記述します。<br />
ソースに付属しているサンプルの xcache.ini からあまり変えていません。</p>
<pre class="brush: php;">
[xcache-common]
zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20060613/xcache.so

[xcache]
xcache.shm_scheme =        &quot;mmap&quot;
xcache.size  =               22M
xcache.count =                 1
xcache.slots =                8K
xcache.ttl   =             86400
xcache.gc_interval =         600

xcache.var_size  =            2M
xcache.var_count =             1
xcache.var_slots =            8K
xcache.var_ttl   =             0
xcache.var_maxttl   =          0
xcache.var_gc_interval =     300

xcache.test =                Off
xcache.readonly_protection = Off
xcache.mmap_path =    &quot;/dev/zero&quot;
xcache.coredump_directory =   &quot;&quot;
xcache.cacher =               On
xcache.stat   =               On
xcache.optimizer =            On
</pre>
<p>xcache.size は使用するアプリケーションの種類によって調整した方がよいと思います。XCacheはeAcceleratorなどと違い、キャッシュは全てメモリ上に持つようなので大きめに設定しておいた方が良いかもしれません。
</p>
<p>バイトコードのキャッシュは以上の設定でphpのFastCGIを再起動するだけで使用出来ますが、変数のキャッシュを利用するにはアプリケーション側で対応する必要があります。WordPressには<a href="http://neosmart.net/dl.php?id=12" title="XCache for WordPress">XCache for WordPress</a>というプラグインがあるようですが、最近のバージョンのWordPressでは動作しないようなので、<a href="http://dougal.gunters.org/blog/2008/08/29/xcache-object-cache-plugin-for-wordpress-25" title="XCache Object Cache Plugin for WordPress">XCache Object Cache Plugin for WordPress 2.5+</a>を使用する事にしました。
</p>
<p>
<img src="http://wp-cdn.bluegold.me/2008/11/xcache-300x214.png" alt="xcache" title="xcache" width="300" height="214" class="size-medium wp-image-85" style="float:right;" /><br />
インストールは簡単ですが、XCache Object Cache Plugin for WordPressは通常のWordPressのプラグインとはインストールするパスが異なるので注意が必要です。プラグインのファイルは object-cache.php １つだけで、これをWordPressのコンテントディレクトリ（通常は xp-content ディレクトリ）に置きます。私も最初は説明を読まずに他のプラグインと同じように xp-content/plugins ディレクトリに置いて、しばらく悩みました。</p>
<p>このようにバイトコードと変数の双方がキャッシュされている事を確認出来ます。これだけで体感出来る程度には速度が向上するので、導入する価値はあると思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bluegold.me/2008/11/php-xcache-wordpress/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>nginxでphpを利用する</title>
		<link>http://blog.bluegold.me/2008/11/nginx-php-fastcgi/</link>
		<comments>http://blog.bluegold.me/2008/11/nginx-php-fastcgi/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 15:09:58 +0000</pubDate>
		<dc:creator>bg</dc:creator>
				<category><![CDATA[技術]]></category>
		<category><![CDATA[fastcgi]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.bluegold.me/?p=72</guid>
		<description><![CDATA[nginx で php を利用するための FastCGI の設定方法について説明します。]]></description>
			<content:encoded><![CDATA[<p><img src="http://wp-cdn.bluegold.me/2008/10/nginx-small.png" width="150" height="50" alt="" class="title_img" /></p>
<p>
<a href="http://nginx.net/" title="http://nginx.net/">nginx</a>からphpを利用するには、FastCGIを有効にしてphpをビルドしておく必要があります。<br />
php-5.2.6 を以下のようにビルドしました。
</p>
<p><pre class="brush: bash;">
./configure
    --with-curl=/usr --enable-fastcgi
    --enable-mbstring --enable-zend-multibyte
    --enable-mbregex --with-mysql
    --with-mcrypt --with-mhash
    --with-openssl --with-gd
    --enable-gd-native-ttf --enable-gd-jis-conv
    --with-jpeg-dir=/usr --with-xpm-dir=/usr
    --with-freetype-dir=/usr
make
make install
</pre>
</p>
<p>メールで記事を投稿する為に openssl と gd の関係のオプションを追加してます。<br />
openssl は gmail に対して POP で接続する為に、gd は<a href="http://wppluginsj.sourceforge.jp/ktai_entry/" title="Ktai Entry">Ktai Entry</a>で画像を添付したメールを処理するのに必要でした。</p>
<p>FastCGIのプロセスを以下のように起動します。</p>
<pre class="brush: bash;">
/usr/local/bin/php-cgi -q -b 127.0.0.1:9000
</pre>
</p>
<p>127.0.0.1:9000 は FastCGI の接続を待ち受ける IPアドレスとポート番号です。<br />
この値は環境に合わせて別の物に変更する事が可能です。
</p>
<p><span id="more-72"></span></p>
<p>続いて nginx 側の設定ファイルを作成します。</p>
<p><a href="/2008/10/configure-nginx/" title="blog構築メモ: nginx を設定する">前回</a>の記事で基本的な設定は nginx.conf に書いてあるので、ここでは VirtualHost の設定だけを記述します。</p>
<p>phpをFastCGIで実行するのに最低限必要な設定はこれだけです。</p>
<p><pre class="brush: bash;">
server {
    listen       80;
    server_name  bluegold.me blog.bluegold.me;
    root   /var/www/blog;
    index  index.php index.html index.htm;
&amp;lt;p&amp;gt;    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/blog/$fastcgi_script_name;
        include        fastcgi_params;
    }
}
</pre>
</p>
<p>127.0.0.1:9000 の部分は FastCGI のプロセスのオプションと同じ値を設定します。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bluegold.me/2008/11/nginx-php-fastcgi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
