WebApp/PHP

基本

構文

<?PHP            ← 開始タグ
   PHPの各種スクリプト ;   ← スクリプトの最後は ; で閉める
?>              ← 終了タグ(省略可能)

コメント

# 〜
// 〜
/* 〜 */

文字列

記号説明
''変数をそのまま出力する。特に理由がない限り''を使った方が速度的に有利
変数の値を展開して出力する。改行を含めた複数行で囲むことも可能
``OSコマンドの実行
{$変数}変数を前後の文字列と区別させる
.文字列を結合する
+数値演算だが'3.6'のように文字列として扱っても数値と解釈される
.=$var1 .= $var2 は、$var1 = $var1 . $var2 と同じになる
\n改行
\tタブ
\0〜\778進数のASCIIコード
\0x0〜\xFF16進数のASCIIコード
マジック定数説明
__LINE__PHPスクリプトの現在行番号
__FILE__PHPファイル名(フルパス)
__FUNCTION__関数名
__METHOD__クラスのメソッド名

ヒアドキュメント

echo <<< 終端ワード
〜〜 $VAR など変数は展開される
終端ワード;
echo <<< '終端ワード'
〜〜 $VAR など変数は展開されず、そのまま$VARと出力される
終端ワード;
$body <<< 終端ワード
〜〜
終端ワード;


  • booleanがfalseと判定するパターン
    ・boolean の FALSE
    ・integer の 0 (ゼロ)
    ・float の 0.0 (ゼロ)
    ・空の文字列、 および文字列の "0"
    ・要素の数がゼロである 配列
    ・メンバ変数の数がゼロである オブジェクト (PHP 4のみ)
    ・特別な値 NULL (値がセットされていない変数を含む)
    ・空のタグから作成された SimpleXML オブジェクト
  • intがオーバーフローすると、自動的にfloat型に変換される
  • 数値を含む文字列の計算
    $yen = 5 + '3yen';
    ⇒ 8になる。文字列の前に数値があった場合、数値だけ取り出して解釈される
  • floatの小数点以下は0.1の場合、0.1020134…のようになっているため、
    (int)((0.1 + 0.7)*10) は7になる。内部的には7.9999934...となっているため
     

配列

key=>value という形式で格納される変数

$s[添字] = "値";      // キーが数値の場合は''で括る必要はない
$s['key'] = "値";     // キーが連想配列(添字以外)の場合は''で括る必要がある
                      // 定数または、変数をキーにする場合はこの限りではない
$s = array(
  "key"  => "value",
  "key"  => "value"
  ‥‥繰り返し
);

Keyを省略した場合は、その配列内で一番大きい数値のkeyに +1 した値で格納される

$s[] = "値";
$s = array("A","B","C" ‥‥);

配列の解釈

$arr = array('fruit' => 'fruit' ,'veggie' => 'veggie');
define('fruit', 'veggie');

print $arr[fruit];     // veggie  ''で囲まない場合は定数として認識する。定数がない場合''を付け忘れたと解釈され fruit となる
print $arr['fruit'];    // fruit
print "$arr[fruit]";    // fruit   文字列の中では連想配列として解釈される
print "$arr['fruit']";  // エラー  文字列の中では''で括るとエラーになる
print "{$arr[fruit]}";  // veggie  {}で括ると定数として扱える

多次元配列

$s = array(
   array("key"  => "value", "key"  => "value"), // $s[0][key] で値を取り出す
   array("key"  => "value", "key"  => "value"), // $s[1][key] で値を取り出す
   ‥‥繰り返し
);

二次元配列

$s = array(
   array("key" => array("value1","value2"))
);
echo $s[0]['key'][0]; // value1
echo $s[0]['key'][1]; // value2

配列の並び替えに関する関数

 配列の順番は追加した順番でありソートはされない為、以下の関数を使ってソートすることが可能。戻り値は全てbool

関数名対象説明
sort(配列)配列の値を昇順(小さい順)にソート(連想配列の場合は添字に置き換える)
rsort(配列)配列の値を降順(大きい順)にソート(連想配列の場合は添字に置き換える)
ksort(配列)キー連想配列のキーを昇順(小さい順)にソート
krsort(配列)キー連想配列のキーを降順(大きい順)にソート
asort(配列)連想配列の値を昇順(小さい順)にソート(キーと値の関係を保持する)
arsort(配列)連想配列の値を降順(大きい順)にソート(キーと値の関係を保持する)


bool print_r( 配列 )

 配列の中身をKeyとValueの形式で表示する
 <pre>タグで括られると、見やすくなる。表示が横一列ではなく要素毎に改行して表示されるので便利

int count( 配列 )

 配列の要素数を数える。エイリアスとして sizeof()

mixed current( 配列 )

 現在参照している配列を返す。エイリアスとして pos()
 参照関数にてポインタの移動が可能

参照関数説明
end()配列ポインタを最後の要素にセットする
reset()配列ポインタを先頭の要素にセットする
next()配列ポインタを次の要素にセットする
prev()配列ポインタを前の要素にセットする
key()現在の配列ポインタ上のキーを取得する


mixed array_search( ,配列)

 配列の中から要素の値を検索し、そのキーを返す。存在しなければfalseを返す

bool array_key_exists( 配列 ,key)

 配列の中にkeyがあるかどうか調べる

bool in_array( ,配列 )

 配列の中に値があるかどうか調べる

array array_reverse( 配列 [,bool preserve_keys])

 配列の要素を逆順にソートする。preserve_keysにtrueを指定すると、Keyの順序も逆順になる

array array_slice( 配列 ,取出し位置 [,長さ] [,bool preserve_keys] )

 取り出し位置(先頭は0)に指定した要素の位置から、指定した長さ(省略時は最後まで)の要素を返す
 取り出された要素のインデックスはリセットされるがpreserve_keysをtrueにした場合は保持される
 連想配列の場合は、Keyの値をそのまま保持する

array array_splice( 配列 ,削除位置 [,長さ [,置換える配列]] )

削除位置指定した位置(先頭は0)以降の要素を削除する。負の場合は後ろから数える
長さ削除位置から削除する個数を指定。負を指定した場合、負数分削除されない
置き換える配列削除された配列を置換された要素に置き換える
$input = array("red", "green", "blue", "yellow");
array_splice($input, -1);                         // array("red", "green", "blue")
array_splice($input, 1, -1);                      // array("red", "yellow")
array_splice($input, 1, count($input), "orange"); // array("red", "orange")

void unset( 配列[key] )

 配列[key]の要素を削除する
 あるグローバル変数が関数の中で unset() された場合、ローカル変数のみが破棄される  呼出側の環境にある変数は、unset() がコールされる前と同じ値を保持する

function destroy_foo() 
{
    global $foo;
    unset($foo);
}
$foo = 'bar';
destroy_foo();
echo $foo;      // bar

 インデックスの再構築も行われない

$array = array(1, 2, 3, 4, 5);
foreach ($array as $i => $value) {
    unset($array[$i]);          // $array[0]〜[4]を削除
}
$array[] = 6;                   // アイテムを追加、新しい添え字は 0 ではなく 5 になる
$array = array_values($array);  // 添え字を振り直す
$array[] = 7;
print_r($array);
Array
(
    [0] => 6
    [1] => 7
)


array array_merge( 配列 ,配列 [,配列...] )

 複数の配列を結合する。連想配列で同じKEYを持っていた場合、新しい配列の値で上書きされる
 Keyが添字の場合はリセット(0から開始)される。添字の値も保持したい場合は、配列 + 配列 で結合する
 + で結合する場合、同じKEYを持つ値は上書きされず元の値を保持する

$ary1 = array('1'=>'VALUE1' ,'KEY'=>'VALUE2');
$ary2 = array('1'=>'VALUE3' ,'KEY'=>'VALUE4');
$ary  = array_merge($ary1,$ary2);
print_r($ary);

Array
(
    [0] => VALUE1
    [KEY] => VALUE4
    [1] => VALUE3
)

array array_diff( 配列 ,配列 [,配列...] )

 最初に指定した配列から他の引数のいずれにも存在しないの値の全てを有する配列を返す。キーと値の関係は維持される

