エラー処理関数 2016年10月28日 17:10 編集
出力する PHP エラーの種類を設定する
// 全てのエラー出力をオフにする
error_reporting(0);
// 単純な実行時エラーを表示する
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// E_NOTICE を表示させるのもおすすめ(初期化されていない
// 変数、変数名のスペルミスなど…)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
// E_NOTICE 以外の全てのエラーを表示する
error_reporting(E_ALL & ~E_NOTICE);
// 全ての PHP エラーを表示する (Changelog を参照ください)
error_reporting(E_ALL);
// 全ての PHP エラーを表示する
error_reporting(-1);
// error_reporting(E_ALL); と同じ
ini_set('error_reporting', E_ALL);
counter:3,484
変数操作関数 2016年10月24日 12:50 編集
変数がセットされていること、そして NULL でないことを検査する
if (isset($var)) {PHPは未定義の変数を評価しようとするとエラーになるが、issetを使うとエラーにならない。
echo "\$varは定義済み";
} else {
echo "\$varは未定義";
}
counter:3,511
String関数 2016年10月24日 12:44 編集
フォーマットされた文字列を返す
sprintf ( フォーマット(str) [, 変数 [, 変数... ]] )
sprintf ( フォーマット(str) [, 変数 [, 変数... ]] )
echo sprintf("%04d年%02d月%02d日",2017,6,4);
実行結果
2017年06月04日
counter:3,367
その他の関数 2016年10月21日 19:46 編集
文字列を PHP コードとして評価する
任意の文字列をPHPとして実行するので、使用法を間違えると非常に危険。
任意の文字列をPHPとして実行するので、使用法を間違えると非常に危険。
$str = 'echo "テスト\n";';
eval($str);
実行結果
テスト
counter:3,371
Password_Hashing関数 2016年10月21日 18:40 編集
パスワードがハッシュにマッチするかどうかを調べる
password_verify ( パスワード(str) , ハッシュ(str) )
password_hash() が作ったハッシュが元のパスワードと一致するか調べるが、crypt()で作ったハッシュの照合もできる。
password_verify ( パスワード(str) , ハッシュ(str) )
password_hash() が作ったハッシュが元のパスワードと一致するか調べるが、crypt()で作ったハッシュの照合もできる。
$str = 'abcd';
$p_hash = password_hash($str, PASSWORD_DEFAULT);
$crp = crypt($str,'');
if (password_verify($str,$p_hash)) {
echo "パスワード一致\n";
}
if (password_verify($str,$crp)) {
echo "パスワード一致\n";
}
実行結果
パスワード一致
パスワード一致
counter:3,249
Password_Hashing関数 2016年10月19日 10:05 編集
パスワードハッシュを作る
password_hash ( 文字列(string) , アルゴリズム(integer) [, オプション(array) ] )
アルゴリズムは
PASSWORD_DEFAULT PASSWORD_BCRYPT CRYPT_BLOWFISH
などが使えるようだが、今のところどれを使っても結果は同じように見える。
PASSWORD_DEFAULTを使えば、将来もっと強力なアルゴリズムが追加されれば、それに変更されるということらしい。
オプションの使い方は不明。
password_hash ( 文字列(string) , アルゴリズム(integer) [, オプション(array) ] )
アルゴリズムは
PASSWORD_DEFAULT PASSWORD_BCRYPT CRYPT_BLOWFISH
などが使えるようだが、今のところどれを使っても結果は同じように見える。
PASSWORD_DEFAULTを使えば、将来もっと強力なアルゴリズムが追加されれば、それに変更されるということらしい。
オプションの使い方は不明。
$str = 'abcd';
$p_hash = password_hash($str, PASSWORD_DEFAULT);
echo $p_hash;
実行結果
$2y$10$Fe9m/IWTrv8rXWk8VLFpq.9JKwz.7sy685ezOuFk4tiprjHIurfl2
$2y$10$acXpA204vAshERD8JOPez.BWsSh5vcmxC1SAUm/7CHxwfAJyokjKa
など
counter:3,507
String関数 2016年10月18日 15:03 編集
文字列の一方向のハッシュ化を行う
crypt(文字列[,ソルト])
ソルトは省略可能ということになっているが、環境(PHPのバージョン?)によってはエラーになる。
crypt(文字列[,ソルト])
ソルトは省略可能ということになっているが、環境(PHPのバージョン?)によってはエラーになる。
echo crypt('文字列','');
実行結果
$1$bW3.I33.$wWES7J0RXxa8AB7eZTo4W0
$1$xX4.mb5.$HZ1Dn4pSa6HQ2d4ttfBTW/
$1$1V3..v0.$oPXRm8PrIcOykpjqAKYAy1
など 実行するたびに違う
counter:3,758
配列関数 2016年10月05日 15:40 編集
配列のキーと値を反転する
配列の場合、値が重複していても問題ないが、同じキーの配列の値は1個だけとなる。
したがって元の配列で値が重複していた場合、反転すると同じキーが複数存在することになるが、この場合、最後のキーだけが採用されることになる。
配列の場合、値が重複していても問題ないが、同じキーの配列の値は1個だけとなる。
したがって元の配列で値が重複していた場合、反転すると同じキーが複数存在することになるが、この場合、最後のキーだけが採用されることになる。
$ar = array('ab'=>'xy', 'cd'=>'yz', 'ef'=>'xy' );
$ar2 = array_flip($ar);
foreach ($ar2 as $key=>$val) {
echo "$key → $val\n";
}
実行結果
xy → ef
yz → cd
counter:3,280
String関数 2016年10月05日 15:40 編集
文字列から HTML および PHP タグを取り除く
$str = "<strong>タグに囲まれた文字列</strong>";
print strip_tags($str);
counter:3,473
PCRE関数 2016年10月04日 13:52 編集
正規表現文字をクオートする
実行時に生成される文字列をパターンとしてマッチングを行う際、文字列に正規表現の特殊文字がはいっていた場合にクォートするという使い方ができる
preg_quote( 文字列 [,デリミタ] )
正規表現の特殊文字. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -をクォートするが、/ は入っていない。/ もクォートしたい場合はデリミタに追加する
実行時に生成される文字列をパターンとしてマッチングを行う際、文字列に正規表現の特殊文字がはいっていた場合にクォートするという使い方ができる
preg_quote( 文字列 [,デリミタ] )
正規表現の特殊文字. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -をクォートするが、/ は入っていない。/ もクォートしたい場合はデリミタに追加する
$keywords = '$40 for a g3/400';
$keywords = preg_quote($keywords, '/');
echo $keywords;
実行結果
\$40 for a g3\/400
counter:3,346
PCRE関数 2016年10月04日 13:32 編集
正規表現検索および置換を行う
preg_replace ( 検索パターン(文字列か配列) , 置換パターン(文字列か配列) , 置換対象(文字列か配列) [, 置換最大回数(int) [, 置換回数 ]] )
置換回数を使う場合は初期値を設定しておかないとエラーになる。
またその前の置換最大回数も空白のままだとエラーになる。
デフォルトの-1(無制限)などを指定する必要がある。
preg_replace ( 検索パターン(文字列か配列) , 置換パターン(文字列か配列) , 置換対象(文字列か配列) [, 置換最大回数(int) [, 置換回数 ]] )
置換回数を使う場合は初期値を設定しておかないとエラーになる。
またその前の置換最大回数も空白のままだとエラーになる。
デフォルトの-1(無制限)などを指定する必要がある。
$str = 'a12bcd345ef6789gh01ij';
$count = 0;
$str2 = preg_replace( '/\d{3,}+/' , '□' , $str , -1 , $count );
print "\$str2=$str2\n";
print "\$count=$count\n";
実行結果
$str2=a12bcd□ef□gh01ij
$count=2
counter:3,409
配列関数 2016年10月04日 13:05 編集
配列に値があるかチェックする
in_array ( 捜す値 , 配列 [,オプション])
in_array ( 捜す値 , 配列 [,オプション])
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
echo "Got Irix";
}
実行結果
Got Irix
counter:3,351
配列関数 2016年10月03日 20:08 編集
複数の多次元の配列をソートする
本来の使用法とは違うが、シュウォーツ変換風の使用例
$list = array('abc,52,オレンジ','def,32,りんご','hij,6,バナナ','klm,21,キウイ');
$sort = array();
foreach ($list as $_) {
$tmp = explode(',',$_);
if (isset($tmp[1])) {
$sort[] = $tmp[1];
}
}
array_multisort($sort,SORT_ASC,SORT_NUMERIC,$list);
foreach ($list as $_) {
echo "$_\n";
}
実行結果
hij,6,バナナ
klm,21,キウイ
def,32,りんご
abc,52,オレンジ
counter:3,468
日付・時刻関数 2016年10月03日 12:52 編集
スクリプト中の日付/時刻関数で使用されるデフォルトタイムゾーンを設定する
date_default_timezone_set('Asia/Tokyo');
counter:3,963
日付・時刻関数 2016年10月03日 12:44 編集
新しいDateTimeオブジェクトを返す。
DateTime::__construct()のエイリアス
date_create(文字列[,タイムゾーン])
文字列を省略すると現在の時間のDateTimeオブジェクトを取得
いちいち指定するのは面倒なので、
さきにdate_default_timezone_setでタイムゾーンを指定しておく方が簡単。
DateTime::__construct()のエイリアス
date_create(文字列[,タイムゾーン])
文字列を省略すると現在の時間のDateTimeオブジェクトを取得
$obj = date_create('',new DateTimeZone('Asia/Tokyo'));上記のようにタイムゾーンを指定してDateTimeオブジェクトを取得してもいいが、
echo date_format($obj, 'Y-m-d H:i:s');
いちいち指定するのは面倒なので、
さきにdate_default_timezone_setでタイムゾーンを指定しておく方が簡単。
date_default_timezone_set('Asia/Tokyo');
counter:3,493
PCRE関数 2016年09月30日 19:52 編集
正規表現を使って文字列を検索する
preg_match ( パターン , マッチ対象文字列 [, 検索結果 [, フラグ [, 検索の開始位置 ]]] )
preg_match ( パターン , マッチ対象文字列 [, 検索結果 [, フラグ [, 検索の開始位置 ]]] )
$str = 'abcd0124skhe85263';
preg_match( '/\d+/', $str, $matched );
foreach ( $matched as $mtc ) {
echo $mtc . "\n";
}
実行結果
0124
counter:3,465
String関数 2016年09月30日 12:08 編集
文字列内の部分文字列が最初に現れる場所を見つける
strpos ( 検索対象の文字列 , 検索のキーワード [, オフセット ] )
見つからなかったらfalse、あるいはfalseとして評価される値を返す。
このためstrposの返り値を調べるには===演算子を使ったほうが無難。
strstr関数よりも高速。
strpos ( 検索対象の文字列 , 検索のキーワード [, オフセット ] )
見つからなかったらfalse、あるいはfalseとして評価される値を返す。
このためstrposの返り値を調べるには===演算子を使ったほうが無難。
strstr関数よりも高速。
$string = 'abcdabcd';
$key = 'bc';
echo strpos($string,$key);
実行結果
1
counter:3,488
String関数 2016年09月30日 12:06 編集
クォートされた文字列のクォート部分を取り除く
$quoted = '\/\/';
echo stripslashes( $quoted );
実行結果
//
counter:3,557