<?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>kamolog &#187; PHP</title>
	<atom:link href="http://www.mkamo.org/blog/category/dev/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.mkamo.org/blog</link>
	<description>mkamo&#039;s blog ．．．．． mkamo&#039;s memo?</description>
	<lastBuildDate>Tue, 13 Jul 2010 12:07:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>PHPで可変長引数の関数を定義</title>
		<link>http://www.mkamo.org/blog/20090701/404.html</link>
		<comments>http://www.mkamo.org/blog/20090701/404.html#comments</comments>
		<pubDate>Wed, 01 Jul 2009 06:31:56 +0000</pubDate>
		<dc:creator>mkamo</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.mkamo.org/blog/?p=404</guid>
		<description><![CDATA[PHPで可変長引数の関数を定義する方法のメモ．

 

PHP4以降では関数に渡された引数の情報を取得するために以下の関数を使うことができる．

func_num_args()      関数に渡された引数の数を返す 
 [...]]]></description>
			<content:encoded><![CDATA[<p>PHPで可変長引数の関数を定義する方法のメモ．</p>
</p>
<p> <span id="more-404"></span>
</p>
<p>PHP4以降では関数に渡された引数の情報を取得するために以下の関数を使うことができる．</p>
<ul>
<li>func_num_args()      <br />関数に渡された引数の数を返す </li>
<li>func_get_arg(int arg_num)      <br />関数に渡された引数のうちarg_num番目のものを返す．arg_numは0から数える整数 </li>
<li>func_get_args()      <br />関数に渡された引数を配列で返す </li>
</ul>
<p>可変長の引数を受け取る関数の例は以下のとおり．必須の引数$msg以外に任意の個数の引数を受け取り，$msg内の「{数字}」の箇所を置換した文字列を返す．この例ではfunc_get_args()だけを使っているが，func_num_args()とfunc_get_arg()を使っても実装できる．
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:531e0485-8e33-4fcb-8a98-e09249dbe703" class="wlWriterEditableSmartContent">
<pre name="code" class="php:nogutter:nocontrols">&lt;?php

function replaceMsg($msg) {
    /// すべての引数を取得
    $args = func_get_args();

    /// $msgを$argsから取り除く
    array_shift($args);

    $replacePairs = array();
    foreach ($args as $i =&gt; $arg) {
        $replacePairs['{'.$i.'}'] = $arg;
    }

    return strtr($msg, $replacePairs);
}

echo replaceMsg('There are {0}, {1} and {2}.', 'foo', 'bar', 'baz'); /// =&gt; There are foo, bar and baz.

?&gt;
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.mkamo.org/blog/20090701/404.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse PDT 2.0 + XAMPP Lite 1.7.1 + Zend Debugger</title>
		<link>http://www.mkamo.org/blog/20090403/123.html</link>
		<comments>http://www.mkamo.org/blog/20090403/123.html#comments</comments>
		<pubDate>Fri, 03 Apr 2009 00:32:33 +0000</pubDate>
		<dc:creator>mkamo</dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.mkamo.org/blog/20090403/123.html</guid>
		<description><![CDATA[Eclipse PDT 2.0とXAMPP Lite 1.7.1とZend Debuggerを使ってPHPのサーバサイドデバッグ環境を構築する手順を以下に示す．
XAMPP Liteの1.7.0と1.7.1とで設定ファイ [...]]]></description>
			<content:encoded><![CDATA[<p>Eclipse PDT 2.0とXAMPP Lite 1.7.1とZend Debuggerを使ってPHPのサーバサイドデバッグ環境を構築する手順を以下に示す．</p>
<p>XAMPP Liteの1.7.0と1.7.1とで設定ファイルの場所が変更されたようなので記事を1.7.1向けにアップデートした．</p>
<p><span id="more-123"></span></p>
<h3 id="toc-xampp-lite">XAMPP Liteのインストール</h3>
<ol>
<li>XAMPP Liteのダウンロード<br />
<a title="http://www.apachefriends.org/en/xampp-windows.html" href="http://www.apachefriends.org/en/xampp-windows.html">http://www.apachefriends.org/en/xampp-windows.html</a>よりXAMPP Liteをダウンロードする．ここではZIPアーカイブ版のXAMPP Liteであるxampplite-win32-x.x.x.zipをダウンロードしたものとする．</li>
<li>XAMPP Liteの展開<br />
ダウンロードしたXAMPP Liteを適当なディレクトリに展開する．ここではd:\opt\xamppliteに展開したものとする．</li>
<li>XAMPP Liteの初期設定<br />
d:\opt\xampplite\setup_xampp.batを実行する．これにより設定ファイルの内容の一部が展開されたディレクトリに書き換えられたりする．</li>
<li>各種サーバの設定<br />
必要ならば各種サーバの独自設定をする</p>
<ul>
<li> Apacheの設定はd:\opt\xampplite\apache\conf\httpd.conf</li>
<li>MySQLの設定はd:\opt\xampplite\mysql\bin\my.ini</li>
<li>PHPの設定はd:\opt\xampplite\php\php.ini</li>
</ul>
<p>自分の場合は，ApacheのDocumentRootをPHP開発用ディレクトリに変更し，MySQLのdataフォルダも開発用MySQLデータディレクトリに変更してある．</li>
</ol>
<h3 id="toc-zend-debugger-web-server-extension">Zend Debugger web server extensionのインストール</h3>
<ol>
<li>Zend Debugger web server extensionのダウンロード<br />
<a title="http://downloads.zend.com/pdt/server-debugger/" href="http://downloads.zend.com/pdt/server-debugger/">http://downloads.zend.com/pdt/server-debugger/</a>で最新版のZend Debugger web server extensionをダウンロードする．Windowsであれば，ZendDebugger-x.x.x-cygwin_nt-i386.zipをダウンロードすればよい．</li>
<li>アーカイブの展開<br />
ダウンロードしたZend Debuggerのアーカイブを適当なディレクトリに展開する．</li>
<li>dummy.phpのコピー<br />
展開してできたファイルうち，dummy.phpをXAMPP LiteのapacheのDocumentRootディレクトリ直下にコピーする．Apacheの設定を特に変更していなければd:\opt\xampplite\htdocs\がDocumentRootに設定されているので，そこにコピーすればよい．</li>
<li>ZendDebugger.dllのコピー<br />
展開したできたファイルから，XAMPP LiteのPHPのバージョンに対応したZendDebuggerをd:\opt\xampplite\php\ディレクトリにコピーする．例えばXAMPP Lite 1.7.1の場合，PHP 5.2.9なので5_2_x_comp\ZendDebugger.dllをコピーする．</li>
<li>php.iniの編集<br />
d:\opt\xampplite\php\php.iniを開き，[Zend]セクションに以下の行を加える．</p>
<pre>zend_extension_ts=d:\opt\xampplite\php\ZendDebugger.dll
zend_debugger.allow_hosts="127.0.0.1, 192.168.1.11, 192.168.1.102"
zend_debugger.expose_remotely=always</pre>
<p>zend_dubugger.allow_hostsにはこのサーバに対してEclipse PDTでデバッグ実行したいマシンのIPをカンマ区切りで記述する．</li>
</ol>
<h3 id="toc-xampp-lite1">XAMPP Liteの実行</h3>
<ol>
<li>XAMPP Control Panelの起動<br />
d:\opt\xampplite\xampp-control.exeを実行する．管理ツールであるXAMPP Control Panelが起動する．</p>
<p><a href="http://www.mkamo.org/blog/wp-content/uploads/2009/04/image1.png"><img style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" title="image" src="http://www.mkamo.org/blog/wp-content/uploads/2009/04/image-thumb1.png" border="0" alt="image" width="450" height="304" /></a></li>
<li>ApacheとMySQLを起動<br />
XAMPP Control Panelの[Modules]の&#8221;Apache&#8221;の右の[Start]ボタンを押すとApacheが起動する．同様に&#8221;MySQL&#8221;の右の[Start]ボタンでMySQLが起動する．</li>
</ol>
<h3 id="toc-eclipse-pdt">Eclipse PDTのインストール</h3>
<ol>
<li>Eclipse PDTのダウンロード<br />
<a title="http://www.eclipse.org/pdt/downloads/" href="http://www.eclipse.org/pdt/downloads/">http://www.eclipse.org/pdt/downloads/</a>から<a title="http://www.zend.com/community/pdt?ecl=EclipseZend" href="http://www.zend.com/community/pdt?ecl=EclipseZend">PDT and Zend Debugger</a>のリンクを選び，zend.comのサイトに行く．ここでAll-in-One Eclipse PDT + Zend Debugger Packageがまとめて入ったアーカイブをダウンロードできる．</li>
<li>アーカイブの展開<br />
ダウンロードしたアーカイブを適当なディレクトリに展開する．ここではd:\opt\に展開したものとする．</li>
</ol>
<h3 id="toc-eclipse-pdt1">Eclipse PDTの実行とデバッグ</h3>
<ol>
<li>Eclipse PDTの実行<br />
d:\opt\eclipse\eclipse.exeを実行する．</li>
<li>ワークスペースの指定<br />
WorkspaceにApacheのDocumentRootで指定されているディレクトリを指定する．httpd.confを書き変えていなければd:\opt\xampplite\htdocsがDocumentRootになっている．</li>
<li>PHPプロジェクトの作成<br />
[File]&gt;[New]&gt;[PHP Project...]でPHPプロジェクトを新規作成する．ここではtestというプロジェクトを作成したものとする．</li>
<li>PHPファイルの作成<br />
[PHP Explorer]でtestプロジェクトを右クリックし，[New]&gt;[PHP File...]を選択する．ここではindex.phpというファイルを作成したものとする．内容はとりあえず以下のようにしておく．</p>
<div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:e63bfb12-7e70-49fb-a36d-0d69f9bbd633" class="wlWriterSmartContent" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre class="php:nogutter:nocontrols">&lt;?php
    print "hoge";
?&gt;</pre>
</div>
</li>
<li>デバッグ実行<br />
まず，エディタでindex.phpのprint &#8220;hoge&#8221;;の行にブレークポイントを設定する．次に[PHP Explorer]でindex.phpを右クリックし，[Debug As]&gt;[PHP Web Page]を選択する．ブラウザが起動して，Eclipseは[PHP Debug]パースペクティブに切り替わり，print &#8220;hoge&#8221;;の行でブレークした状態になる．</p>
<p>[PHP Debug]パースペクティブでステップ実行したり変数の値を見たりできる．index.phpの実行をすべて終えるとブラウザにindex.phpの内容が表示される．</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.mkamo.org/blog/20090403/123.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TCPDF</title>
		<link>http://www.mkamo.org/blog/20081227/93.html</link>
		<comments>http://www.mkamo.org/blog/20081227/93.html#comments</comments>
		<pubDate>Sat, 27 Dec 2008 06:00:00 +0000</pubDate>
		<dc:creator>mkamo</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.mkamo.org/blog/20081227/93.html</guid>
		<description><![CDATA[
配布サイト

PHPでPDF出力するためのライブラリ．ライセンスはLGPL 2.1．
]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf">配布サイト</a></li>
</ul>
<p>PHPでPDF出力するためのライブラリ．ライセンスはLGPL 2.1．</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mkamo.org/blog/20081227/93.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>model新規作成時のunique keyの重複チェック</title>
		<link>http://www.mkamo.org/blog/20080501/53.html</link>
		<comments>http://www.mkamo.org/blog/20080501/53.html#comments</comments>
		<pubDate>Thu, 01 May 2008 08:00:01 +0000</pubDate>
		<dc:creator>mkamo</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.mkamo.org/blog/20080501/53.html</guid>
		<description><![CDATA[CakePHPでmodelの新規作成時にunique keyの重複チェックをするにはmodelクラスのvalidates()メソッドをオーバーライドして以下のような処理をすればよい．
 
!array_key_exist [...]]]></description>
			<content:encoded><![CDATA[<p>CakePHPでmodelの新規作成時にunique keyの重複チェックをするにはmodelクラスのvalidates()メソッドをオーバーライドして以下のような処理をすればよい．</p>
<p> <span id="more-53"></span>
<p>!array_key_exists()がないと，modelの新規作成だけでなくmodelの更新時にも重複チェックすることになってしまい，更新が不可能になってしまうので注意．
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:c77e058e-c7c2-4f1c-adec-b11cb1df953c" class="wlWriterEditableSmartContent">
<pre name="code" class="php:nogutter:nocontrols">function validates($data = array()) {
    if (empty($data)) {
        $data = $this-&gt;data;
    }

    // 元々のvalidates()を呼ぶ
    parent::validates($data);

    // 新規作成時，すなわちprimary keyである'id'が$dataに格納されていないときは
    // unique keyの重複チェック
    if (!array_key_exists('id', $data['User']) &amp;&amp;
        $this-&gt;findByAccount($data['User']['account'])
    ) {
        $this-&gt;invalidate('account_duplicated');
    }

    // エラーがなければtrue
    return count($this-&gt;validationErrors) == 0;
}</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.mkamo.org/blog/20080501/53.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHPの日本語関係の設定</title>
		<link>http://www.mkamo.org/blog/20080429/38.html</link>
		<comments>http://www.mkamo.org/blog/20080429/38.html#comments</comments>
		<pubDate>Tue, 29 Apr 2008 05:12:47 +0000</pubDate>
		<dc:creator>mkamo</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.mkamo.org/blog/20080429/38.html</guid>
		<description><![CDATA[CakePHP 1.1で日本語を使うときに気をつける点は以下のとおり．ここでは文字エンコーディングにUTF-8，データベースはMySQLを使うこととする．なお，6や7の設定がしてあれば3や4の設定は無意味である，というよ [...]]]></description>
			<content:encoded><![CDATA[<p>CakePHP 1.1で日本語を使うときに気をつける点は以下のとおり．ここでは文字エンコーディングにUTF-8，データベースはMySQLを使うこととする．なお，6や7の設定がしてあれば3や4の設定は無意味である，というように以下のすべての設定が必要というわけではない．</p>
<p> <span id="more-38"></span>
</p>
<ol>
<li>作成するファイルの文字エンコーディングをそろえる     <br />日本語を含むファイルの文字エンコーディングはすべてUTF-8に統一する．例えば編集にEclipseを使っているなら，メインメニューの[Window]&gt;[Preferences]を選択し，[General]&gt;[Workspace]ページの[Text file encoding]で&quot;UTF-8&quot;を選択しておく． </li>
<li>出力されるHTMLファイルで文字コード宣言をする     <br />出力されるHTMLファイルの&lt;head&gt;内で文字コード宣言がされるように，app/views/layouts/配下のthtmlファイルの&lt;head&gt;要素を以下のようにする．</li>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:8f47e357-8d40-4614-accc-30c51d5f7ac3" class="wlWriterEditableSmartContent">
<pre name="code" class="xml:nogutter:nocontrols">&lt;head&gt;
&lt;?php echo $html-&gt;charset('UTF-8')?&gt;
&lt;!-- その他のコード --&gt;
&lt;/head&gt;</pre>
</div>
<p>これにより，出力されるHTMLファイルに以下の文字コード宣言が出力される．出力されるHTMLファイル中のすべての日本語が文字コードの宣言より後に来るように注意する．HTMLコメントも含めて，文字コード宣言より前に日本語を使うと文字化けの原因となる．</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:62fa42d6-c488-4068-a4b6-51e605e0923d" class="wlWriterEditableSmartContent">
<pre name="code" class="xml:nogutter:nocontrols">&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
&lt;!-- その他のコード --&gt;
&lt;/head&gt;</pre>
</div>
<p></p>
<li>database.phpでデータベースのクライアント・エンコーディングを指定する<br />
    <br />以下のようにencodingオプションに&#8217;utf8&#8242;を指定する．&#8217;utf-8&#8242;ではなく&#8217;utf8&#8242;とハイフンが要らない点に注意． </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:9b1eb385-ae9b-4fc6-b674-8170cc25a8bd" class="wlWriterEditableSmartContent">
<pre name="code" class="php:nogutter:nocontrols">var $default = array('driver' =&gt; 'mysql',
                            'connect' =&gt; 'mysql_connect',
                            'host' =&gt; 'localhost',
                            'login' =&gt; 'root',
                            'password' =&gt; '',
                            'encoding' =&gt; 'utf8',
                            'database' =&gt; 'my_db',
                            'prefix' =&gt; '');</pre>
</div>
</li>
<li>CakePHPのmysql用文字エンコーディング設定メソッドを修正する<br />
    <br />PHP5.2.3以上を利用できるのであれば，cake/libs/model/dbo_mysql.phpのsetEncoding()メソッド を以下のように修正する．&quot;SET NAMES&quot;SQL文はSQLコンソールから呼び出すためのSQL文であり，アプリケーションから呼ぶとSQLインジェクションに対して脆弱になってしまうため．文字エンコーディングの指定にはPHP5.2.3で導入されたmysql_set_charset()を使う．</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f8ba0376-5a40-42ce-a880-095f4a1d37fb" class="wlWriterEditableSmartContent">
<pre name="code" class="php:nogutter:nocontrols">function setEncoding($enc) {
    return mysql_set_charset($enc);
    // return $this-&gt;_execute(’SET NAMES ‘ . $enc) != false;
}</pre>
</div>
</li>
<li>PHPの文字エンコーディングの設定をする<br />
    <br />php.iniで文字エンコーディングにUTF-8を使うように設定する． </p>
<pre>[PHP]
default_charset = &quot;UTF-8&quot;

[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.encoding_translation = On
mbstring.substitute_character = none</pre>
</li>
<li>
<p>php.iniを編集する権限がない場合，.htaccessまたは各PHPスクリプトで文字エンコーディングの設定をする．詳細は<a title="日本語文字セットの設定" href="http://webtech.akijapan.com/php/reference/mbstring.html">日本語文字セットの設定</a>を参照．</p>
</li>
<li>MySQLの文字エンコーディングの設定をする<br />
    <br />my.cnfを以下のように設定する．default-character-setはMySQLサーバが使用するデフォルトの文字エンコーディングを，skip-character-set-client-handshakeはクライアントからの文字エンコーディング情報を無視してサーバのデフォルトの文字エンコーディングを使うように指示する． </p>
<pre>[mysqld]
default-character-set=utf8
skip-character-set-client-handshake</pre>
</li>
<li>使用するテーブルの文字エンコーディングをそろえる<br />
    <br />使用するテーブルの文字エンコーディングをUTF-8に設定する．</p>
<p><a href="http://www.mkamo.org/blog/wp-content/uploads/2008/05/image.png"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://www.mkamo.org/blog/wp-content/uploads/2008/05/image-thumb.png" width="260" height="174" /></a> </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.mkamo.org/blog/20080429/38.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHPの参考情報</title>
		<link>http://www.mkamo.org/blog/20080428/37.html</link>
		<comments>http://www.mkamo.org/blog/20080428/37.html#comments</comments>
		<pubDate>Mon, 28 Apr 2008 09:15:53 +0000</pubDate>
		<dc:creator>mkamo</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.mkamo.org/blog/20080428/37.html</guid>
		<description><![CDATA[PHP用のWebアプリケーションRapid開発フレームワークCakePHPの参考情報．

CakePHP プログラマーズ リファレンスガイドリファレンスガイドの日本語版．
API for CakePHP英語版APIリファ [...]]]></description>
			<content:encoded><![CDATA[<p>PHP用のWebアプリケーションRapid開発フレームワークCakePHPの参考情報．</p>
<ul>
<li><a title="http://cakephp.jp/doc/" href="http://cakephp.jp/doc/">CakePHP プログラマーズ リファレンスガイド</a><br />リファレンスガイドの日本語版．
<li><a title="http://api.cakephp.org/" href="http://api.cakephp.org/">API for CakePHP</a><br />英語版APIリファレンス．
<li><a title="CakePHP cheatsheet" href="http://cakephp.org/files/cakesheet.pdf">CakePHP cheatsheet</a><br />名前規約や各種プロパティ，メソッドなどの一覧を1ページのPDFにまとめたもの．
<li><a href="http://cakephp.jp">CakePHP Users in Japan</a><br />日本ユーザーサイト． </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mkamo.org/blog/20080428/37.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