array explode( '区切り文字' ,文字列 [,配列数] )

 区切り文字で文字列を分割し、配列として返す
 配列数を指定した場合、区切り文字で分割可能であっても残りは1つの要素として返される
 配列数をマイナス指定した場合、配列数の要素を除く全ての構成要素が返される
 正規表現で文字列を分割したい場合は"preg_split"関数を使う

$str = 'one|two|three|four';
print_r(explode('|', $str, 2));  // Array( [0] => one, [1] => two|three|four )
print_r(explode('|', $str, -1)); //Array( [0] => one, [1] => two, [2] => three )

string implode( '区切り文字' ,配列 )

 配列の要素を区切り文字で結合する。区切り文字を空白にすればそのまま配列を結合する

$ary = ('1','2','3');
echo implode( "" ,$ary );  /* 123 */

array list( 変数 [,変数...] ) = 配列

 配列の要素をlist内で指定した変数に順番に格納する。連想配列は無視される

$info = array('1', '2', '3');
list($s1, $s2, $s3) = $info;
echo $s1 . $s2 . $s3;

array each( 配列 )

 配列から現在のキーと値のペアを返し配列の次の要素へ移動する。要素がない場合はfalseを返す
 返される要素は、0、1、key、valueという要素を持っている
 0とkeyは 各々は配列要素のキー名称を保持しており、1 と value の各々はそのデータを保持している

$foo = array("bob", "fred", "jussi", "jouni", "egon", "marliese");
$bar = each($foo);
print_r($bar);

Array
(
    [1] => bob
    [value] => bob
    [0] => 0
    [key] => 0
)
// $foo配列に格納されているキーと値を順番に表示する
$foo = array("bob", "fred", "jussi", "jouni", "egon", "marliese");
while(list($key,$val) = each($foo)) {
    print $key . ':' . $val . "\n";
}


文字列関数

void printf( '書式' [,引数...] )

書式説明
%s文字列
%d整数。%5d⇒5バイトで"右"寄せ。%05d⇒5byte分のゼロパディング
%f実数。%.4f⇒小数点以下4桁に抑える
%b2進数に変換
%o10進数に変換
%x16進数に変換

string sprintf( '書式' [,引数...] )

 printfと全く同じ動作だが文字列を返す

string trim( 文字列 )

 文字列の前後の空白を削除する。ltrim や rtrim もある

string strtoupper( 文字列 )

 文字列を大文字にする

string strtolower( 文字列 )

 文字列を小文字にする

string ucwords( 文字列 )

 文字列の単語の最初の文字を大文字にする
 this is pen ⇒ This Is Pen になる

string stripslashes( 文字列 )

 バックスラッシュ(\)を除いた文字列にする

string addslashes( 文字列 )

 ' " \ NULLバイトの文字列の前に、バッククォート(\)を付与する

bool isset( 変数 )

 変数に値があるか否か検査。NULL以外であればtrue

int strlen( 文字列 )

 文字列の長さをバイト数で返す

string substr( 文字列 ,開始 [,長さ] )

 文字列の開始から、長さ(byte単位)までの文字列を返す。開始は 0 から数える
 長さを省略すると最後尾まで。開始をマイナスにすると後ろから長さの分返す

int strpos( 文字列 ,検索単語 [,検索開始位置] )

 文字列の中で検索単語が、何バイト目に出てくるか確認する
 検索単語が見つからなかった場合は、booleanのfalseを返却するので、
 文字列が見つかったか否かチェックする場合は 型まで比較する === 演算子を使用すること
 一番最初に見つかった場合、0を返し、0 == false の判定が真になってしまう

string strstr( 文字列 ,検索単語 ,[true] )

 文字列の中で最初に見つかった検索単語以降の文字列を返す
 引数3に true を入れると見つかった検索文字の直前までを返す

$email  = 'name@example.com';
$domain = strstr($email, '@');
echo $domain; // @example.com と表示します
$user = strstr($email, '@', true); // PHP 5.3.0 以降
echo $user; // name と表示します

string stristr( 文字列 ,検索単語 ,[true] )

 文字列の中で最初に見つかった検索単語以降の文字列を返す(大小区別しない)

string strrchar( 文字列 ,検索文字 )

 文字列の中で後ろから検索し最初に見つかった文字以降の文字列を返す

mixed str_replace( 検索単語 ,置換文字 ,文字列 )

 検索文字列に一致したすべての文字列を置換する

$bodytag = str_replace("%body%", "black", "<body text='%body%'>");
// <body text='black'> となります
$ary = array("!","?",".");
$ret = str_replace($ary, "", "Hello World!! of PHP?.?");
// Hello World of PHP
$num = "1 2 3 4 5";
$bef = array("1", "2", "3");
$aft = array("A", "B", "C");
$ret = str_replace($bef, $aft, $num);
// A B C 4 5

int strcmp( 文字列1 ,文字列2 )

 文字列1と文字列2が同じならば0を返す。大きい場合は正、小さい場合は負

int strcasecmp( 文字列1 ,文字列2 )

 文字列1と文字列2が同じならば0を返す(大小区別しない)大きい場合は正、小さい場合は負

演算

e乗算。3e3⇒3x10の3乗
A & Bビット積(AND)AとB両方にセットされているビットをセットする
A | Bビット和(OR)AまたはB何れかにセットされているビットをセットする
A ^ B排他的論理和(XOR)
1 xor 1 = 0
1 xor 0 = 1
0 xor 1 = 1
0 xor 0 = 0
~ A否定(NOT)
A << B左シフト。Aのビットを左にBビットシフトする。各シフトは2を掛けることを意味する
左から溢れたビットは捨てられ右は0埋めされる
A >> B右シフト。Aのビットを右にBビットシフトする。各シフトは2を割ることを意味する


制御文

if

if (条件式1) {
    "処理内容"
} elseif (条件式2) {
    "処理内容"
} else {
    "処理内容"
}

while

while (条件式) {
    "条件式がtrueの間、繰り返される"
}

for

for (変数の初期化; 条件式; 変数の増分指定$i++など ) {
    "条件式がtrueの間、繰り返される"
}

foreach

foreach( 配列 as $value ) {
    "配列の要素がなくなるまで、繰り返される"
  "変数 $value に現在の要素が格納されている"
}
// キーと、値を一度に取り出す
foreach( 配列 as $key => $val ) {
    "$keyに現在の要素のキー、$valに要素の値が格納されている"
}

switch

switch( 変数や式 ){
  case 値1:
      処理1;
      break;
  case 値2:
      処理2;
      break;
  default:
      デフォルトの処理
}


比較

PHPでは 0 をfalse(偽)、0以外を true(真) として扱う

比較式結果説明
' 0x' == 0true' 0x'は0と解釈され一致する
'0x' == falsefalse右辺がfalseという文字列型の為、左辺は文字列の'0x'と解釈され '0x'=='0'となる
'0' == falsetrue文字列の'0'と比較する為
0 == nulltrue
'0' == nullfalse
'' == 0true空文字は0として扱われるため
'' === 0false空文字は0として扱われるが型が違う
"abc" < "def"trueアルファベット順で比較される
"123" < "567"false文字列が全て数値の場合は、数値として比較される

比較演算

A > BAはBより大きい
A >= BAはB以上
A == BAとBは等しい
A != BAとBは等しくない
A <> BAとBは等しくない
A === BAとBは型も含めて等しい。 5 === '5' → false
A !== BAとBは内容か、型の何れかが異なる。5 !== '5' → true

論理演算

A and B条件Aと条件Bが共にtrueであれば真
A && B条件Aと条件Bが共にtrueであれば真
A or B条件Aと条件Bのどちらかがtrueであれば真
A || B条件Aと条件Bのどちらかがtrueであれば真
! A条件Aが真なら偽。偽なら真

浮動小数点の比較

 $a=50.0 としても内部的に、50.000002 といった値で記憶されることがある
 その為、浮動小数点の比較は以下のようにする必要ある

if ( abs($a - $b) < 0.00001 )
※absは、絶対値を返す関数

変換関数

intval($s)$sを整数に変換
floatval($s)$sを浮動小数点に変換
strval($i)$iを文字列に変換


