<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>PHPマイスター</title>
<link>http://php.webmeister-jp.com/</link>
<description>PHPを使いこなして快適サイト運営！</description>
<language>ja</language>
<copyright>Copyright 2008</copyright>
<lastBuildDate>Sat, 19 May 2007 02:47:23 +0900</lastBuildDate>
<generator>http://www.movabletype.org/?v=3.121-ja</generator>
<docs>http://blogs.law.harvard.edu/tech/rss</docs> 

<item>
<title>定義(予約)されているか調べる</title>
<description><![CDATA[<p>定数、変数、関数において、存在する(定義されている)か調べる事はよくある。</p>

<p>■定数<br />
bool defined ( string $name )</p>

<p>■変数<br />
・bool isset ( mixed $var [, mixed $var [, $...]] )<br />
存在しない、NULLの場合はfalse。空文字($v = '')や 0 はtrue。</p>

<p>・bool empty ( mixed $var )<br />
存在しない、NULL、空文字、0の場合はfalse。</p>

<p>上記２つの動作の違いに注意。分かりにくい場合は他の判定ルーチンを併用すると良い。</p>

<p>■関数<br />
bool function_exists ( string $function_name )<br />
これは、使えるかどうかではなく、存在するかを判定するもの。<br />
設定で使えなくなっている関数も、trueなので注意。</p>]]></description>
<link>http://php.webmeister-jp.com/archives/2007/05/post_9.php</link>
<guid>http://php.webmeister-jp.com/archives/2007/05/post_9.php</guid>
<category>２．逆引きよく使われる命令</category>
<pubDate>Sat, 19 May 2007 02:47:23 +0900</pubDate>
</item>
<item>
<title>型の自動変換</title>
<description><![CDATA[<p>phpでは、臨機応変に自動キャストされた値が関数等へ渡されます。<br />
しかし、これが行われない場合もあるので注意しよう。<br />
ちなみに、自動キャスは渡した命令内でのみ有効であり、元の変数を変える物ではありません。</p>

<p>■便利な自動キャスト</p>

<pre>
$n = 1;
print $n;
</pre>

<p>$nはint型で、値は1となります。<br />
printが実行されるとき、$nは自動で文字列型に変換されて処理されます。</p>

<pre>
$n = "1";
#m = $n + 2;
</pre>

<p>$nは、文字列型で、値は"1"となります。<br />
次の行では、数値演算が行われるので、$nはこのとき自動的に数値型へ変換されます。</p>

<pre>
$n = "1dayo";
if ($n == 1) ...........;
</pre>

<p>$nは、文字列型で、値は"1"となります。<br />
if文では、$nを自動的に数値として処理するため、$nの値は1となります。<br />
数値以外の文字は、nullとなります。</p>

<pre>
$n = "koreha1dayo";
if ($n == 1) ...........;
</pre>

<p>上の場合、$nを数字型へ自動変換されたif文での値は 0 です。<br />
値が文字列から始まっており、その文字がnullへ変換されたため、途中の1はきえてしまいます。<br />
したがって、このif文は false です。</p>

<p>このようにして、単純な場合は自動的に型の変換が行われます。<br />
しかし、複雑な文字列処理を行った後、文字列型の変数を自動で数値型に変換してくれない場面もある。<br />
それは、値の中に空文字が含まれている場合です。上のif文の処理と同じになります。<br />
str_replaceなどで、文字列の一部を空文字へ変換した場合は注意しよう。<br />
この場合、自動変換はうまく行われません。なので、明示的に変換する必要があります。<br />
変換は、たとえば　settype($n, "integer"); を使えばいいでしょう。<br />
この変換では、数字以外の文字は完全に消去されます。</p>

<p>■print文と配列<br />
配列は、たとえば、$hoge['abc'] = "値"; のように定義すとする。<br />
通常、配列のキーは''や""で囲むことになっている。<br />
しかし、phpでは型の自動変換機能により、囲まなくても大抵は動作する。<br />
[]の中身が、変数でも関数でも定数でも無い場合、ただの文字列として処理される。<br />
あくまで大抵であり、文字列によっては誤動作することを覚えておこう。</p>

<p>この配列を、print文などで出力すとき、初心者は一つ注意することがある。<br />
print "$hoge['abc']";<br />
とした場合、これは print $hoge[''abc'']と展開され、文法エラーとなる。<br />
正しくは<br />
print "$hoge[abc]";<br />
となる。<br />
""や''は、その中身が文字列だということを知らせる物である。<br />
なので、文字列という指定を重複させてはならない。</p>

<p>常に型を意識してプログラミングを行おう。</p>]]></description>
<link>http://php.webmeister-jp.com/archives/2005/08/post_1.php</link>
<guid>http://php.webmeister-jp.com/archives/2005/08/post_1.php</guid>
<category>１．PHPの基礎</category>
<pubDate>Wed, 17 Aug 2005 11:39:12 +0900</pubDate>
</item>
<item>
<title>空文字とヌル(NULL)の代入</title>
<description><![CDATA[<p>空文字の代入とは</p>

<pre>
$n = "";
</pre>

<p>のように、空の文字(\0)を代入することで、NULL文字ともよびます。<br />
NULLの代入は、</p>

<pre>
$n = null;
</pre>

<p>のように、直接NULLを代入することです。</p>

<p>以上の２つは、一件同じようですが、少し違います。<br />
前者の$nは、文字を代入したことになるので、文字列型の変数となります。<br />
後者は、型無しのNULLを代入したことになるので、その変数は存在しなくなります。</p>

<p>両者の動作は、場合によっては違ってくるので注意が必要です。</p>

<p>例</p>

<pre>
$n = "";
if ($n == null) echo "\$nはnullです。"
if (!isset($n)) echo "\$nはnullではありません。"
</pre>

<p>上のif文は、両方ともtureとなります。<br />
isset関数は、変数が存在するかどうかを調べる関数です。<br />
一見矛盾しているようですが、これは、if文がnullを自動的にnull文字へ変換してるからです。</p>

<p>したがって、変数が存在するか確認をするときに isset() を使う場合は、空文字の可能性を考慮しなければなりません。<br />
空文字が入る可能性があるとき、isset()を実行する前に、空文字の変数にnullを代入するよう処理が必要となります。<br />
これらの手間を省くには、empty() が適切です。<br />
empty()は、変数が「空文字」「0」「NULL」「空配列」「false」と、いった値全てに対してtureを返します。</p>

<p>では、変数にNULLを代入した場合はどうでしょう。</p>

<pre>
$n = null;
if ($n == "") echo "\$nは空文字です。"
if ($n == null) echo "\$nはnullです。"
if (!isset(\n)) echo "\$nは存在しません。";
</pre>

<p>上の式は、実行できません。最初のif文でエラーとなります。<br />
これは、存在しない\nを扱おうとしているためです。<br />
同様にして、２番目も実行できません。<br />
唯一３番目は実行でき、!isset()はtrueとなります。変数 \n は存在しないという意味です。</p>

<p>複雑な文字処理を行う場合、これらの扱いを間違い、バグを生みやすいので注意しよう。</p>]]></description>
<link>http://php.webmeister-jp.com/archives/2005/08/null.php</link>
<guid>http://php.webmeister-jp.com/archives/2005/08/null.php</guid>
<category>１．PHPの基礎</category>
<pubDate>Wed, 17 Aug 2005 10:59:12 +0900</pubDate>
</item>
<item>
<title>時間の取得</title>
<description><![CDATA[<p><a href="http://php.webmeister-jp.com/manual/ref.datetime.html">時間の取得方法</a>は色々あります。目的に応じて使い分けてみよう。</p>

<p>■年月日時を取得</p>

<p><a href="http://php.webmeister-jp.com/manual/function.date.html">date関数</a>を使ってみる。</p>

<p>例１</p>

<pre>
print date("Y-m-d H:i:s");
</pre>

<p>結果例１</p>

<pre>
2005-08-15 20:30:25
</pre>

<p>例２</p>

<pre>
print date("Y年m月d日 H時i分s秒");
</pre>

<p>結果例２</p>

<pre>
2005年08月15日 20時30分25秒
</pre>

<p>このように、フォーマットを自由にできる。<br />
曜日も出力できるが、英語となる。</p>

<p>日本語の曜日を出力したい場合は、<a href="http://php.webmeister-jp.com/manual/function.strftime.html">strftime</a>関数を使う。</p>

<p>例</p>

<pre>
setlocale (LC_TIME, "ja_JP");
print strftime ("%Y年%m月%d日(%a)  %H時%M分%S秒");
</pre>

<p>結果例</p>

<pre>
2005年08月15日(月) 20時30分25秒
</pre>

<p>上記のsetlocaleが使えないサーバーの場合、曜日変換ルーチンを組む。</p>

<pre>
$youbi = array('日','月','火','水','木','金','土');
$time = time();
print date("Y年m月d日(".$youbi[gmdate("w",$time)].") H時i分s秒", $time);
</pre>

<p>結果例</p>

<pre>
2005年08月15日(月) 20時30分25秒
</pre>

<p><a href="http://php.webmeister-jp.com/manual/function.time.html">time関数</a>は、UNIX時（1970年1月1日）からの秒数を得ます。</p>

<p>■海外サーバーの場合<br />
<a href="http://php.webmeister-jp.com/manual/function.gmdate.html">gmdate関数</a>を使い、グリニッジ標準時を得ます。<br />
使い方はdate関数を同じです。</p>

<p>例</p>

<pre>
print gmdate("M d Y H:i:s", time()+9*60*60); 
</pre>

<p>日本は、GMT+9なので、9時間を足すと日本時間となります。</p>

<p>■応用：ファイルの日付と現在の日付の差を取得する</p>

<pre>
$Diff = (time() - filemtime($filename))/60/60;
</pre>

<p>$Diffには、ファイルが作られてから何時間経過したかが入ります。<br />
日数の差を求める場合 /24 を追加。</p>

<pre>
$Diff = (time() - filemtime($filename))/60/60/24;
</pre>
]]></description>
<link>http://php.webmeister-jp.com/archives/2005/08/post_12.php</link>
<guid>http://php.webmeister-jp.com/archives/2005/08/post_12.php</guid>
<category>１．PHPの基礎</category>
<pubDate>Mon, 15 Aug 2005 20:20:10 +0900</pubDate>
</item>
<item>
<title>ファイルのアップロード</title>
<description><![CDATA[<p>フォームを使ったファイルのアップロードの仕方。</p>

<p>アップロードするファイルを指定するフォームを用意。</p>

<pre>
&lt;form enctype="multipart/form-data" action="_URL_" method="POST"&gt;
ファイル : &lt;input name="upfile" type="file"&gt;
&lt;input type="submit" value="送る"&gt;
&lt;/form&gt;
</pre>

<p>次ぎに、ファイルを受信するPHPファイル(_URL_)を用意。</p>

<pre>
&lt;?php
$fileName = $_FILES['userfile']['tmp_name'];  // サーバー上に一時的に保存されているファイル名
ファイルの処理を書く。
?&gt;
</pre>

<p>ファイルについて取得できる内容は他に</p>

<p>$_FILES['userfile']['name'] クライアント側の元のファイル名。<br />
$_FILES['userfile']['type'] ファイルのMINE型  image/gif　や image/jpeg など。<br />
$_FILES['userfile']['size'] ファイルのサイズ。バイト単位。<br />
$_FILES['userfile']['error'] エラー内容。</p>

<p>これでアップされたファイルはキャッシュファイルになるので、処理が終わると同時に消されます。<br />
ファイルをサーバー上にそのまま保存しておく場合。</p>

<p>bool move_uploaded_file ( string filename, string destination)</p>

<p>を使います。</p>

<p>filenameには　$_FILES['userfile']['tmp_name']　を指定し、<br />
destinationには、移動先のファイル名を書きます。</p>]]></description>
<link>http://php.webmeister-jp.com/archives/2005/06/post_11.php</link>
<guid>http://php.webmeister-jp.com/archives/2005/06/post_11.php</guid>
<category>３．便利な使い方</category>
<pubDate>Sat, 18 Jun 2005 02:09:51 +0900</pubDate>
</item>
<item>
<title>変数からタグを削除</title>
<description><![CDATA[<p>たとえば、不特定多数の人が書き込む掲示板などで、タグの使用を禁止したい時がある。<br />
これを簡単に行えるのが<br />
string strip_tags ( string str [, string allowable_tags])<br />
第二引数には、許可するタグを指定できる。</p>

<p>たとえば、 b と i 以外の全てのタグを削除したい場合。</p>

<pre>
$data = strip_tags($data,'&lt;b&gt;&lt;i&gt;');
</pre>

<p>としたいが、実はこれだけだととても危険である。<br />
タグ属性までは審査しないので、悪意のある人がタグにスクリプトを埋め込み、攻撃を可能とする。<br />
なので、この関数で許可するタグがある場合、正規表現を使った置換等で危険な属性を排除しなければならない。</p>

<p>意外とこの関数の世話になることが多いはず。<br />
ユーザーが入力した文字をページに出力する場合、必ず、タグを使われた場合のことを考えよう。</p>]]></description>
<link>http://php.webmeister-jp.com/archives/2005/02/post_13.php</link>
<guid>http://php.webmeister-jp.com/archives/2005/02/post_13.php</guid>
<category>２．逆引きよく使われる命令</category>
<pubDate>Sun, 27 Feb 2005 23:06:11 +0900</pubDate>
</item>
<item>
<title>エラーメッセージ制御</title>
<description><![CDATA[<p>PHPは便利なもので、エラーの個所が表示される。<br />
しかし、場合によってはエラーの出る場合のある処理を意図的にし、エラー出力の文字を変えたい時もある。<br />
そのやり方を簡単に説明する。</p>

<p>関数の一文字目に @ を追加することで、エラー出力を消す事ができる。<br />
すなわち、エラーが出ても画面にはその事がでてこない。<br />
次に、関数の最後に or die("出力する文字列");　をつける。</p>

<p>例</p>

<pre>
$page = @file_get_contents($url) or die ("このサイトにはアクセスできません");
</pre>]]></description>
<link>http://php.webmeister-jp.com/archives/2005/02/post_8.php</link>
<guid>http://php.webmeister-jp.com/archives/2005/02/post_8.php</guid>
<category>２．逆引きよく使われる命令</category>
<pubDate>Fri, 18 Feb 2005 23:41:02 +0900</pubDate>
</item>
<item>
<title>データをPOSTで送信</title>
<description><![CDATA[<p>値を他のページに渡す場合 GET と POST の２つの通信方式がある。<br />
GETは、アドレスに追記して渡すほうほうで、たとえば abc.php?a=b などとなる。<br />
POSTは、この値を隠蔽して渡す方式で、掲示板などで良く使われている。書き込みの投稿がそれにある。<br />
POSTのもう一つのメリットとしては、文字列の長さの制限をあまり考えないでよいことだ。<br />
非常に長いデータを渡す場合、GETでは文字数オーバーとなるので、POSTで渡さなければならない。</p>

<p>他のページを読み込む場合、標準関数ではGETとなる。<br />
しかし、セキュリティーやその他の関係上でPOSTでデータを渡して読みこまなければならないこともある。<br />
その場合は、拡張ライブラリ pear に含まれる HTTP_Request 関数を使うことになる。<br />
pearについては、http://php.webmeister-jp.com/archives/2005/02/_pear.php　であつかっている。</p>

<p>HTTP_RequestでPOST送信する方法は以下となる。</p>

<pre>
$req =&new HTTP_Request("http://www.***.com/abc.php");
$req->setMethod(HTTP_REQUEST_METHOD_POST);
$req->addPostData("name1", $data1);
$req->addPostData("name2", $data2);
if (!PEAR::isError($req->sendRequest())) {
$res = $req->getResponseBody();
} else {
$res = "送信失敗";
}
</pre>

<p>上記の場合、 name1=$data1、name2=$data2 としてhttp://www.***.com/abc.php へPOST送信される。<br />
$resには結果(ページ内容)が格納される。</p>]]></description>
<link>http://php.webmeister-jp.com/archives/2005/02/post_7.php</link>
<guid>http://php.webmeister-jp.com/archives/2005/02/post_7.php</guid>
<category>３．便利な使い方</category>
<pubDate>Thu, 10 Feb 2005 00:35:55 +0900</pubDate>
</item>
<item>
<title>拡張ライブラリ PEAR</title>
<description><![CDATA[<p>PHPの標準拡張ライブラリ『PEAR』というものがある。<br />
これは、よく使われる処理をあつめたライブラリである。<br />
この拡張ライブラリを使えば、面倒な処理を簡単に行えてしまうというわけだ。<br />
しかしながら、デフォルト設定でPHPをインストールした場合、このPEARは最少インストール（もっともよく使われる物のみインストール）となり、インストールされないライブラリが多いようだ。(PHPのバージョンによって違う)</p>

<p>共有レンタルサーバーを使っていて、使いたいライブラリがインストールされていない場合、諦めるのは早い。<br />
手動でインストールをすれば、大抵は問題無く使える。<br />
この場合、サーバー設定を直接書き換えることはできないので、使うファイル毎にini設定をし、ライブラリを呼びだすことになる。</p>

<p>全ては公式サイトに書かれているので、興味のある人は覗いて見よう。<br />
http://pear.php.net/manual/ja/</p>

<p>手動インストール<br />
公式サイトの説明 ＞　http://pear.php.net/manual/ja/installation.manually.php<br />
手動インストールには一つ問題点がある。<br />
それは、一つの命令を使うためには複数のライブラリをインストールしなければならない点だ。</p>

<p>これを調べる簡単な方法は、使いたい命令のライブラリをまずインストールし、その命令を実行。<br />
そして、エラーの中にどのライブラリが足りないかでてくるので、それをインストール。<br />
これを繰り返せば良い。</p>

<p>ライブラリのダウンロードは　http://pear.php.net/packages.php　で行える。<br />
たとえば、 HTTP_Request を使いたければ、HTTPにまず入り、そこで HTTP_Request を探そう。<br />
Mail_IMAP を使いたければ Mail に入って探そう。 _ の前の文字に注目すればよい。<br />
このように各命令ごとに分かれているので簡単に探せる。</p>]]></description>
<link>http://php.webmeister-jp.com/archives/2005/02/_pear.php</link>
<guid>http://php.webmeister-jp.com/archives/2005/02/_pear.php</guid>
<category>１．PHPの基礎</category>
<pubDate>Wed, 09 Feb 2005 23:46:04 +0900</pubDate>
</item>
<item>
<title>ユーザーエージェント偽装</title>
<description><![CDATA[<p>ブラウザの種類により表示するページを分けているサイトが多々ある。<br />
たとえば、携帯とPCとで別表示するなどだ。<br />
ということで、ユーザーエージェント（ブラウザ）の認識コードをいじってアクセスする方法です。</p>

<p>仕組みとしては、PHPで目的のページを読み込み、それを表示。<br />
そのページ読み込みの際のユーザーエージェントをブラウザのコードにすればよいわけである。</p>

<pre>
ini_set('user_agent', 'DoCoMo/1.0/N503is/c10');
</pre>

<p>たとえばこのようにすると、DocomoのN503isになりすましてアクセスできる。<br />
ユーザーエージェントをセットしたら、後は普通にサイトをPHPで開けばよい。</p>

<pre>
$page = file_get_contents($url);
print $page;
</pre>

<p>変数$pageには、受信したサイトの内容が入っている。<br />
これで文字だけは表示できるようになる。<br />
画像やリンクを正常にしたい場合、それらのアドレスをフルアドレスに変換させれば良い。</p>]]></description>
<link>http://php.webmeister-jp.com/archives/2005/02/post_6.php</link>
<guid>http://php.webmeister-jp.com/archives/2005/02/post_6.php</guid>
<category>３．便利な使い方</category>
<pubDate>Wed, 09 Feb 2005 23:02:39 +0900</pubDate>
</item>
<item>
<title>携帯とPCとで表示ページを分ける</title>
<description><![CDATA[<p>もっとも簡単なのは、PCでのアクセスはそのまま表示、携帯でアクセスされたら表示を止めて別ページへジャンプ。</p>

<pre>
if( preg_match( "/DoCoMo/", $_SERVER['HTTP_USER_AGENT'] ) )
{
    header("Location: http://www.****.com/i/");
    exit();
}
</pre>

<p>これは、DoCoMoの携帯でアクセスがあったら、http://www.****.com/i/ へジャンプさせるPHPコードの例です。<br />
DoCoMoの部分をJ-PHONEにしたり、UP\.Browser にして、他携帯に対応させてください。<br />
飛ぶ先のアドレスは、相対アドレスは使わないよう注意。<br />
かならずhttp:から書くように。 /i/ や i/ にした場合、エラーが出る可能性があります。</p>

<p>一括して指定する例</p>

<pre>
$agents = array('DoCoMo','J-PHONE','KDDI','ASTEL','UP\.Browser');
foreach ($agents as $value) {
	if( preg_match( "/$value/", $_SERVER['HTTP_USER_AGENT'] ) ){
		header("Location: http://www.****.com/i/");
		exit();
	}
}
</pre>]]></description>
<link>http://php.webmeister-jp.com/archives/2005/02/pc_1.php</link>
<guid>http://php.webmeister-jp.com/archives/2005/02/pc_1.php</guid>
<category>４．携帯関連</category>
<pubDate>Tue, 08 Feb 2005 18:01:14 +0900</pubDate>
</item>
<item>
<title>携帯へメール</title>
<description><![CDATA[<p>携帯へメールする処理は、非常にやっかいだ。<br />
では、ここに文字化けせずに正常に送るための方法を書いておく。<br />
i-modeとauとでは仕様が異なるので注意。もちろんボーダフォンやその他も違ってくる。<br />
何がやっかいか。　それは絵文字の存在だ。</p>

<p>まず、メール送信関数は普通に mail 関数を使う。これがもっとも無難だ。<br />
文字コードは、JISで行うとしよう。<br />
まぁＳＪＩＳでも構わないのだが、古い慣わしに従ってみる。</p>

<p>ここで注意することは、ＪＩＳへコード変換するさい、絵文字コードが変化することだ。<br />
これを防ぐ手段として、base64　とよばれるバイナリへの変換を行う。</p>

<p>では、簡単な送信ルーチンを書いてみる。<br />
<pre><br />
	mb_internal_encoding('SJIS');</p>

<p>	$mlfr=送信元;<br />
	$mlto=送信先;<br />
	$mlsb=タイトル;<br />
	$mlms=本文;</p>

<p>	$mlfr = "From: ".$mlfr<br />
		  . "\r\nMIME-Version: 1.0\r\n"<br />
          . "Content-Type: Text/Plain; charset=ISO-2022-JP\r\n"<br />
		  . "Content-Transfer-Encoding: base64";</p>

<p>	if (もしauへ送信なら)au();<br />
	if (もしi-modeへ送信なら)imode();</p>

<p>	$rcd = mail($mlto, $mlsb, $mlms, $mlfr);<br />
	<br />
	function imode(){<br />
		global $mlsb,$mlms;<br />
		$mlsb = base64_encode($mlsb);<br />
		$mlms = base64_encode($mlms);<br />
		$mlsb = "=?ISO-2022-JP?B?" . $mlsb . "?=";		<br />
		$mlsb = mb_convert_encoding($mlsb, 'JIS');<br />
		$mlms = mb_convert_encoding($mlms, 'JIS');<br />
	}<br />
	function au(){<br />
		global $mlsb,$mlms;<br />
		$mlsb = mb_convert_encoding($mlsb, 'JIS');<br />
		$mlms = mb_convert_encoding($mlms, 'JIS');<br />
		$mlsb = base64_encode($mlsb);<br />
		$mlms = base64_encode($mlms);<br />
		$mlsb = "=?ISO-2022-JP?B?" . $mlsb . "?=";<br />
	}<br />
</pre></p>

<p>これで絵文字も正常で、よくあるタイトルの文字化けも起こさないはずである。<br />
以上は実際に私が使用しているルーチンのコピペである。<br />
私が試行錯誤して作ったルーチンなので、本当にあっているのか知らないが、問題は今のところ無い。</p>

<p>絵文字を使わないなら、こんなやっかいな処理はしなくて良い。<br />
タイトルが文字化けしないようにするだけだ。<br />
その場合、携帯ごとにルーチンを分ける必要はなく、一般的な方法でよい。</p>]]></description>
<link>http://php.webmeister-jp.com/archives/2004/12/post_5.php</link>
<guid>http://php.webmeister-jp.com/archives/2004/12/post_5.php</guid>
<category>４．携帯関連</category>
<pubDate>Thu, 16 Dec 2004 17:09:56 +0900</pubDate>
</item>
<item>
<title>携帯の絵文字変換ルーチン例</title>
<description><![CDATA[<p>i-modeとauの絵文字変換ルーチンを作りたい場合の基礎のみを書くとする。<br />
これだけわかれば、PHPがある程度わかる人なら、すぐにでも作れるはずだ。</p>

<p>$i-mode[0] = '絵文字コード';<br />
$au[0] = '絵文字コード';<br />
機種ごとのコードを、普通の配列(キーを数字)で入れていく。<br />
この場合、順番を飛ばさないようにキーを省略せずに入れたほうが良い。</p>

<p>次に、変換用の配列を作る。<br />
i-modoの絵文字をau用に変換するテーブル。<br />
$i2au[0] = 2;<br />
このような感じで、キーはi-modoのキーに対応し、値はauのキーに対応する。<br />
逆用の配列は$au2i[2] = 0; となる。</p>

<p>あとは str_replace を使って置換処理をするだけだ。<br />
たったこれだけで絵文字変換が可能となる。<br />
実際に私は友達とのメールの変換用に作って使用した。</p>

<p>絵文字コードは各公式サイトから手に入る。<br />
PHPの場合、１６進数の表記方法は３種類ある。</p>

<p>まずは文字列として扱う場合の2種類。''や""で囲む必要があるので注意すること。<br />
一つは%** もっとも簡単な方法だ。 **は１６進数が入る<br />
EB60ならば、%EB%60 と書けば良い。　<br />
二つ目は　\x**。<br />
たとえば、\xEB\x60と書けば良い。<br />
このように2バイト（2文字）づつ分けなければならないので注意。</p>

<p>文字列ではなく、数値として書く場合。<br />
0x**となる。<br />
たとえば、0xEB60 と書く。　一度にかけて便利だ。</p>

<p>どれを使うかは、臨機応変に使いやすい奴をどうぞ。</p>]]></description>
<link>http://php.webmeister-jp.com/archives/2004/12/post_4.php</link>
<guid>http://php.webmeister-jp.com/archives/2004/12/post_4.php</guid>
<category>４．携帯関連</category>
<pubDate>Thu, 16 Dec 2004 16:22:34 +0900</pubDate>
</item>
<item>
<title>便利な連想配列を使いこなそう</title>
<description><![CDATA[<p>連想配列とは、$hoge['key'] = 'value'; といったように、添え字を数字ではなく文字列にした配列だ。他言語ではハッシュとも呼ばれる。</p>

<p>これはよく使うので、使いこなせるようになっておこう。<br />
基本的な使い方は、変数をグループ分けした連想配列にまとめること。<br />
これにより、ばらばらな変数がグループごとに管理でき、非常に効率よくなる。<br />
たとえばグローバル変数にする場合、 global $hoge; だけですみ、だらだら関連変数を書く必要がなくなる。<br />
そして、添え字が文字列なので中身の意味がわかりやすい。</p>

<p>連想配列の作り方は他に、 $hoge = array(key=>value,key2=>value2);ともできる。<br />
沢山の連想配列の値を定義する場合、1key/1行で定義すると楽だ。</p>

<p>例：<br />
<pre><br />
$hoge = array(<br />
'key'=&gt;'value',<br />
'key2'=&gt;'value2'<br />
);<br />
</pre></p>

<p>そして今回の主題は、２つの連想配列を使いこなす事にある。<br />
２つの連想配列 $hoge と $hogeII があるとする。</p>

<pre>
$id = 'abc';
$value = $hogeII[$hoge[$id]];
</pre>

<p>このように、ある連想配列の値から別の連想配列の値を呼び出す方法は非常に便利で、よくつかわれる。</p>

<p>簡単な例をみてみよう<br />
<pre><br />
$hoge['人の名前'] = 'id';<br />
$deta['id'] = 'data';<br />
</pre><br />
このような感じの２つの連想配列があるとする。<br />
idは、dataの整理IDと思って欲しい。<br />
これは、『人の名前』と『data』は直接のかかわりはなく、間接的に関わっている場合である。<br />
たとえば、誰（人の名前）がどの商品（data）を使用中など。<br />
もし人の名前とdata(商品)を直接関連づけて $hoge['人の名前'] = 'data';とした場合どうだろうか。<br />
商品内容の記述が変わった場合、同じdataを持つ全ての人を再編集しなくてはならない。<br />
それ以前に、あるdataを扱う人がいなくなった場合、そのdataが消滅してしまう。<br />
これじゃまともな管理はできないね。</p>

<p>ちょっと分かりにくい例だったかもしれないが、２つの独立した連想配列をこうして組み合わせて使うことを覚えておくと良い。</p>

<p>最後にPHPでの連想配列の基本に戻る。<br />
phpでは、文字列は '' か "" でかこむ。<br />
すなわち、$hoge['abc'] といったかんじにだ。<br />
''で囲むのは、これは文字列ですという意味なだけ。<br />
では次の場合どうだろうか。<br />
print "ほにゃらにゃは $hoge['abc'] です。";<br />
''、""の意味がわかる人には、これだとエラーが出ることが一目瞭然。<br />
この場合、$hoge[''abc'']という変数を呼び出していることになる。<br />
文法的に間違いになる。　すでに""で囲まれているから、キーを''で囲まなくても文字列とみなされるのだ。</p>

<p>また、こういった連想配列の定義方法もある。<br />
$hoge[key] ='value';<br />
keyが '' で囲まれていないから文字列として扱われないとおもわれがちだ。<br />
しかしphpでは、連想配列の場合にはキーを '' でかこまなくても最終的には文字列として処理してくれる。<br />
宣言さている文字列（定数）かを調べ、宣言されていない場合はただの文字列として処理する仕組みだ。<br />
すなわち、予約語であった場合、文字列の変換が行われて正しく動作しなくなるので気をつけよう。</p>

<p>あと '' の意味を理解してない人が間違いやすい例として<br />
$hoge['$abc'] というように、キーを変数とする場合に '' で囲んでしまう。<br />
''の中では変数を扱えない。ただの文字列となってしまう。<br />
なので、全体を見るとこうなる。<br />
<pre><br />
$hoge['papa'] = 'よっぱらい';<br />
$dare = 'papa';<br />
$value = $hoge[$dare] ;<br />
</pre><br />
三行目は、$value = $hoge["$dare"] ; でも動作する。<br />
''はただの文字列で、""は変数を含められる文字列である。</p>]]></description>
<link>http://php.webmeister-jp.com/archives/2004/12/post_3.php</link>
<guid>http://php.webmeister-jp.com/archives/2004/12/post_3.php</guid>
<category>３．便利な使い方</category>
<pubDate>Wed, 15 Dec 2004 23:21:49 +0900</pubDate>
</item>
<item>
<title>MySQLにログイン</title>
<description><![CDATA[<p>やり方はいたってシンプル。</p>

<pre>
$SQLdb['User'] = "ユーザー名";
$SQLdb['Pass'] = "パスワード";
$SQLdb['Host'] = "localhost"; //通常はこの値
$SQLdb['Name'] = "データーベース名"; //テーブル名じゃないよ

<p>$connection = mysql_connect($SQLdb['Host'], $SQLdb['User'], $SQLdb['Pass']) or die ("MySQL接続に失敗 ");<br />
mysql_select_db($SQLdb['Name']) or die ("データベース接続に失敗");<br />
</pre></p>

<p>これで接続完了。<br />
あとはＳＱＬ構文を実行するだけだ。</p>

<p>ちなみにログオフはしなくても大丈夫。<br />
ＰＨＰの処理が全て終わった時点で、自動的にログオフとなる。</p>]]></description>
<link>http://php.webmeister-jp.com/archives/2004/12/mysql.php</link>
<guid>http://php.webmeister-jp.com/archives/2004/12/mysql.php</guid>
<category>MySQL</category>
<pubDate>Wed, 15 Dec 2004 05:21:05 +0900</pubDate>
</item>


</channel>
</rss>