<?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; wordpress</title>
	<atom:link href="http://blog.bluegold.me/tag/wordpress/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>WordPress Amazon S3 Plugin で画像を CloudFront から配信</title>
		<link>http://blog.bluegold.me/2010/08/using-wordpress-amazon-s3-plugin-with-cloudfront/</link>
		<comments>http://blog.bluegold.me/2010/08/using-wordpress-amazon-s3-plugin-with-cloudfront/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 17:37:58 +0000</pubDate>
		<dc:creator>bg</dc:creator>
				<category><![CDATA[技術]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.bluegold.me/?p=543</guid>
		<description><![CDATA[Wordpress Amazon S3 Plugin を使ってメディアライブラリの画像を Amazon S3 に置き、CloudFront から配信する方法について説明します。]]></description>
			<content:encoded><![CDATA[<p><a href="/2009/04/wordpress-theme-amazon-cloudfront-cdn">以前の記事</a>にもある通り、このブログではスタイルシートや画像、JavaScript ファイルなどの静的ファイルを Amazon S3 に置いて、Amazon CloudFront から配信しています。</p>
<p>URLの切替には自作のプラグインを使っています。記事にした当時は stylesheet_uri と template_directory_uri の置き換えをするだけのものでしたが、今は WP_PLUGIN_URL も置換えて、プラグインが追加するスタイルや画像も CloudFront から配信しています。</p>
<p>ここまではわりと簡単に実装できていたのですが、メディアライブラリ(uploads ディレクトリ)に置いた画像ファイルは記事の中身を書き換える必要があるため、なかなか手を出せずに1年くらい放置していましたが、最近、<a href="http://imthi.com/wp-s3">WordPress Amazon S3 Plugin</a> というものがあるのを知り、さっそく試してみました。</p>
<p><span id="more-543"></span></p>
<p>このプラグインのセットアップは簡単で、plugins ディレクトリに置いて有効化したあとで、Amazon S3 の認証情報と画像を置くバケツ名を指定するだけです。</p>
<p>設定が完了した後はしばらく待っていると、wp-cron の仕組みを使い、誰かがアクセスしてきた時にバックグラウンドで画像ファイルを Amazon S3 にアップロードしていきます。(アップロードする画像はキューに入れられ、順番に処理されていくようです。)</p>
<p>画像ファイル毎に Amazon S3 へのアップロード状況が記録され、正常に保存された画像ファイルの URL は次回に表示される時から Amazon S3 の URL に置換えられます。</p>
<p>非常に簡単に使えて効果の高いプラグインなのですが、このブログの環境ではいくつか問題がありました。</p>
<h3>画像ファイルが完全URLで指定されている事が想定されている。</h3>
<p>このプラグインでは画像ファイルへの URL が http:// から始まる完全 URL で書かれている事を想定しているのですが、当ブログでは、ある記事では完全 URL、別の記事ではルート相対URL、という感じで記事ごとに画像の URL の書き方がバラバラでした。<br />
このため、画像への URL を探す正規表現にマッチしない画像がたくさん出てきてしまいました。</p>
<p>メディアライブラリから画像を「投稿に挿入」していれば、完全URLで書かれるので普通に使っていれば問題は無かったはずなんですが。。。</p>
<p>しかたがないので、これはプラグインのソースに手を入れてルート相対URLでも書き換えられるように修正しました。</p>
<h3>CloudFront の URL に対応していない。</h3>
<p>このプラグインは画像ファイルのURLを <strong>http://&gt;バケツ名&lt;.s3.amazonaws.com </strong> という場所に変更するのですが、私のデータは Amazon S3 の中でも北米東海岸のサーバに置かれているため、ファイルの送信にちょっと時間がかかります。どうせなら国内の CloudFront のサーバから配信したいので、以下のようにソースを修正しました。wp-cdn.bluegold.me はヂストリビューションに付けた CNAME です。</p>
<pre class="brush: php;">
*** 212,218 ****
  if (file_exists ( $mediaInfo [ 'cache' ] ) === TRUE) {
          $fileContents = file_get_contents ( $mediaInfo [ 'cache' ] );
          if ($fileContents == 'done') {
!           $cdnUrl = &quot;http://{$this-&gt;s3BucketName}.s3.amazonaws.com/&quot; . $mediaInfo [ 'path' ];
            $the_content = str_replace ( $mediaInfo [ 'url' ], $cdnUrl, $the_content );
          }
  } else {
--- 214,221 ----
 if (file_exists ( $mediaInfo [ 'cache' ] ) === TRUE) {
         $fileContents = file_get_contents ( $mediaInfo [ 'cache' ] );
         if ($fileContents == 'done') {
! //       $cdnUrl = &quot;http://{$this-&gt;s3BucketName}.s3.amazonaws.com/&quot; . $mediaInfo [ 'path' ];
!           $cdnUrl = &quot;http://wp-cdn.bluegold.me/&quot; . $mediaInfo [ 'path' ];
             $the_content = str_replace ( $mediaInfo [ 'url' ], $cdnUrl, $the_content );
         }
 } else {
</pre>
<p>このプラグインは非常に簡単に使えるので、Amazon S3 のアカウントを持っている人にはお勧めできますね。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bluegold.me/2010/08/using-wordpress-amazon-s3-plugin-with-cloudfront/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XCache を複数の WordPress で使う場合の問題</title>
		<link>http://blog.bluegold.me/2009/05/wordpress-xcache-object-cache-collision/</link>
		<comments>http://blog.bluegold.me/2009/05/wordpress-xcache-object-cache-collision/#comments</comments>
		<pubDate>Sun, 03 May 2009 16:24:58 +0000</pubDate>
		<dc:creator>bg</dc:creator>
				<category><![CDATA[技術]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[xcache]]></category>

		<guid isPermaLink="false">http://blog.bluegold.me/?p=174</guid>
		<description><![CDATA[複数のブログを持つサイトで XCache Object Cache Plugin for WordPress を使用すると、サイト間でログイン情報などのキャッシュが混ざってしまう問題について]]></description>
			<content:encoded><![CDATA[<p><a href="/2008/11/php-xcache-wordpress/">以前のエントリ</a>で WordPress のオブジェクトキャッシュを XCache の保存する方法について書きましたが、その後問題が発生したのでメモ。
</p>
<p>複数の WordPress を１つのホストで稼働させる際に <a href="http://dougal.gunters.org/blog/2008/08/29/xcache-object-cache-plugin-for-wordpress-25">XCache Object Cache Plugin for WordPress 2.5+</a> を使用すると、オブジェクトキャッシュが混ざってしまうようです。</p>
<p><span id="more-174"></span></p>
<p>このサイトでは<a href="http://blog.bluegold.me">http://blog.bluegold.me</a>用と<a href="http://mama.bluegold.me">http://mama.bluegold.me</a>用に２つの WordPress を稼働させています。それぞれ専用のデータベースを持つ独立したブログになっていますが、双方でオブジェクトキャッシュを有効にしたところ、しばらくして blog.bluegold.me 側の WordPress の管理コンソール(wp-admin)にログインできなくなりました。
</p>
<p>XCache をインストールしてからは時間が経っていたので関係しているとは全く思わずに、MySQL 側でパスワードを何度も更新してログインを試みたり、WordPress <del datetime="2009-05-04T13:31:10+00:00">2.7.2</del> 2.7.1 にバージョンを上げたばかりだったので、仕様が変わったのかと調べてみたりしたものの原因は分かりませんでした。
</p>
<p>管理コンソールいろいろなIDとパスワードを入力しているうちに、blog.bluegold.me のユーザ名(bg)を入力すると「ユーザ名が違います」を表示されるのに、mama.bluegold.me 側のユーザ名(papa)を入力すると「パスワードが違います」と表示される事に気がつきました。ありえない事が起きているのが分かってきたので、試しに<strong>papa の正しいパスワード</strong>を入力してみたところログインに成功し、<strong>bgのダッシュボード</strong>が表示されました。
</p>
<p>ここでキャッシュが悪さをしている事がわかったので、オブジェクトキャッシュの使用を止めて、キャッシュをクリアするために PHP の FastCGI のプロセスを再起動しました。
</p>
<p>調べてみると、やはり同じような問題を抱えている人はいるようで、以下のサイトに詳しく書かれていました。ユーザ情報が混在するのは仕様なんですかね．．．<br />
<a href="http://jamescoletti.com/multiple-wordpress-installs-and-object-cache-collision">http://jamescoletti.com/multiple-wordpress-installs-and-object-cache-collision</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bluegold.me/2009/05/wordpress-xcache-object-cache-collision/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPressの画像をAmazon CloudFrontに置く</title>
		<link>http://blog.bluegold.me/2009/04/wordpress-theme-amazon-cloudfront-cdn/</link>
		<comments>http://blog.bluegold.me/2009/04/wordpress-theme-amazon-cloudfront-cdn/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 06:12:44 +0000</pubDate>
		<dc:creator>bg</dc:creator>
				<category><![CDATA[技術]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.bluegold.me/?p=164</guid>
		<description><![CDATA[WordPress のテーマで使用するスタイルシートや JavaScript、画像ファイルを Amazon S3 に置いて、Amazon の CDN サービスである CloudFront から配信するための方法について説明します。]]></description>
			<content:encoded><![CDATA[<p><img src="http://media.amazonwebservices.com/logo_aws.gif" width="164" height="60" alt="last.fm" class="title_img" /></p>
<p>
このブログは今のところ自宅に置いてあるサーバで運用しています。<br />
手直にあるので管理は簡単なのですが、自宅の回線はアップストリームの帯域幅が大きくないので、ページを表示するさいの画像読み込みの遅延が以前から気になっていました。
</p>
<p>
このサイトでは以下のように nginx を設定することで、可能な限り静的なコンテンツの使用する帯域幅を小さくしようとしていますが、それでもファイル転送量のほとんどは画像ファイルになっています。</p>
<pre class="brush: bash;">
location / {
    if (-f $request_filename) {
        expires 30d;
        break;
    }
}
location ~* ^.+\.(html|css|txt|tar|bmp|rtf|js)$ {
    gzip_static on;
    expires 30d;
}
</pre>
<p>以前から画像を外部のサイトに置いて転送負荷を減らそうと考え、一部の画像を<a href="http://www.flickr.com/photos/bluegoldme/">flickr</a>に置いたりしていますが、これはという解決策がありませんでした。</p>
<p>
最近、仕事関係で Amazon のウェブサービスについて調べていて<a href="http://aws.amazon.com/cloudfront/">Amazon CloudFront</a>というサービスがあるのを知り、WordPress のテーマの画像を置いてみたらどうなるのかを調べてみました。
</p>
<p><span id="more-164"></span>
<p>
Amazon CloudFront は Amazon の提供するウェブサービスの１つで、いわゆる<a href="http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E3%83%87%E3%83%AA%E3%83%90%E3%83%AA%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF">CDN</a>です。Amazon S3に保存したファイルをインターネット上に分散配置されたキャッシュサーバに置く事で、静的なコンテンツを高速に配信する事ができるようになっています。
</p>
<p>
有料のサービスなので利用には Amazon Web Service のアカウントが必要になりますが、以下のように安価な価格設定になっているので費用対効果は高いと思います。</p>
<dl style="background-color: #F4F7FF; font-size: 90%; color:#114488; margin-left:1em; margin-right:0;　 margin-top:12px;　 margin-bottom:8px; border: 1px #6F6F6F dashed; padding: 12px;line-height: 160%; -moz-border-radius: 5px; -webkit-border-radius: 5px;">
<dt>United States</dt>
<dd>$0.170 per GB &#8211; first 10 TB / month data transfer out</dd>
<dd>$0.010 per 10,000 GET Requests</dd>
<dt>Japan</dt>
<dd>$0.221 per GB &#8211; first 10 TB / month data transfer out</dd>
<dd>$0.013 per 10,000 GET Requests</dd>
</dl>
<p>
Amazon S3 の使い方はいろんな場所で説明されているので省きます。使用しているテーマのディレクトリから画像や css, js ファイルを CloudFront に配備してください。<br />
S3 に置いたファイル（オブジェクト）に対して Everyone の Read 権限を与える必要がある点だけ注意してください。<br />
Firefox のプラグイン <a href="https://addons.mozilla.org/ja/firefox/addon/3247">S3Organizer</a>はCloudFront にも対応しているのでお勧めです。
</p>
<p>
CloudFrontに置いたファイルをWordPressから参照する方法はテーマファイル次第ですが、私のサイトで作ってもらったテーマでは bloginfo(&#8216;template_directory&#8217;); と bloginfo(&#8216;stylesheet_url&#8217;); の２つの値を変更するだけで大丈夫そうでした。<br />
私はWordPressもPHPも詳しくなく、この二つの値を変更する「正しい方法」が分からなかったため適当にプラグインを書いてみました。<br />
（こうやって野良プラグインが増えていくんだろうな）
</p>
<p>
プラグインのソースは以下の通りです。</p>
<pre class="brush: php;">
&lt;?php
/*
 * Plugin Name: CloudFront
 * Plugin URI: http://blog.bluegold.me/cloudfront
 * CloudFront plugin is a plugin designed to help you drastically speed up your blog's load time by loading content onto Amazon CloudFront.
 * Version: 0.1
 * Author: Blog Bluegold.me
 * Author URI: http://blog.bluegold.me
 * */

$cdn_base = &quot;__EDIT_HERE__&quot;;

function    filter_cdn_css($url) {
    global $cdn_base;
    return $cdn_base . &quot;/style.css&quot;;
}

function    filter_cdn_template_dirctory($url) {
    global $cdn_base;
    return $cdn_base;
}

add_filter('stylesheet_uri','filter_cdn_css');
add_filter('template_directory_uri','filter_cdn_template_dirctory');
?&gt;
</pre>
<p>これを WordPress の wp-content/plugins/cloudfront/cloudfront.php という名前で保存するだけです。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bluegold.me/2009/04/wordpress-theme-amazon-cloudfront-cdn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPressのwpadsプラグインで日本語を使用するには</title>
		<link>http://blog.bluegold.me/2008/12/wordpress-wpads-japanese-utf8/</link>
		<comments>http://blog.bluegold.me/2008/12/wordpress-wpads-japanese-utf8/#comments</comments>
		<pubDate>Wed, 24 Dec 2008 02:42:33 +0000</pubDate>
		<dc:creator>bg</dc:creator>
				<category><![CDATA[技術]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.bluegold.me/?p=147</guid>
		<description><![CDATA[WordPress の wpads プラグインで日本語が文字化けする問題の対処方法について説明します。]]></description>
			<content:encoded><![CDATA[<p>このブログでは広告を表示するのに<a href="http://thesandbox.wordpress.com/wpads/">WPAds</a>プラグインを利用しています。このプラグインは重み付けによって複数の広告を切り替えて表示する機能など非常に便利なものですが、広告の「Description」や「HTML Code」に日本語を入れると文字化けしてしまう問題があります。</p>
<p>今日はちょっと時間があったので文字化けの原因について調べてみました。</p>
<p><span id="more-147"></span>
<p>日本語の文字を含んだ広告を作成してWPAdsのデータベースを直接見てみたところ正常に保存されているようなので、原因は管理ページの表示部分にあると予想して wpads-options.php を見たところ、以下のようなコードになっていました。</p>
<pre class="brush: php;">
&lt;tr&gt;
    &lt;td valign=&quot;top&quot;&gt;Description&lt;/td&gt;
    &lt;td&gt;
        &lt;input name=&quot;banner_description&quot; type=&quot;text&quot; size=&quot;50&quot; value=&quot;&lt;?php echo htmlentities($banner-&gt;banner_description);?&gt;&quot; /&gt;&lt;br /&gt;
        Any text that helps you identify this banner
    &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
    &lt;td valign=&quot;top&quot;&gt;HTML Code&lt;/td&gt;
    &lt;td&gt;
        &lt;textarea name=&quot;banner_html&quot; rows=&quot;6&quot; cols=&quot;80&quot;&gt;&lt;?php echo htmlentities($banner-&gt;banner_html);?&gt;&lt;/textarea&gt;&lt;br /&gt;
        Copy and paste the HTML code to show the ad (for example, the Google AdSense code)
    &lt;/td&gt;
&lt;/tr&gt;
</pre>
<p>どうも<a href="http://us3.php.net/htmlentities">htmlentities()</a>によるエスケープ処理で日本語が化けてしまっているようです。htmlentities() は文字コードを省略されると ISO-8859-1 として処理されるようなので、正しく処理するように &#8216;UTF-8&#8242; を渡します。（ついでに XSS の問題がありそうなので ENT_QUOTES オプションを追加。）
</p>
<p>修正後のソースは以下のようになります</p>
<pre class="brush: php;">
&lt;tr&gt;
    &lt;td valign=&quot;top&quot;&gt;Description&lt;/td&gt;
    &lt;td&gt;
        &lt;input name=&quot;banner_description&quot; type=&quot;text&quot; size=&quot;50&quot; value=&quot;&lt;?php echo htmlentities($banner-&gt;banner_description, ENT_QUOTES, 'UTF-8');?&gt;&quot; /&gt;&lt;br /&gt;
        Any text that helps you identify this banner
    &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
    &lt;td valign=&quot;top&quot;&gt;HTML Code&lt;/td&gt;
    &lt;td&gt;
        &lt;textarea name=&quot;banner_html&quot; rows=&quot;6&quot; cols=&quot;80&quot;&gt;&lt;?php echo htmlentities($banner-&gt;banner_html, ENT_QUOTES, 'UTF-8');?&gt;&lt;/textarea&gt;&lt;br /&gt;
        Copy and paste the HTML code to show the ad (for example, the Google AdSense code)
    &lt;/td&gt;
&lt;/tr&gt;
</pre>
<p>patch: <a href="http://wp-cdn.bluegold.me/wpads-utf8.patch">wpads-utf8.patch</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bluegold.me/2008/12/wordpress-wpads-japanese-utf8/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Useful WordPress SQL Hacks</title>
		<link>http://blog.bluegold.me/2008/12/mysql-cache/</link>
		<comments>http://blog.bluegold.me/2008/12/mysql-cache/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 11:39:18 +0000</pubDate>
		<dc:creator>bg</dc:creator>
				<category><![CDATA[技術]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.bluegold.me/?p=140</guid>
		<description><![CDATA[「8 Useful WordPress SQL Hacks」という記事を参考にして WordPress のSQL実行回数を計測します。]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://www.smashingmagazine.com/2008/12/18/8-useful-wordpress-sql-hacks/">8 Useful WordPress SQL Hacks</a>という記事の7番を参考にして、このブログでもWordPressのSQL実行回数を計測してみました。
</p>
<p>
計測方法は以下のコードを footer.php に追加するだけです。
</p>
<pre class="brush: php;">
&lt;?php if (is_user_logged_in()) { ?&gt;
    &lt;?php echo get_num_queries(); ?&gt; queries in &lt;?php timer_stop(1); ?&gt; seconds.
&lt;?php } ?&gt;
</pre>
<p><span id="more-140"></span>
<p>
結果は以下のようになりました。<br />
トップページを3回表示させた時の時間です。</p>
<pre>
24 queries in 0.540 seconds.
24 queries in 0.545 seconds.
24 queries in 0.550 seconds.
</pre>
<p>WordPressで24 queriesは多いのか少ないのかは分かりませんが、1ページ作るのに 0.5 秒は非力なこのマシンでもちょっと遅いか。
</p>
<p>
そこで、MySQLのクエリキャッシュを有効にする事にしました。<br />
このブログのサーバ機はメモリが256MBしかないので、いままでは無効にしていました。
</p>
<p>
my.cnfの具体的な設定値は以下の通り。</p>
<pre class="brush: bash;">
query_cache_limit=1M
query_cache_min_res_unit=4k
query_cache_size=16M
query_cache_type=1
</pre>
</p>
<p>
同じようにトップページを3回表示させたところ、若干の速度向上がありました。<br />
微妙と言えば微妙ですが。。。</p>
<pre>
24 queries in 0.512 seconds.
24 queries in 0.510 seconds.
24 queries in 0.510 seconds.
</pre></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bluegold.me/2008/12/mysql-cache/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>WordPressのバックアップを Gmail に保存する その3</title>
		<link>http://blog.bluegold.me/2008/10/backup-wordpress-to-gmail-3/</link>
		<comments>http://blog.bluegold.me/2008/10/backup-wordpress-to-gmail-3/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 16:28:18 +0000</pubDate>
		<dc:creator>bg</dc:creator>
				<category><![CDATA[技術]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.bluegold.me/?p=45</guid>
		<description><![CDATA[WordPressのバックアップを GMail に保存する方法。添付ファイルつきのメールを送信する Ruby のスクリプト。]]></description>
			<content:encoded><![CDATA[<p>前回、暗号化を行った事によりバックアップの保存の目的はほぼ果たしているのですが、気持ちが悪いので添付ファイルについても考えてみました。</p>
<p>gmail と uuencode をキーワードに Google で検索した所、mutt を使うのが一般的らしい。<br />
↓のように &#8216;-a&#8217; キーワードで添付するファイルを指定するだけで添付ファイルとして扱ってくれます。</p>
<pre class="brush: bash;">
mutt -a name.afz -a mysql_name.afz -s &quot;name backup `date`&quot; to_address
</pre>
<p>
複数の添付ファイルにも対応しているので、この方法で問題ないかとも思ったのですが、１つだけ問題がありました。mutt では Envelope From を引数で変更することが出来ず、muttrc/.muttrc に別途設定する必要があります。</p>
<p>なんかめんどくさそうな感じがしたので、結局は Ruby でフィルタプログラムを書くことにしました。</p>
<p><span id="more-45"></span>
<p>以下のような物になりました。</p>
<pre class="brush: ruby;">
#!/usr/bin/env ruby
#
# sendmail.rb&lt;/p&gt;

require 'rubygems'
require 'tmail'
require 'net/smtp'
require 'nkf'
require 'etc'
require 'socket'
require 'optparse'

def usage( status, msg = nil )
  output = (status == 0 ? $stdout : $stderr)
  output.puts msg if msg
  output.print(&amp;lt;&amp;lt;EOS)
Usage: cat msg | #{File.basename $0} [-j|--ja] [-s &lt;subject&gt;] [-f &lt;from&gt;] &lt;to&gt;

  -s,--subject=sbj   subject of the message. (default=(none))
  -f,--from=from     from address.
  -a,--attachment=file attachment
  -j,--ja            handle japanese message. (default=off)

EOS
  exit status
end

def main(args)
  subject = nil
  from = guess_from_address()
  to = []
  attachments = []
  ja_locale = false

  OptionParser.new do |opt|
    opt.banner = &quot;Usage: #{$0} [options]&quot;

    opt.on('-s', '--subject=subj', 'subject of the message. (default=(none))') do |arg|
      subject = arg
    end
    opt.on('-f', '--from=from', 'from address.') do | arg|
      from = arg
    end
    opt.on('-j', '--ja', 'handle japanese message. (default=off)') do
      ja_locale = true
    end
    opt.on('-a', '--attachment=file', 'attachment') do |arg|
      attachments &amp;lt;&amp;lt; arg
    end

    to = opt.parse!(args)
  end

  usage(1) if to.empty?

  setup_mail(from, to, subject, $stdin.read, ja_locale, attachments)
end

def setup_mail( from, to, subject, body, ja_locale, attachments )
  mail = TMail::Mail.new
  mail.date = Time.now
  mail.from = from
  mail.to = to
  mail.subject = subject if subject
  mail.mime_version = '1.0'

  # 本文の処理
  if attachments.empty?
    message = mail
  else
    message = TMail::Mail.new
    message.transfer_encoding = '7bit'
  end
  if ja_locale
    message.body = &lt;span class=&quot;caps&quot;&gt;NKF.&lt;/span&gt;nkf('-j', body)
    message.set_content_type 'text', 'plain', 'charset' =&amp;gt; 'iso-2022-jp'
  else
    message.body = body
    message.set_content_type 'text', 'plain'
  end

  # 添付ファイルの処理
  unless attachments.empty?
    mail.parts.push(message)

    attachments.each do |filepath|
      body = nil
      File.open(filepath) { |f| body = f.read } rescue nil
      next if body.nil?

      attachment = TMail::Mail.new
      filename = File.basename(filepath)

      encoded_body = [body].pack('m').chomp.gsub(/.{76}/, &quot;\\1\n&quot;)
      attachment = TMail::Mail.new
      attachment.body = encoded_body
      attachment.transfer_encoding = 'base64'
      attachment.set_content_type('application', 'octet-stream', 'name' =&amp;gt; filename)
      attachment.set_content_disposition('attachment',
                 'filename' =&amp;gt; filename)

      mail.parts.push(attachment)
    end

    mail.write_back
  end

  puts mail.encoded

  mail
end

def guess_from_address
  user = getlogin()
  unless user
    $stderr.puts 'cannot get user account; abort.'
    exit 1
  end
  if domain = (Socket.gethostname || &lt;span class=&quot;caps&quot;&gt;ENV&lt;/span&gt;['HOSTNAME'] || &lt;span class=&quot;caps&quot;&gt;ENV&lt;/span&gt;['HOST'])
    user + '@' + domain
  else
    user
  end
end

def getlogint
  begin
    require 'etc'
    Etc.getlogin
  rescue LoadError
    &lt;span class=&quot;caps&quot;&gt;ENV&lt;/span&gt;['LOGNAME'] || &lt;span class=&quot;caps&quot;&gt;ENV&lt;/span&gt;['USER']
  end
end

main(ARGV)
</pre>
</p>
<p>TMail のサンプルの sendmail.rb をほぼそのまま使っています。<br />
引数　&#8217;-a&#8217; で添付ファイルを指定出来るように変更しました。（getopts が deprecated になっていたので optparse で書き直しています。）</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bluegold.me/2008/10/backup-wordpress-to-gmail-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPressのバックアップを Gmail に保存する その2</title>
		<link>http://blog.bluegold.me/2008/10/backup-wordpress-to-gmail-2/</link>
		<comments>http://blog.bluegold.me/2008/10/backup-wordpress-to-gmail-2/#comments</comments>
		<pubDate>Sun, 19 Oct 2008 16:21:39 +0000</pubDate>
		<dc:creator>bg</dc:creator>
				<category><![CDATA[技術]]></category>
		<category><![CDATA[afio]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.bluegold.me/?p=40</guid>
		<description><![CDATA[WordPressのバックアップファイルを afio で圧縮する際に 256bit のAES で暗合する方法を紹介しています。AES 暗号には openssl コマンドを使用しています。]]></description>
			<content:encoded><![CDATA[<p>バックアップファイルを 256bit <span class="caps">AES </span>で暗号化する方法について考えます。</p>
<p>バックアップの作成に使用した afio には、バックアップ対象のファイルを個別に圧縮する機能があります。圧縮に使用する外部プログラムは引数で変更出来るので、これを利用して暗号化を行います。</p>
<p><span id="more-40"></span>
<p>まずは、下のような暗号化用のフィルタを作成します。</p>
<p><pre class="brush: bash;">
#!/bin/sh
# encrypt_filter.sh

opt=&quot;-pass env:FILTER_PASSWORD&quot;

if [ -r /etc/wp_backup_password ]; then
    opt=&quot;-pass file:/etc/wp_backup_password&quot;
fi
gzip -c | openssl enc -e -aes-256-cbc $opt
</pre>
</p>
<p>次に afio に　-P オプションでフィルタプログラムを使用させます。</p>
<p>
<pre class="brush: bash;">
afio -ovz -Z -U -P encrypt_filter.sh backup.afz
</pre>
</p>
<p>これでバックアップファイルが作成される際に個別のファイル毎に暗号化されるようになります。</p>
<p>/etc/wp_backup_password ファイルが暗号鍵になります。このファイルはバックアップを元に戻す時に必要になるので安全な場所に保管しておかないといけません。パスワードファイルの中身はなんでも構わないので、うちのサイトでは以下のようにしてランダムに作成しています。</p>
<pre class="brush: bash;">
dd if=/dev/urandom of=/etc/wp_backup_password bs=256 count=1
</pre>
</p>
<p>このファイルはバックアップを行うアカウント以外からは読み込めないようにパーミッションを設定しておく必要があります。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bluegold.me/2008/10/backup-wordpress-to-gmail-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPressのバックアップを Gmail に保存する</title>
		<link>http://blog.bluegold.me/2008/10/backup-wordpress-to-gmail/</link>
		<comments>http://blog.bluegold.me/2008/10/backup-wordpress-to-gmail/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 06:34:56 +0000</pubDate>
		<dc:creator>bg</dc:creator>
				<category><![CDATA[技術]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.bluegold.me/?p=28</guid>
		<description><![CDATA[WordPressのデータベースのバックアップして gmail に送信するスクリプトを紹介しています。]]></description>
			<content:encoded><![CDATA[<p>毎日のブログのバックアップの保管場所をどこにしようかと悩んでいたんですが、Gmailに送ってしまえば良い事に気がつきました。<br />
容量的には問題はないですし、毎日のバックアップの置き場としては問題無さそうです。</p>
<p>暗号化とかは後で考えるとして、とりあえず下のようなスクリプトを書いてみました。</p>
<p><span id="more-28"></span></p>
<pre class="brush: bash;">
#!/bin/sh

AFIO=/usr/local/bin/afio
MYSQLHOTCOPY=/usr/bin/mysqlhotcopy
SENDMAIL=/usr/sbin/sendmail

WORKDIR=/var/tmp
WWWDIR=/var/www
LOGDIR=/var/log

if [ -f /etc/wp_backup ]; then
    . /etc/wp_backup
fi

if [ ${MYSQL_USER:-nothing} = &quot;nothing&quot; ]; then
    exit 1
fi
if [ ${MAIL_FROM:-nothing} = &quot;nothing&quot; ]; then
    exit 1
fi

function cleanup() {
    rm -rf $WORKDIR/mysql
    rm -f $WORKDIR/$name.afz
    rm -f $WORKDIR/mysql_$name.afz
}
trap &quot;cleanup&quot; EXIT

name=${1:-blog}

if [ ! -d $WORKDIR/mysql ]; then
    mkdir $WORKDIR/mysql
fi

(
echo &quot;BACKUP START: `date`&quot;

# backup mysql
$MYSQLHOTCOPY -u $MYSQL_USER -p $MYSQL_PASSWORD $name $WORKDIR/mysql

cd $WORKDIR/mysql
find $name | $AFIO -ovz -Z -U $WORKDIR/mysql_$name.afz

# backup wordpress
cd $WWWDIR
find $name | $AFIO -ovz -Z -U $WORKDIR/$name.afz

echo &quot;BACKUP FINISHED: `date`&quot;
) &gt;&gt; $LOGDIR/wp_backup.log 2&gt;&amp;1

# send the backup files
(
cat &lt;&lt;__END__
From: $MAIL_FROM
To: $MAIL_TO
Subject: $name backup `date`

blog name: $name
date: `date`

`uuencode $name.afz &lt; $WORKDIR/$name.afz`

`uuencode mysql_$name.afz &lt; $WORKDIR/mysql_$name.afz`

__END__
) | $SENDMAIL -f $MAIL_FROM -t $MAIL_TO

exit 0
</pre>
<p>バックアップを Gmail に送信する事はできたので問題は解決したかと思ったんですが、Gmail は uuencode の添付ファイルを認識しないんですねぇ。手元の Apple Mail でも認識していないので単に時代遅れなだけか。</p>
<p>もう少し考えねば</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bluegold.me/2008/10/backup-wordpress-to-gmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