数値検証

 一旦数値に変換後、再度文字列に変換することで純粋に数値だけか検証できる
 is_int()や、is_float() 関数などを使用することでも可能

if ( $i != strval(intval($i)) ) {
    echo "{$i}は数値以外!!";
}


関数(function)

function 関数名 (引数1 [,引数2]... ) {
    関数の処理;
    return 戻り値;
}

省略可能な引数

function 関数名 (引数1 ,引数2=0.05 ) {
}

 関数を呼び出す場合、引数2を省略した場合の値は0.05になる。つまり引数が1つでも2つでも処理が可能な関数となる
 指定可能なのは、文字列、数値、定数に限られる(変数は使えない 引数2=$tax はNG)
 define("DEFAULT_TAX",0.05); とし、引数2=DEFAULT_TAX で関数を作成する場合は問題ない

スーパーグローバル変数

$GLOBALS["変数名"]=値;

 スクリプト全体で変数の値を保持する(別ファイル間を保持するにはクッキーやセッションを利用する必要あり)
 スーパーグローバル変数を参照する場合は、$GLOBALS["変数名"] と記述する

グローバル変数

global 変数名;

 関数内で、関数外で定義された変数を参照するようにする。関数の外で宣言された変数は全てグローバル変数となる
 スクリプトを跨がる参照はできない

$ghensu = "test";
func();
function func() {
    global $ghensu;
    echo $ghensu;
}

静的変数

最初に関数が呼ばれた時のみ、初期化が行われる。2回目以降は $a = 0は実行されない。ローカル関数のみに存在する

function test()
{
    static $a = 0;
    echo $a;
    $a++;
}

int func_num_args()

関数に渡された引数の数を取得

array func_get_args()

関数の引数リストを配列で取得

if (func_num_args() != 2) return 1;
list($arg1, $arg2) = func_get_args();


WEBフォーム

<form action="PHPファイル名" method="GET|POST">
    <input type="text" name="user">             /* この部分は下記フォーム種類を参照 */
    <input type="submit" value="送信">
</form>

form action="PHPファイル名"
 送信ボタンを押下した時に処理を引き継ぐファイル名を記載
 フォームを記載したファイル自身に引き渡す場合、action="{$_SERVER[SCRIPT_NAME]}"とする
 引き渡された値は、$_{GET|POST}[nameで指定した名前] に格納される
 $_REQUEST には、$_GET、$_POST、$_COOKIE を含んだ連想配列が格納されている

method="GET|POST"
 GETは送信後に引き渡された値がURLに追加される。そのURLをブックマークすることが可能
 POSTはGETと同じ動きだが、送信後のURLは、actionで定義されたファイルになる

<input type="text" name="user">
 1行テキストから入力された値が、$_GET[user] または $_POST[user]という変数に格納される
 要素名はname="要素名"で指定した名前になる

フォーム種類説明
1行テキスト<input type="text" name="名前" value="初期値">
チェックボックス<input type="checkbox" name="名前" value="値">
ラジオボタン<input type="radio" name="名前" value="値">
隠しフィールド<input type="hidden" name="名前" value="値">
複数行テキスト<textarea name="名前">初期値</textarea>
プルダウン選択<select name="名前"><option value="値1">選択肢1</option></select>
  • 初期値は省略可能。"値"が実際に変数に格納される値
  • チェックボックスのnameを"名前[]"のように[]を付与すると、添字の配列としてチェックした"値"が順番に格納される
    $_POST['名前'][添字]で格納される
  • 隠しフィールドは画面上表示されないが、送信した場合に"値"が渡される
    その為、isset($_POST['名前']) など Keyの存在有無を確認しフォームの送信が行われたか判定させることが可能

$_SERVER[要素名]

要素名説明
QUERY_STRINGURLの?に続くURLパラメータの値
PATH_INFOURLの最後に付与されたパス情報
SERVER_NAMEPHPが実行されているWEBサイトのドメイン名
SERVER_ADDRPHPが実行されているWEBサイトのIPアドレス
REMOTE_HOSTPHPを実行したクライアントのホスト名
REMOTE_ADDRPHPを実行したクライアントのIPアドレス
DOCUMENT_ROOTWebサーバーのドキュメントルート
HTTP_REFERERリンク元のURL
HTTP_USER_AGENTユーザーのWebブラウザ情報
SCRIPT_NAMEスクリプトのパス名とファイル名


string urlencode( "文字列" )

 URLとして許可されない文字列を%xxの形式(xxは16進数)で符号化する

string urldecode( "文字列" )

 URLをデコードする

string htmlentities( "文字列" )

 適用可能な文字を全て HTML エンティティに変換する

文字  HTMLエンティティ
----  ----------
<     &lt;
>     &gt;
&     &amp;
"     &quot;
'     &#039;

string htmlspecialchars( "文字列" [, 変換スタイル [, 文字コード ]] )

適用可能な文字をHTMLエンティティに変換する。 " と ' に関しては変換スタイルにて定義する

変換スタイル説明
ENT_COMPAT"は変換するが、'は変換しない(デフォルト)
ENT_QUOTES両方変換する
ENT_NOQUOTES両方変換しない
 

string strip_tags( "文字列" [,取り除かないタグ] )

 NULバイトと HTML および PHP タグを取り除く

$text = '<p>TEST</p><!-- Comment --> <a href="test.html">href</a>';
echo strip_tags($text);           // TEST href
echo strip_tags($text, '<p><a>'); // <p>TEST</p> <a href="test.html">href</a>

void header('Location: ファイル名 or URL' )

 Location: 〜とすることで、指定したファイルまたはURLへリダイレクトさせる
 HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要がある

日付関数

int time()

 現在のタイムスタンプ(エポックタイム)を取得する

string date( '書式' [, エポックタイム ] ) または string strftime( '書式' [, エポックタイム ] )

 日付・時刻を書式化する。strftimeは利用しているOSにより依存しており、いくつかの書式はWindowsのみ利用可能

datastrftime対象具体例
y%y西暦2桁
Y%Y西暦4桁
m%m2桁
n-1〜2桁
M-Jan(1月)〜Dec(12月)
F%FJanuary〜December
d%d2桁
j%e1〜2桁(%eはUNIX環境のみ)
H%h2桁
h%I12時間単位
i%M2桁
s%s2桁
W%V-通年の週番号、最初の月曜日を1週目としてカウントする
w%w曜日0(日曜)〜6(土曜)
-%C世紀100年で割って整数に丸めた値
-%c-現在のロケールに基づく日付と時間
c--ISO 8601による日時
r--ISO 2822による日時

int strtotime( "キーワード" [, エポックタイム ] )

 英文形式の日時(Monday、10 September 2000など)をエポックタイムに変換する
 エポックタイムを指定することで、基準となる時刻を調整できる

キーワード説明キーワード説明
daytomorrow+1 dayと同じ
weekyesterday-1 dayと同じ
month月の英語表記その月
year曜日の英語表記その曜日
hournext キーワード次の現れるキーワードの日
minutelast キーワード前に現れるキーワードの日
secondnow現在
echo strftime("%Y/%m/%d %H:%M:%S" ,strtotime("10 September 2000")), "\n";                        /*  2000/09/10 00:00:00 */
$base = strtotime("10 September 2000" ,$base);
echo strftime("%Y/%m/%d %H:%M:%S" ,strtotime("+1 day"  ,$base)), "\n";                           /*  2000/09/11 00:00:00 */
echo strftime("%Y/%m/%d %H:%M:%S" ,strtotime("+1 week" ,$base)), "\n";                           /*  2000/09/17 00:00:00 */
echo strftime("%Y/%m/%d %H:%M:%S" ,strtotime("+1 week 2 days 4 hours 2 seconds" ,$base)), "\n";  /*  2000/09/19 04:00:02 */
echo strftime("%Y/%m/%d %H:%M:%S" ,strtotime("next Thursday" ,$base)), "\n";                     /*  2000/09/14 00:00:00 */
echo strftime("%Y/%m/%d %H:%M:%S" ,strtotime("last Monday" ,$base)), "\n";                       /*  2000/09/04 00:00:00 */

