LoginSignup
0
1

PHP備忘(Laravel共通部分含む)

Last updated at Posted at 2023-12-06

自分用備忘も兼ねて。

日本語環境

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 {
	//送信時にエラーが発生したときの処理
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1