自分用備忘も兼ねて。
日本語環境
date_default_timezone_set('Asia/Tokyo');
mb_language('Japanese');
利用メモリの設定変更
ini_set('memory_limit', '1G');
処理時間の上限を(処理に応じて)引き上げる
set_time_limit(60);
処理時間を計測する
$time_start = microtime(true);
$keika_time = microtime(true) - $time_start;
echo '経過時間'.round($keika_time,3).'秒<br>'; //小数点以下3桁まで表示
(サーバー上の)指定フォルダ内にあるファイル名を取得
$folder_path = './フォルダ名/';
$files = scandir($folder_path);
foreach ($files as $f) {
echo $f.'<br>';
}
エスケープ処理用の関数(Xss対策)
function h($a) {
return htmlspecialchars($a, ENT_QUOTES, 'UTF-8');
}
メールアドレスバリデーション
$email_a = 'tanaka@example.com';
$email_b = 'yamamoto';
if (filter_var($email_a, FILTER_VALIDATE_EMAIL)) { //Trueとなる
echo "'$email_a' はメールアドレスとして有効です。\n";
}
if (filter_var($email_b, FILTER_VALIDATE_EMAIL)) { //Falseとなり無効
echo "'$email_b' はメールアドレスとして有効です。\n";
} else {
echo "'$email_b' はメールアドレスとして無効です。\n";
}
Null合体演算子 ?? $_GET $_POSTで使用すると便利
$username = $_GET['user'] ?? '' ; // $_GETがissetされていれば??の左辺がfalseなら右辺が
$username = $_GET['user'] ?? $_POST['user'] ?? '' ;
// $_GET、$_POSTの順にTrueか判定し、それを代入
並べ替え各種(キーと値の関係を維持するもののみ)
asort ($a); //値の昇順に並べ替え
arsort($a); //値の降順に並べ替え
ksort ($a); //キー内容の昇順に並べ替え
krsort($a); //キー内容の降順に並べ替え
対象文字列を含むかどうか判定
if (strpos('abcdefg','ab') !== false) {
//対象文字列を含む場合 この場合はこちら
} else {
//含まない場合
}
PHP8以降 対象文字列を含むかの判定
if str_contains('abcdefg','ab'){
//対象文字列を含む場合 この場合はこちら
} else {
//含まない場合
}
文字の変換
//全角の文字、数字、記号を半角に変換(ex A⇒A)
$a = mb_convert_kana($a, "kna");
//大文字を小文字に変換(ex. A⇒a)
$a = mb_strtolower($a);
switch 条件分岐
switch ($mode){
case '':
break;
case 'a':
break;
case 'b':
break;
}
過去や未来の日時
echo date('Y/m/d H:i:s',strtotime("-1 second")) //1秒前
echo date('Y/m/d',strtotime("+30 day")) //30日後
//同様に minute hour week month year も使用可
日付の差 日数の把握
$d1 = new DateTime( 例 '2023/12/11');
$d2 = new DateTime( 例 '2023/12/15');
$dd = date_diff($d1,$d2);//引数は順不同
$sa = $dd -> days;
echo '差は'.$sa.'日';
テキストファイルに追記
$fp = fopen('ファイル名', 'a');
$line = 'abcdefg\n';
fwrite($fp, $line);
fclose($fp);
クライアントのIPアドレスを取得
$ip = $_SERVER["REMOTE_ADDR"];
リダイレクト
$url = 'sample.php';//リダイレクト先
echo '<meta http-equiv=\'refresh\' content=\'0;URL='.$url.'\'>';
//0の部分はリダイレクトするまでの秒数
参考)header関数の利用による遷移⇒こちらは先に何らかの画面表示が行われるとエラーが出る
header("Location: sample.php");
スクレイピング用関数 curlで取得
//スクレイピング用
function homePage ($hp_url){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$hp_url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
$home_cont = curl_exec($ch);
curl_close($ch);
$home_cont = mb_convert_encoding($home_cont,'UTF-8', 'ASCII, JIS, UTF-8, SJIS, euc-jp');
$home_cont = str_replace(array("\r\n","\n","\r","\t"),"", $home_cont);
return $home_cont;
}
スクレイピング時等に正規表現での検索を行う
//preg_match_allで繰り返し検索した上で、最初に一致するものを返す関数
function prgm($pattern,$val){
preg_match_all($pattern, $val, $matchtitle);
foreach ($matchtitle[1] as $value) {
return $value;
}
//空だった場合
return;
}
$pattern = "/<a href=\".*?\">(.*?)<\/a>/";
$val = ホームページ等から取得したhtml等;
$aaa = prgm($pattern,$val);
メール送信
mb_language("Japanese");
mb_internal_encoding("UTF-8");
$to = 送信先メルアド;
$from = 'From: ---------@---------';
$pfrom = '-f ---------@---------';
$title = 'メールタイトル';
$content = 'メール本文(改行は\n)';
if(mb_send_mail($to, $title, $content ,$from ,$pfrom)){
//エラーが発生しなかった時の処理
} else {
//送信時にエラーが発生したときの処理
}