int mktime( [ [, [, [, [, [, ]]]]]] )

 指定した日時のエポックタイムを取得
 存在しない日付を指定した場合、02/31 ⇒ 03/02というに自動で存在する日付に変換される

array getdate( [ エポックタイム ] )

 エポックタイムを以下のKEYとして連想配列にして格納

Array
(
    [seconds] => 32        // 秒の値 0 〜 59
    [minutes] => 29        // 分の値 0 〜 59
    [hours] => 22          // 時の値 0 〜 23
    [mday] => 17           // 日の値 1 〜 31
    [wday] => 2            // 曜日の値(数値) 0(日曜) 〜 6(土曜)
    [mon] => 1             // 月の値(数値) 1 〜 12
    [year] => 2012         // 年の値(4桁)
    [yday] => 16           // 年単位の日 0 〜 365
    [weekday] => Tuesday   // 曜日の値(フルスペル) Sunday 〜 Saturday
    [month] => January     // 月の値(フルスペル) January 〜 December
    [0] => 1326806972      // エポックタイム time()の値と同様
)

bool checkdate( , , )

 指定した日付が存在している場合は true を返す

正規表現

正規表現のパターン

/〜/文字列の一行目のみ調べる
/〜/g複数行を調べる
/〜/s改行文字を無視し、1行とみなして調べる
/〜/i大文字・小文字を意識しない
 

int preg_match('パターン' ,$s [,配列 [,flag ,[検索位置]]] )

 正規表現のマッチングを行う。0(一致しない)か1(一致)のどちらかになる
 当該関数は最初に一致したパターンが見つかった時点で終了する。全てを評価するには preg_match_all を使用する
 配列を指定した場合、配列[0]に一致した行が格納される
 PREG_OFFSET_CAPTURE 各マッチに対応する文字列のオフセットも返される

$s = "03-1234-5678";
preg_match('/\d+/' ,$s ,$matches ,PREG_OFFSET_CAPTURE );
print_r($matches);

Array
(
    [0] => Array
        (
           [0] => 03
           [1] => 0   // オフセットも返される
        )
)

int preg_match_all( 'パターン' ,$s [,配列 [,flag ,[検索位置]]] )

 正規表現に一致した回数を返す。全ての文字列に対してマッチングを行う

flag説明
PREG_PATTERN_ORDER配列[0][0][0] は パターン全体にマッチした文字列の配列、
配列[1][0][0] は 1 回目のマッチングでキャプチャした値の配列(デフォルト)
/(〜1)(〜2)(〜3)/ とすれば、(〜1)は[1][0][0]、(〜2)は[2][0][0]、(〜3)は[3][0][0] に格納される
PREG_SET_ORDER配列[0][0] は パターン全体にマッチした文字列の配列、
配列[0][1] は 1 回目のマッチングでキャプチャした値の配列
/(〜1)(〜2)(〜3)/ とすれば、(〜1)は[0][1]、(〜2)は[0][2]、(〜3)は[0][3] に格納される
PREG_OFFSET_CAPTUREPREG_PATTERN_ORDERと同じ配列パターンで格納するが、配列[x][0][1]に0から始まる検索開始位置が入る
$s = "03-1234-5678";
preg_match_all('/(\d+)-(\d+)/' ,$s ,$matchesS ,PREG_SET_ORDER );
preg_match_all('/(\d+)-(\d+)/' ,$s ,$matchesO ,PREG_OFFSET_CAPTURE );
print_r($matchesS);
print_r($matchesO);

Array
(
    [0] => Array
        (
            [0] => 03-1234   // (\d+)-(\d+) に一致したパターン
            [1] => 03        //  \1 に一致したパターン
            [2] => 1234      //  \2 に一致したパターン
        )

)

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => 03-1234
                    [1] => 0         // オフセット(PREG_PATTERN_ORDERの場合はない)
                )
        )
    [1] => Array
        (
            [0] => Array
                (
                    [0] => 03
                    [1] => 0         // オフセット(PREG_PATTERN_ORDERの場合はない)
                )
        )
    [2] => Array
        (
            [0] => Array
                (
                    [0] => 1234
                    [1] => 3         // オフセット(PREG_PATTERN_ORDERの場合はない)
                )
        )
)

mixed preg_replace( 'パターン' ,'置換パターン' ,$s [,置換回数] )

 パターンでマッチする文字列または配列を、置換パターン(置換を行う文字列もしくは文字列の配列)で置換する
 置換パターンの配列が、正規表現の配列より少ない場合、余った正規表現の配列は空文字に置換される

$string = 'April 15, 2003';
echo preg_replace('/(\w+) (\d+), (\d+)/i', '${1}1,$3', $string); /* April1,2003 */
※${1}は後方参照。\1 でも良いが、今回の例だと\11となるため、${1}とする必要がある
$string = '1 2 3 4 5 6 7 8 9';
$patterns = array('/2/','/3/','/4/');
$replaces = array();
$replaces[2] = 'C';
$replaces[1] = 'B';
$replaces[0] = 'A';
ksort($patterns);  /* 配列の添字が揃ってない場合、意図した対応の変換が行われないのでソートする */
ksort($replaces);  /* 配列の添字が揃ってない場合、意図した対応の変換が行われないのでソートする */
echo preg_replace($patterns, $replaces, $string);
// 1 A B C 5 6 7 8 9(ksortしない場合は、1 C B A 4 ‥‥)になる

array preg_split( 'パターン' ,$s [,分割回数 [,flag]] )

 指定した文字列を正規表現で分割し、配列に格納する

flag説明
PREG_SPLIT_NO_EMPTY空文字列でないものだけが preg_split() により返す
PREG_SPLIT_DELIM_CAPTUREパターンを()で括ったものでマッチした文字列も同時に返す
PREG_SPLIT_OFFSET_CAPTUREマッチに対応する文字列とオフセット位置を対にした配列で返す
$s = 'A 03 B 1234 C 5678';
$arr = preg_split('/([a-zA-Z])/' ,$s ,-1 ,PREG_SPLIT_DELIM_CAPTURE);
print_r($arr);

Array
(
    [0] => 
    [1] => A        // ( ) で指定した ([a-zA-Z]) に一致する文字列が格納されている
    [2] =>  03      // パターンで分割された文字列
    [3] => B
    [4] =>  1234 
    [5] => C
    [6] =>  5678
)
$s = 'A 03 B 1234 C 5678';
$ary = preg_split('/[a-zA-Z]/',$s, -1 ,PREG_SPLIT_OFFSET_CAPTURE);
print_r($arr);

Array
(
    [0] => Array
        (
            [0] => 
            [1] => 0
        )
    [1] => Array
        (
            [0] =>  03 
            [1] => 1
        )
    [2] => Array
        (
            [0] =>  1234 
            [1] => 6
        )
    [3] => Array
        (
            [0] =>  5678
            [1] => 13
        )
)

データベース

MDB2の接続方法

require 'MDB2.php';
MDB2::connect('<DSN接頭辞>://<ユーザー>:<パスワード>@<ホスト名>/<DB名>');
接頭辞データベース
mysqlMySQL
mssqlSQL Server
oci8Oracle7/8/9
odbcODBC
pgsqlPostgreSQL
require 'MDB2.php';
$db = MDB2::connect('mysql://user:pass@localhost/db');
if (PEAR::isError($db)) {
    die("Error" . $db->getMessage());  /* PHPスクリプトを終了する */
}

PDO の接続方法

$db  = new PDO('<DSN接頭辞>:host=<ホスト名>;dbname=<DB名>' ,'<ユーザー名>' ,'<パスワード>');

 PHP5.1から実装され標準のライブラリで処理速度も高速化されているので新規プロジェクトはこっち使う方がいい
 DSN接続辞は Oracle が oci に変わった以外は同じ

try {
    $db = new PDO('mysql:host=localhost;dbname=db' ,'user' ,'pass');
    $db->setAttribute(PDO_ATTR_CASE, PDO_CASE_LOWER);             /* カラム名を小文字で取得する       */
    $db->setAttribute(PDO_ATTR_AUTOCOMMIT, 0);                    /* 自動コミットをOff                */
    $db->setAttribute(PDO_ATTR_ERRMODE, PDO_ERRMODE_EXCEPTION);   /* エラー時にExceptionをthrowさせる */
}
catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
    echo '    error code: ' . $e->getCode();
    exit;
}


