WebApp/PHP †基本 †構文 †<?PHP ← 開始タグ PHPの各種スクリプト ; ← スクリプトの最後は ; で閉める ?> ← 終了タグ(省略可能) コメント †# 〜 // 〜 /* 〜 */ 文字列 †
ヒアドキュメント †echo <<< 終端ワード 〜〜 $VAR など変数は展開される 終端ワード; echo <<< '終端ワード' 〜〜 $VAR など変数は展開されず、そのまま$VARと出力される 終端ワード; $body <<< 終端ワード 〜〜 終端ワード; 型 †
配列 †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
bool print_r( 配列 ) † 配列の中身をKeyとValueの形式で表示する int count( 配列 ) †配列の要素数を数える。エイリアスとして sizeof() mixed current( 配列 ) † 現在参照している配列を返す。エイリアスとして pos()
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)に指定した要素の位置から、指定した長さ(省略時は最後まで)の要素を返す array array_splice( 配列 ,削除位置 [,長さ [,置換える配列]] ) †
$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]の要素を削除する 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を持っていた場合、新しい配列の値で上書きされる $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( '区切り文字' ,文字列 [,配列数] ) † 区切り文字で文字列を分割し、配列として返す $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を返す $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( '書式' [,引数...] ) †
string sprintf( '書式' [,引数...] ) †printfと全く同じ動作だが文字列を返す string trim( 文字列 ) †文字列の前後の空白を削除する。ltrim や rtrim もある string strtoupper( 文字列 ) †文字列を大文字にする string strtolower( 文字列 ) †文字列を小文字にする string ucwords( 文字列 ) † 文字列の単語の最初の文字を大文字にする string stripslashes( 文字列 ) †バックスラッシュ(\)を除いた文字列にする string addslashes( 文字列 ) †' " \ NULLバイトの文字列の前に、バッククォート(\)を付与する bool isset( 変数 ) †変数に値があるか否か検査。NULL以外であればtrue int strlen( 文字列 ) †文字列の長さをバイト数で返す string substr( 文字列 ,開始 [,長さ] ) † 文字列の開始から、長さ(byte単位)までの文字列を返す。開始は 0 から数える int strpos( 文字列 ,検索単語 [,検索開始位置] ) † 文字列の中で検索単語が、何バイト目に出てくるか確認する string strstr( 文字列 ,検索単語 ,[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を返す(大小区別しない)大きい場合は正、小さい場合は負
演算 †
制御文 †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(真) として扱う
比較演算 †
論理演算 †
浮動小数点の比較 † $a=50.0 としても内部的に、50.000002 といった値で記憶されることがある if ( abs($a - $b) < 0.00001 ) ※absは、絶対値を返す関数 変換関数 †
数値検証 † 一旦数値に変換後、再度文字列に変換することで純粋に数値だけか検証できる if ( $i != strval(intval($i)) ) { echo "{$i}は数値以外!!"; } 関数(function) †function 関数名 (引数1 [,引数2]... ) { 関数の処理; return 戻り値; } 省略可能な引数 †function 関数名 (引数1 ,引数2=0.05 ) { } 関数を呼び出す場合、引数2を省略した場合の値は0.05になる。つまり引数が1つでも2つでも処理が可能な関数となる スーパーグローバル変数 †$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ファイル名" method="GET|POST" <input type="text" name="user">
$_SERVER[要素名] †
string urlencode( "文字列" ) †URLとして許可されない文字列を%xxの形式(xxは16進数)で符号化する string urldecode( "文字列" ) †URLをデコードする string htmlentities( "文字列" ) †適用可能な文字を全て HTML エンティティに変換する 文字 HTMLエンティティ ---- ---------- < < > > & & " " ' ' string htmlspecialchars( "文字列" [, 変換スタイル [, 文字コード ]] ) †適用可能な文字をHTMLエンティティに変換する。 " と ' に関しては変換スタイルにて定義する
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へリダイレクトさせる 日付関数 †int time() †現在のタイムスタンプ(エポックタイム)を取得する string date( '書式' [, エポックタイム ] ) または string strftime( '書式' [, エポックタイム ] ) †日付・時刻を書式化する。strftimeは利用しているOSにより依存しており、いくつかの書式はWindowsのみ利用可能
int strtotime( "キーワード" [, エポックタイム ] ) † 英文形式の日時(Monday、10 September 2000など)をエポックタイムに変換する
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( [ 時 [, 分 [, 秒 [, 月 [, 日 [, 年 ]]]]]] ) † 指定した日時のエポックタイムを取得 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 を返す
正規表現 †正規表現のパターン †
int preg_match('パターン' ,$s [,配列 [,flag ,[検索位置]]] ) † 正規表現のマッチングを行う。0(一致しない)か1(一致)のどちらかになる $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 ,[検索位置]]] ) †正規表現に一致した回数を返す。全ての文字列に対してマッチングを行う
$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]] ) †指定した文字列を正規表現で分割し、配列に格納する
$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名>');
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から実装され標準のライブラリで処理速度も高速化されているので新規プロジェクトはこっち使う方がいい 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)を実行する $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("キーワード"); でクエリーを実行した際に置き換えられる $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_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(':パラメータ',変数名); で関連付けを行い、 $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') ); プレースホルダの「?」を指定することも可能 $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フラグ ]]]]] ) †クッキーを設定する。ヘッダー情報と共に送信される為、あらゆるタグより前に書く必要がある
$_COOKIE['クッキー名']で値を取得することが可能 setcookie( 'test' ,"てすと" ,time() + 3600 ); /* 1時間後に消える */ echo $_COOKIE['test']; /* てすと */ セッション †bool session_start() † セッション開始を宣言。この関数以降に書かれた $_SESSION['キー'] の値は、ブラウザを閉じるまで保持される // 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文字列は暗号化のパターンを生成する為、任意の文字列を入れる string hash( "アルゴリズム" ,"暗号化したい文字列"[."salt文字列"] ) †ハッシュ値を生成する。アルゴリズムは"md5"、"sha256"、"sha512"、"haval160,4"など ファイル操作 †require "ファイル名" † ファイルを読み込んで実行する。ファイルがないとエラー。何度でも読み込める include "ファイル名" † ファイルを読み込んで実行する。ファイルがないと警告、処理は続行する 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指定しない場合、ファイルが存在していた場合は上書き)
resource fopen( "ファイル名" ,モード ) †ファイルポインタを取得する
// 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( "ファイルポインタ" ,ロックモード ) †指定したファイルをロックする
int fwrite( "ファイルポインタ" ,"文字列" ) †ファイルに文字列を書き込む string fgets( "ファイルポインタ" [,サイズ] ) †1行読み込み。サイズを指定した場合、そのサイズ(byte)まで読み取る string fread( "ファイルポインタ" ,サイズ ) †指定のサイズまで読み取る bool feof( "ファイルポインタ" ) †ファイルポインタが終端に達しているか調べる int fseek( "ファイルポインタ" ,位置 [,$whence] ) †ファイルポインタを指定した位置に移動させる
int ftell( "ファイルポインタ" ) †ファイルポインタの現在位置を取得 bool rewind( "ファイルポインタ" ) †ファイルポインタを先頭に戻す array fgetcsv( "ファイルポインタ" [,サイズ [,区切り文字 [,囲み文字]]] ) † 読み込んだフィールドの内容を含む数値添字配列を返す // 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 †
※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_MIME_TYPE); $mtype = finfo_file($finfo, $_FILES[upfile][tmp_name]); finfo_close($finfo); if ( $mtype != "image/jpeg" ) { die("JPEG画像ではありません"); } 日本語処理 †strlen() などの関数はバイト単位で返すため、日本語で1文字の場合、正しい文字数を取り扱えない string mb_strimwidth ( "文字列" ,開始位置 ,丸め幅 [,"追加する文字" [,"文字コード"]] ) †文字列を指定した幅で丸める。文字コードを省略した場合、内部文字エンコーディングを使用する echo mb_strimwidth("Hello World", 0, 10, "..."); // Hello W... ※追加文字も含めて丸めサイズに収まる string mb_convert_kana("文字列", オプション) †文字列をオプション(複数指定可能)で指定した通り変換する
bool mb_send_mail("宛先" ,"件名" ,"本文" [,"ヘッダー"]) †エンコード変換を行ってメールを送信する。エンコード変換されるのは"件名"と"本文"のみ bool mb_encode_mimeheader("文字列" [,"文字セット"]) † MIMEヘッダーの文字列をエンコードする。件名、本文以外で日本語が入ってる場合に使う $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( "要素" ) † 要素を検索するメソッド。要素を / で区切った値で指定。相対パスも有効 $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 で指定した場所へ出力する
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フォームから受け取った情報を\でエスケープする 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から開くことのできるファイルを、指定したディレクトリ以下に限定する allow_url_include = OFF †include()、include_once()、require()、require_once() で リモートのファイル操作(デフォルトはOFF/開けない) error_log = ファイル名 †error_log関数で出力するファイルを指定 error_reporting = 設定値 †出力する PHP エラーの種類を設定する
文字に関する設定 †
※passは変換しない。autoは mbstring.language の設定を使ってエンコードする
関数一覧 †
|