MDB2のメソッド

MDB2:connectで取得したオブジェクトのメソッドになっているので -> を繋げて使う

$db->disconnect()

 DBを切断する

$db->setErrorHandling( PEAR_ERROR_DIE )

 エラーが起きたらそこでプログラムを終了するようにする

$db->setErrorHandling( PEAR_ERROR_CALLBACK ,'関数名' )

 エラーが起きたら引数に指定した関数(function XXX)を実行する
 エラー内容は、$error_obj->getDubugInfo(); で取得可能

$db->query( "クエリー" )

 クエリーの実行。結果としてDB_resultオブジェクトを得る

$ret = $db->query("select * from test");

$ret->fetchRow()

 DB_resultオブジェクトから結果を1行のみ取得し配列に格納する。カラムの個数分配列に格納される

mysql> select * from test;
+------+------+
| num  | name |
+------+------+
|    1 | ONE  |
|    2 | TWO  |
+------+------+
$ret = $db->query("select * from test");
$row = $ret->fetchRow();
print_r($row);

Array
(
    [0] => 1
    [1] => ONE
)

$db->getAll( "クエリー" )

 クエリーの結果を一度に取得し配列として格納する。使用するには、$db->loadModule('Extended'); 宣言が必要

$db->loadModule('Extended');
$ret = $db->getAll("select * from test");
print_r($ret);

Array
(
   [0] => Array
       (
           [0] => 1
           [1] => ONE
       )
   [1] => Array
       (
           [0] => 2
           [1] => TWO
       )
)

$db->exec( "クエリー" )

 DELETE、INSERT、UPDATE 文によって作用した行数を返す

$db->nextID( 'TABLE名' )

 一意の数値を返す

$db->prepare( "クエリー" )

 クエリー内で ? と記述した部分は execute("キーワード"); でクエリーを実行した際に置き換えられる
 複数のキーワードを指定する場合は、execute(array('KEY1','KEY2'...)); のように配列で定義する
 その際、'を\'で打ち消した状態でクエリーが実行される(プレースホルダ)

$stmt = $db->prepare("select num,name from test where name = ?");
$ret  = $stmt->execute("ONE");
if (PEAR::isError($ret)) {
    die($res->getMessage());
}
$row = $ret->fetchRow();
print_r($row);

Array
(
    [0] => 1
    [1] => ONE
)

$db->setFetchMode( 指定文字列 )

 通常、クエリーの結果は、添字の配列となるが、連想配列として結果を取得したい場合に指定する

指定文字列説明
MDB2_FETCHMODE_ORDERED数値インデックスを持つ配列を返す (デフォルト)
MDB2_FETCHMODE_ASSOCカラム名をキーとする連想配列を返す
MDB2_FETCHMODE_OBJECTカラム名をプロパティとして持つオブジェクトを返す
MDB2_FETCHMODE_ASSOC      MDB2_FETCHMODE_OBJECT

Array                     stdClass Object
(                         (
    [num] => 1                [num] => 1      // $row->num; と記述して値を取得する
    [name] => ONE             [name] => ONE
)                         )

PDOのメソッド

$db->query( "クエリー" )

 クエリを発行する

$ret->fetch()

 1レコード分の結果を配列で返す

mysql> select * from test;
+------+------+
| num  | name |
+------+------+
|    1 | ONE  |
|    2 | TWO  |
+------+------+
$ret = $db->query("select * from test;");
$row = $ret->fetch();
print_r($row);

Array
(
    [num] => 1
    [0] => 1
    [name] => ONE
    [1] => ONE
)

$ret->fetchAll()

 全ての結果行を含む配列を返す

$row = $ret->fetchAll();

Array
(
    [0] => Array
        (
            [num] => 1
            [0] => 1
            [name] => ONE
            [1] => ONE
        )
    [1] => Array
        (
            [num] => 2
            [0] => 2
            [name] => TWO
            [1] => TWO
        )
)

$ret->rowCount()

 DELETE、INSERT、UPDATE 文によって作用した行数を返す

$db->setAttribute( 属性 , )

 エラー時の挙動を設定する(http://php.net/manual/ja/pdo.setattribute.php

// エラーレポート指定で、エラーの場合例外(PDOException)をスローする
setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
// 自動コミットをOFFにする
setAttribute(PDO_ATTR_AUTOCOMMIT, 0);

$db->prepare( "クエリー" )

 クエリー内で :パラメータ と記述した部分を、bindParam(':パラメータ',変数名); で関連付けを行い、
 変数名に任意の値を代入した後、execute() を実行することで、代入された変数で処理が行われる

$id   = '1';
$name = 'ONE';
$stmt = $db->prepare("select num,name from test where num = :num and name = :name");
$stmt->bindParam(':num' ,$num);
$stmt->bindParam(':name',$name);
$stmt->execute();
print_r($stmt->fetch());

Array
(
    [num] => 1
    [0] => 1
    [name] => ONE
    [1] => ONE
)

 bindParam()を使用せず、execute()の引数として連想配列を指定することでも処理ができる  $stmt->execute( array(':user' => 'TEST' ,':id' => '1') );

 プレースホルダの「?」を指定することも可能
 この場合は、連想配列ではなく配列の要素番号を指定してbindParam()メソッドを使用する
 ?の番号は配列と異なり、1から指定する必要がある

$name = 'ONE';
$sql  = $db->prepare("select user,name from table where user = ?");
$stmt = $sql->bindParam(1,$name);
$stmt->execute();
print_r($stmt->fetch());

$db->beginTransaction()

 トランザクションを開始する

$db->commit()

 変更をコミットする

$db->rollback()

 変更をロールバックする

クッキー

bool setcookie( 'クッキー名' ,'クッキー値' [,有効日時 [,パス [,ドメイン [,SSLフラグ ]]]]] )

 クッキーを設定する。ヘッダー情報と共に送信される為、あらゆるタグより前に書く必要がある

有効期限エポックタイム。省略時はブラウザ閉じたタイミングで消える
パスクッキーの有効範囲は通常setcookie関数を実行したPHPのディレクトリ以下だが、'/'を指定するとそのドメイン配下全てで有効になる
ドメインドメインを越えて有効にしたい場合に指定。.exsample.com のように指定
SSLフラグ1を指定するとSSL接続の時(HTTPS接続時)のみクッキーが送信される。デフォルト値は0

$_COOKIE['クッキー名']で値を取得することが可能

setcookie( 'test' ,"てすと" ,time() + 3600 ); /* 1時間後に消える */
echo $_COOKIE['test'];                        /* てすと */


セッション

bool session_start()

 セッション開始を宣言。この関数以降に書かれた $_SESSION['キー'] の値は、ブラウザを閉じるまで保持される
 session_start()さえ宣言すれば、別ファイルでも値を維持できる

// index.php
session_start();
$_SESSION['name'] = 'kita';
echo '<br /><a href="test.php">test.php</a>';
// test.php
session_start();
echo $_SESSION['name']; /* kita */

bool session_destroy()

 $_SESSIONに保存された全ての値を破棄する

 

暗号化

string crypt( "暗号化したい文字列" [,"salt文字列"] )

文字列の一方向ハッシュを行う(復号は出来ない)。salt文字列は暗号化のパターンを生成する為、任意の文字列を入れる
省略した場合の挙動は アルゴリズムの実装によって決まるので、予期せぬ結果となることがある
ハッシュ化された文字列が返されるので、その文字列をDBなどに登録し、Password認証自体はハッシュの値が正しいか否かで判定する

string hash( "アルゴリズム" ,"暗号化したい文字列"[."salt文字列"] )

ハッシュ値を生成する。アルゴリズムは"md5"、"sha256"、"sha512"、"haval160,4"など

 

ファイル操作

require "ファイル名"

 ファイルを読み込んで実行する。ファイルがないとエラー。何度でも読み込める
 1度だけ読み込ませたい場合は、require_onceを使用する
 ファイル名に「../password」のように指定されると意図しないファイルを実行される
 basename($_GET['name']); のようにし、ファイル名だけを取り出すべき

include "ファイル名"

 ファイルを読み込んで実行する。ファイルがないと警告、処理は続行する
 1度だけ読み込ませたい場合は、include_onceを使用する

bool is_readable( "ファイル名" )

 ファイルが読み込み可能か

bool is_writable( "ファイル名" )

 ファイルが書き込み可能か

string dirname( "ファイル名" )

 親フォルダ名を取得。/etc/password なら /etc を返す

string basename( "ファイル名" )

 ファイル名を取得。/etc/password なら password を返す

string file_get_contents( "ファイル名(またはURL)" )

 指定されたファイルの内容を読み込んで返す

int file_put_contents( "ファイル名" ,"内容" [,flag] )

 指定されたファイルに内容を書き込む(flag指定しない場合、ファイルが存在していた場合は上書き)

flag説明
FILE_USE_INCLUDE_PATHファイルをインクルードディレクトリから探す
FILE_APPENDファイルがすでに存在する場合に、上書きではなく追記する
LOCK_EX書き込み処理中に、ファイルに対する排他ロックを確保する
 

resource fopen( "ファイル名" ,モード )

 ファイルポインタを取得する

動作モードファイルが存在しない時
rb読み込みfalseを返す
rb+読み書きfalseを返す
wb書き込み作成する
wb+読み書き作成する
ab追記モードで書き出し作成する
ab+追記モードで読み書き作成する
xb書き込み作成する(存在していればfalse)
xb+読み書き作成する(存在していればfalse)
// user.log の内容を user2.log に追記する
if( ($fpr = fopen('user.log' ,'rb')) == false ) {
    die("ファイルオープン失敗");
}
fpw = fopen('user2.log' ,'ab+');
while( !feof($fpr) ) {
    $line = fgets($fpr);
    fwrite($fpw ,$line);
}
fclose($fpr);
// 全く同じことが以下でも可能。パフォーマンス的に以下の方が有利
$filestr = file_get_contents('user.log');
file_put_contents('user2.log' ,$filestr);
 

bool fclose( "ファイルポインタ" )

 オープンしたファイルを閉じる

bool flock( "ファイルポインタ" ,ロックモード )

 指定したファイルをロックする

動作説明
LOCK_SH共有ロック(書き込みのみ禁止)
LOCK_EX排他ロック(読み書き両方禁止)
LOCK_UNロック解除(ロックを破棄する)※fcloseの後でも行われる
 

int fwrite( "ファイルポインタ" ,"文字列" )

 ファイルに文字列を書き込む

string fgets( "ファイルポインタ" [,サイズ] )

 1行読み込み。サイズを指定した場合、そのサイズ(byte)まで読み取る

string fread( "ファイルポインタ" ,サイズ )

 指定のサイズまで読み取る

bool feof( "ファイルポインタ" )

 ファイルポインタが終端に達しているか調べる

int fseek( "ファイルポインタ" ,位置 [,$whence] )

 ファイルポインタを指定した位置に移動させる

whence説明
SEEK_SET位置を offset バイト目に設定する
SEEK_CUR現在の位置に offset を加えた位置に設定する
SEEK_ENDファイル終端に offset を加えた位置に設定する
 

int ftell( "ファイルポインタ" )

 ファイルポインタの現在位置を取得

bool rewind( "ファイルポインタ" )

 ファイルポインタを先頭に戻す

array fgetcsv( "ファイルポインタ" [,サイズ [,区切り文字 [,囲み文字]]] )

 読み込んだフィールドの内容を含む数値添字配列を返す
 ファイルの終端またはエラーとなった場合は、falseを返す

// test.csv
// 1,aaa
// 2,bbb
$fp = fopen('test.CSV' ,'rb')
while( !feof($fp) ) {
    $cols = fgetcsv($fp ,1024);
    echo $cols[0] . " " . $cols[1] , "\n";   // 1 aaa
}                                            // 2 bbb と出力される
fclose($fp);

int fputcsv( "ファイルポインタ" [,サイズ [,区切り文字 [,囲み文字]]] )

 配列の内容をCSV形式としてファイルに出力する

ファイルアップロード

// ファイルアップロードのサンプルスクリプト
<?php
if ( isset($_FILES["upfile"]) ) {
    process_form();
} else {
    show_form();
}

function show_form() {
echo <<< EOF
     <META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
    <form action="{$_SERVER['SCRIPT_NAME']}" method="post" enctype="multipart/form-data">
    <input type="file" name="upfile" size="70" /><br>
    <input type="submit" value="送信" />
    </form>
EOF;
// 送信された情報は、スーパーグローバル変数($_FILES)に格納される
}

function process_form() {
    $path = dirname(__FILE__);
    $tmpf = $_FILES[upfile][tmp_name];
    $save = $path."/".$_FILES[upfile][name];

    if ( !is_uploaded_file($tmpf) ) {
        die("不正な経由でアップロードされたので中断します");
    }
    if ( !is_writable($path) ) {
        die("書き込み権限がありません");
    }
    move_uploaded_file($tmpf,$save);
    echo $_FILES[upfile][name]."のアップロードに成功しました";
}
?>

$_FILES

$_FILES[ param ][ name ]アップロードされたファイル名
$_FILES[ param ][ type ]MIMEタイプ
$_FILES[ param ][ size ]アップロードされたファイルサイズ
$_FILES[ param ][ tmp_name ]テンポラリファイル名。アップロードされたファイルが一時的に保存されたファイルパス
$_FILES[ param ][ error ]エラーコード。正常にアップロードされたらゼロになる

 ※paramは、input type="file" の name で指定した値。上記サンプルだとupfile

bool is_uploaded_file( $_FILES[ param ][ tmp_name ] )

 HTTPのPOSTリクエストでアップロードされたファイルか調べる

bool move_uploaded_file( "アップロードファイル名", "コピー先ファイル名" )

 アップロードされたファイルを指定の場所にコピーする

string finfo_file( $finfo ,"ファイル名" ) ※PHP5.3以降で実装

 ファイルについての情報を返す
 $finfo は finfo_open() で取得した fileinfoリソースを指定する
 $finfo = finfo_open(FILEINFO_MIME_TYPE); // mimetype 拡張モジュール風に mime タイプを返す
 指定されたファイルがJPEG画像なら、image/jpeg の結果が得られる

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mtype = finfo_file($finfo, $_FILES[upfile][tmp_name]);
finfo_close($finfo);
if ( $mtype != "image/jpeg" ) {
    die("JPEG画像ではありません");
}


日本語処理

strlen() などの関数はバイト単位で返すため、日本語で1文字の場合、正しい文字数を取り扱えない
mb_strlen() のように関数の先頭に mb_ を入れることでマルチバイト対応となる関数が多数用意されている
以下はマルチバイト専用の関数

string mb_strimwidth ( "文字列" ,開始位置 ,丸め幅 [,"追加する文字" [,"文字コード"]] )

 文字列を指定した幅で丸める。文字コードを省略した場合、内部文字エンコーディングを使用する

echo mb_strimwidth("Hello World", 0, 10, "..."); // Hello W... ※追加文字も含めて丸めサイズに収まる

string mb_convert_kana("文字列", オプション)

 文字列をオプション(複数指定可能)で指定した通り変換する

オプション説明
r「全角」英字を「半角」に変換
R「半角」英字を「全角」に変換
n「全角」数字を「半角」に変換
N「半角」数字を「全角」に変換
a「全角」英数字を「半角」に変換
A「半角」英数字を「全角」に変換
s「全角」スペースを「半角」に変換
S「半角」スペースを「全角」に変換
k「全角カタカナ」を「半角カタカナ」に変換
K「半角カタカナ」を「全角カタカナ」に変換
h「全角ひらがな」を「半角カタカナ」に変換
H「半角カタカナ」を「全角ひらがな」に変換
c「全角カタカナ」を「全角ひらがな」に変換
C「全角ひらがな」を「全角カタカナ」に変換
V濁点付きの文字を一文字に変換"K"、"H"と共に使用
 

bool mb_send_mail("宛先" ,"件名" ,"本文" [,"ヘッダー"])

 エンコード変換を行ってメールを送信する。エンコード変換されるのは"件名"と"本文"のみ

bool mb_encode_mimeheader("文字列" [,"文字セット"])

 MIMEヘッダーの文字列をエンコードする。件名、本文以外で日本語が入ってる場合に使う
 文字セットはmb_internal_encoding()と同じ値にする必要がある

$to = mb_encode_mimeheader("舞") . "<mai@example.jp>";
$subject = "ご挨拶";
$message = "はじめまして";
$mailfrom="From:" . mb_encode_mimeheader("太郎") ."<taro@example.com>";
mb_send_mail($to ,$subject ,$message ,$mailfrom);

mixed mb_internal_encoding( ["文字コード"] )

 内部文字エンコーディングを取得する。文字コードを指定した場合は設定する

string mb_detect_encoding( "文字列" [,"検出対象エンコードリスト" )

 検出した文字エンコーディングを返す。指定した文字列からエンコーディングを検出できなかった場合は FALSE を返す

mb_detect_encoding($str, "JIS, eucjp-win, sjis-win");

string mb_convert_encoding( "文字列" ,"変換後文字コード" [,"変換前文字コード[,変換前文字コード]..."] )

 文字列を特定の文字コードに変換。変換前文字コードを省略した場合は自動判別。複数記載するとその順番で判定する

/* JIS, eucjp-win, sjis-winの順番で自動検出し、UCS-2LEに変換 */
$str = mb_convert_encoding($str, "UCS-2LE", "JIS, eucjp-win, sjis-win");
 

XML

SimpleXMLElement simplexml_load_string( $XMLタグ )

 XML文字列をオブジェクトに代入する

$xmlstr = <<< END_OF_XML
<rss version="2.0">
<channel>
   <title>"TITLE"</title>
   <description>"TENKI-MAIN"</description>
   <item>
       <title>"ITEM1-TITLE"</title>
       <description>"ITEM1-DESC"</description>
   </item>
   <item>
       <title>"ITEM2-TITLE"</title>
       <description>"ITEM2-DESC"</description>
   </item>
</channel>
</rss>
END_OF_XML;
$xml = simplexml_load_string($xmlstr);
print_r($xml);
echo $xml[version]; "               /* 2.0           */
echo $xml->channel->item[0]->title; /* "ITEM1-TITLE" */
/* 要素名にPHPで許可されてない文字列(-など)が含まれている場合、要素名を{''}で囲む。$xml->{'item-list'} */
SimpleXMLElement Object
(
    [@attributes] => Array           /* 通常一番外枠の要素は取得しないがタグの中に文字を埋め込んでいるため */
    (                                /* attributesとして埋め込み文字列を取得している                       */
        [version] => 2.0
    )
    [channel] => SimpleXMLElement Object
    (
        [title] => "TITLE"
        [description] => "DESC"
        [item] => Array
        (
            [0] => SimpleXMLElement Object
            (
                [title] => "ITEM1-TITLE"
                [description] => "ITEM1-DESC"
            )

            [1] => SimpleXMLElement Object
            (
                [title] => "ITEM2-TITLE"
                [description] => "ITEM2-DESC"
            )
        )
    )
)

mixed asXML()

 SimpleXML 要素に基づき整形式の XML 文字列を返すメソッド

$xml = simplexml_load_string($xmlstr);
print $xml->asXML();

array xpath( "要素" )

 要素を検索するメソッド。要素を / で区切った値で指定。相対パスも有効
 要素が存在した場合は、その要素名。存在しない場合はfalseを返す

$ret = $xml->xpath('channel/item/title');
print_r($ret);
Array
(
    [0] => SimpleXMLElement Object
        (
            [title] => "ITEM1-TITLE"
        )
    [1] => SimpleXMLElement Object
        (
            [title] => "ITEM2-TITLE"
        )
)


デバッグ

<pre>タグ

 print_rや、"\n"などの改行を有効にし、標準出力を見やすくする

bool error_log( "内容" [,TYPE [,宛先]] )

 内容を TYPE で指定した場所へ出力する

TYPE説明
0php.iniのerror_logのファイルに出力(デフォルト)
1宛先に指定されたメールアドレスに送信
3宛先に指定されたファイルに追記。明示的に行わないと改行はしない
4直接 SAPI のログ出力ハンドラに送信
 

void var_dump( $変数 [,$変数]... )

 変数の内容を解りやすく表示する

bool ob_start()

 出力の補足を開始する。出力内容をバッファに書き溜める

string ob_get_contents()

 バッファ内の出力内容を取得し返す

ob_start();
echo "Hello ";
$out1 = ob_get_contents();

echo "World";
$out2 = ob_get_contents();

ob_end_clean();
var_dump($out1, $out2);
// string(6) "Hello "
// string(11) "Hello World"

int ob_get_length()

 バッファの長さを返す

bool ob_clean()

 出力バッファをクリアする

bool ob_end_clean()

出力バッファをクリアし補足を終了し標準出力に戻す

例外処理

try {
    if ( $b == 0 ) { throw new Exception('ゼロによる除算。'); }
    retrun $a / $b ;
} catch (Exception $e) {
    echo $e->getMessage();
    // 改めて例外をスローする場合は、throw $e; を記載。このブロックより外にcatch文がないので意味なしですが
}


php.ini

strings ini_set('パラメータ' ,'')

 設定内容を一時的に変更する。スクリプトの実行が終了したら元の値に戻る。全てのパラメータが変更できる訳ではない

precison = 桁数

 浮動小数点の最大桁数

max_execution_time =

 while文などの無限ループ時に強制終了する時間

magic_quotes_gpc = OFF

 このフラグをONにすると、$_GET、$_POSTなどWebフォームから受け取った情報を\でエスケープする
 プレースホルダを使わないことが前提。PHP5.3では非推奨の設定の為、通常はOFFにしておく

session.gc_maxlifetime =

 セッション有効期限(デフォルトは1440秒)

upload_max_filesize = byte

 アップロード可能な最大ファイルサイズ

max_input_time =

スクリプトが POST、GET などの入力を パースする最大の時間
サーバがすべてのデータを受け取ってからスクリプトの実行を開始するまでの時間

max_file_uploads =

同時にアップロードできるファイルの最大数。制限に達した時点で処理を終了する

post_max_size = byte

 POSTデータに許可される最大サイズ。upload_max_filesize より大きくする必要がある

memory_limit = byte

 スクリプトが確保できる最大メモリサイズ

open_basedir = 制限パス

 PHPから開くことのできるファイルを、指定したディレクトリ以下に限定する
 fopenなどでファイルを開く時、指定されたディレクトリ外の場合、開かない

allow_url_include = OFF

 include()、include_once()、require()、require_once() で リモートのファイル操作(デフォルトはOFF/開けない)

error_log = ファイル名

 error_log関数で出力するファイルを指定

error_reporting = 設定値

 出力する PHP エラーの種類を設定する

設定値説明
E_ALL厳格注意以外の全て
E_PARSEパースエラー(構文ミスや変数で予約語の使用)
E_ERROR致命的なエラー(定義されてない関数を呼び出した場合やメモリ不足など)
E_WARNING警告(引数を間違えた、存在しないファイルを読み取り専用で開いたなど)処理は継続する
E_NOTICE注意(変数を初期化しないで使ったなど)
E_STRICT厳格注意(推奨されてない関数の使用などコーディングスタイルのアドバイス)
E_DEPRECATED互換性注意(将来バージョンで動作しなくなるコードについて警告する)
 

文字に関する設定

設定値説明
mbstring.language使用する言語(Japaneseなど)
mbstring.internal_encoding内部(PHPが動作する)文字エンコーディング(UTF-8、EUC-JP、SJISなど)
mbstring.encoding_translationONにすることで入力されるHTTPクエリに関して、文字エンコーディング検出および
内部文字エンコーディングへの変換を行う透過的な文字エンコーディングフィルタを有効にする
mbstring.http_input入力文字エンコーディング(pass、auto、UTF-8、EUC-JP、SJISなど)
mbstring.http_output出力文字エンコーディング(pass、auto、UTF-8、EUC-JP、SJISなど)
mbstring.detect_order文字コード検出順序(auto)

※passは変換しない。autoは mbstring.language の設定を使ってエンコードする




関数一覧

返値配列説明
boolprint_r配列の中身を確認
intcount配列の要素数を数える
mixedcurrent現在参照している配列を返す
mixedarray_search配列の中から要素の値を検索し、そのキーを返す
boolarray_key_exists配列の中にkeyがあるかどうか調べる
boolin_array配列の中に値があるかどうか調べる
arrayarray_reverse配列の要素を逆順にソートする。preserve_keysにtrueを指定すると、Keyの順序も逆順になる
arrayarray_slice取り出し位置(先頭は0)に指定した要素の位置から、指定した長さ(省略時は最後まで)の要素を返す
arrayarray_splice配列の一部を削除し、他の要素で置換する
voidunset配列[key]の要素を削除する
arrayarray_merge複数の配列を結合する
arrayarray_diff最初に指定した配列から他の引数のいずれにも存在しないの値の全てを有する配列を返す
arrayexplode区切り文字で文字列を分割し、配列として返す
stringimplode配列の要素を区切り文字で結合する
arraylist配列の要素をlist内で指定した変数に順番に格納する
arrayeach配列から現在のキーと値のペアを返し配列の次の要素へ移動する
返値文字列操作説明
voidprintf引数の書式に沿って標準出力を行う
stringsprintf引数の書式に沿って文字列を作成する
stringtrim前後の空白を除去する
stringstrtoupper文字列を大文字にする
stringstrtolower文字列を小文字にする
stringucwords文字列の単語の最初の文字を大文字にする
stringstripslashesバックスラッシュを除いた文字列にする
stringaddslashes' " \ NULLバイトの文字列の前に、バッククォート(\)を付与する
boolisset変数に値があるか否か検査。NULL以外であればtrue
intstrlen文字列の長さをバイト数で返す
stringsubstr文字列の開始から、長さ(byte単位)までの文字列を返す。開始は 0 から数える
intstrpos文字列の中で検索単語が、何バイト目に出てくるか確認する
stringstrstr文字列の中で最初に見つかった検索単語以降の文字列を返す
stringstristr文字列の中で最初に見つかった検索単語以降の文字列を返す(大小区別しない)
stringstrrchar文字列の中で後ろから検索し最初に見つかった文字以降の文字列を返す
mixedstr_replace検索文字列に一致したすべての文字列を置換する
intstrcmp文字列1と文字列2が同じならば0を返す
intstrcasecmp文字列1と文字列2が同じならば0を返す(大小を区別する)
返値関数説明
intfunc_num_args関数に渡された引数の数を取得
voidfunc_get_args関数の引数リストを配列で取得
返値Web説明
stringurlencodeURLを符号化する
stringurldecode符号化されたURLを元に戻す
stringhtmlentities適用可能な文字を全て HTML エンティティに変換する
stringhtmlspecialchars適用可能な文字をHTMLエンティティに変換する。'と"の変換有無の指定が可能
stringstrip_tagsNULバイトと HTML および PHP タグを取り除く
voidheader生の HTTP ヘッダを送信する
boolis_uploaded_fileHTTPのPOSTリクエストでアップロードされたファイルか調べる
boolmove_uploaded_fileアップロードしたファイルを移動させる
stringfinfo_fileファイルについての情報を返す
返値日付説明
inttime現在のタイムスタンプ(エポックタイム)を取得する
stringdate日付・時刻を書式化する
stringstrftime日付・時刻を書式化する。OSにより依存しており、いくつかの書式はWindowsのみ利用可
intstrtotime英文形式の日時(Monday、10 September 2000など)をエポックタイムに変換する
intmktime指定した日時のエポックタイムを取得
arraygetdateエポックタイムを以下のKEYとして連想配列にして格納
boolcheckdate指定した日付が存在している場合は true を返す
返値正規表現説明
intpreg_match正規表現のマッチングを行う。1回一致したらそこで終了
intpreg_match_all正規表現のマッチングを最後まで行う
mixedpreg_replace正規表現による置換を行う
arraypreg_split正規表現により文字列を分割し配列に格納する
返値ファイル操作説明
requireファイルを読み込んで実行。ファイルがないとエラー
includeファイルを読み込んで実行。ファイルがないと警告、処理は続行
boolis_readableファイルが読み込み可能か
boolis_writableファイルが書き込み可能か
stringdirname親フォルダ名を取得
stringbasenameファイル名を取得
stringfile_get_contentsファイルの内容を読み込んで返す
intfile_put_contentsファイルに内容を書き込む
resourcefopenファイルをオープンしファイルポインタを取得する
boolfcloseオープンしたファイルを閉じる
boolflock指定したファイルをロックする
intfwriteファイルに内容を書き込む
stringfgetsファイルから1行分読み込む
stringfreadファイルから指定のサイズまで読み込む
boolfeofファイルポインタが終端に達しているか調べる
intfseekファイルポインタを指定した位置に移動させる
intftellファイルポインタの現在位置を取得
boolrewindファイルポインタを先頭に戻す
arrayfgetcsv読み込んだフィールドの内容を含む数値添字配列を返す
boolfputcsv配列の内容をCSV形式としてファイルに出力する
返値マルチバイト処理説明
stringmb_strimwidth 文字列を指定した幅で丸める
stringmb_convert_kana文字列をオプション(複数指定可能)で指定した通り変換する
boolmb_send_mailエンコード変換を行ってメールを送信する。エンコード変換されるのは"件名"と"本文"のみ
boolmb_encode_mimeheader文字列をMIMEエンコードする。宛先やヘッダーに日本語が入ってる場合に使う
mixedmb_internal_encoding内部文字エンコーディングを取得する。文字コードを指定した場合は設定する
stringmb_detect_encoding検出した文字エンコーディングを返す
stringmb_convert_encoding文字列を特定の文字コードに変換
返値XML説明
SimpleXMLsimplexml_load_stringXML文字列をオブジェクトに代入する
mixedasXMLSimpleXML 要素に基づき整形式の XML 文字列を返すメソッド
arrayxpatharray要素を検索し存在すれば取得する。なければfalse
返値デバッグ説明
boolerror_log内容をTYPEで指定した場所へ出力する
voidvar_dump変数の内容を解りやすく表示する
boolob_start出力の補足を開始する
stringob_get_contentsバッファ内の出力内容を取得し返す
intlob_get_lengthバッファの長さを返す
boolob_clean出力バッファをクリアする
boolob_end_clean出力バッファをクリアし補足を終了し標準出力に戻す
 
MDB2メソッド説明
$db->disconnect()DB切断
$db->setErrorHandling( PEAR_ERROR_DIE )エラーが起きたらそこでプログラムを終了するようにする
$db->setErrorHandling( PEAR_ERROR_CALLBACK, '関数名' )エラーが起きたら引数に指定した関数(function XXX)を実行する
$db->query( "クエリー" )クエリーの実行。結果としてDB_resultオブジェクトを得る
$ret->fetchRow()DB_resultオブジェクトから結果を1行のみ取得し、次のレコードへ移動する
$db->getAll( "クエリー" )クエリーの結果を一度に取得し配列として格納する
$db->exec( "クエリー" )DELETE、INSERT、UPDATE 文によって作用した行数を返す
$db->nextID('TABLE名')一意の数値を返す
$db->prepare( "クエリー" )プレースホルダによるクエリの実行
$db->setFetchMode( 指定文字列 )連想配列として結果を取得するように設定する
PDOメソッド説明
$db->query( "クエリー" )クエリを発行する
$ret->fetch()1レコード分の結果を配列で返す
$ret->fetchAll()全ての結果行を含む配列を返す
$ret->rowCount()DELETE、INSERT、UPDATE 文によって作用した行数を返す
$db->setAttribute( 属性 ,値 )エラー時の挙動を設定する
$db->prepare( "クエリー" )プレースホルダによるクエリの実行
$db->beginTransaction()トランザクションを開始する
$db->commit()コミットする
$db->rollback()ロールバックする

トップ   編集 凍結解除 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-11-09 (日) 10:49:07 (1018d)