データからINSERT SQLリストを作成する


	/**
	 * データからINSERT SQLリストを作成する。
	 * @param array $data
	 * @param string $tbl_name テーブル名
	 * @return array SQLリスト
	 */
	private function createInsertSqls($tbl_name, &$data){
		
		if(empty($data)) return array();
		
		// 列名群文字列を組み立て
		$ent0 = current($data);
		$keys = array_keys($ent0);
		$clms_str = implode(',', $keys); // 列名群文字列

		$sqls = array(); // SQLリスト
		foreach($data as &$ent){
			// 値群文字列
			$vals_str = "'".implode("','",$ent)."'";
			
			// INSERT文を組み立て
			$sqls[] = "INSERT INTO {$tbl_name} ({$clms_str}) VALUES ({$vals_str});";
		}
		unset($ent);
		
		return $sqls;
	}
	

データからINSERTとUPDATEのSQL文を生成する


	<?php 
	$data = [
			['id'=>2, 'tanuki_name'=>'アオダヌキ','tanuki_date'=>'2019-4-8','kemono_id'=>100],
			['id'=>null, 'tanuki_name'=>'赤ダヌキ','tanuki_date'=>'2019-4-9','kemono_id'=>101],
			['id'=>3, 'tanuki_name'=>'黒ダヌキ','tanuki_date'=>'2019-4-10','kemono_id'=>102],
			['id'=>null, 'tanuki_name'=>'ビッグダヌキ','tanuki_date'=>'2019-4-11','kemono_id'=>103],
	];
	
	$res = getMasterDataFromDb('tanukis', $data);
	echo '<pre><code>';
	var_dump($res);
	echo '</code></pre>';

	/**
	 * データからINSERTとUPDATEのSQL文を生成する
	 * @param string $tbl_name テーブル名
	 * @param array $data エンティティ配列型のデータ
	 * @return array|string[][]
	 */
	private function createInsertAndUpdate($tbl_name, $data){
		if(empty($data)) return array();
		
		// 列名群文字列を組み立て
		$ent0 = current($data);
		$keys = array_keys($ent0);
		$clms_str = implode(',', $keys); // 列名群文字列
		
		$inserts = array(); // INSERT SQLリスト
		$updates = array(); // UPDATE SQLリスト
		foreach($data as &$ent){
			
			
			// IDが空ならINSERT文を組み立て
			if(empty($ent['id'])){
				$inserts[] = $this->makeInsertSql($tbl_name, $ent); // INSERT文を作成する
			}
			
			// IDが存在すればUPDATE文を組み立て
			else{
				$updates[] = $this->makeUpdateSql($tbl_name, $ent); // UPDATE文を作成する
			}
		}
		unset($ent);
		
		$res = [
				'inserts' => $inserts,
				'updates' => $updates,
		];
		return $res;
	}
	
	
	/**
	 * INSERT文を作成する
	 * @param string $tbl_name テーブル名
	 * @param array $ent 登録データのエンティティ
	 * @return string INSERT文
	 */
	private function makeInsertSql($tbl_name, &$ent){
		
		$clms_str = '';
		$vals_str = '';
		foreach($ent as $field => $value){
			if($value === null) continue;
			$clms_str .= $field . ',';
			$vals_str .= "'{$value}',";
		}
		
		// 末尾の一文字であるコンマを削る
		$clms_str = mb_substr($clms_str,0,mb_strlen($clms_str)-1);
		$vals_str = mb_substr($vals_str,0,mb_strlen($vals_str)-1);
		
		$insert_sql = "INSERT INTO {$tbl_name} ({$clms_str}) VALUES ({$vals_str});";
		return $insert_sql;
	}
	
	
	/**
	 * UPDATE文を作成する
	 * @param string $tbl_name テーブル名
	 * @param array $ent 登録データのエンティティ
	 * @return string UPDATE文
	 */
	private function makeUpdateSql($tbl_name, &$ent){
		if(empty($ent['id'])) throw new Exception('makeUpdateSql: idが空です。');
		
		$vals_str = '';
		foreach($ent as $field => $value){
			if($value === null) continue;
			$vals_str .= "{$field}='{$value}',";
		}
			
		$vals_str = mb_substr($vals_str,0,mb_strlen($vals_str)-1);// 末尾の一文字であるコンマを削る
		
		$update_sql = "UPDATE {$tbl_name} SET {$vals_str} WHERE id={$ent['id']}";
		
		return $update_sql;
	}

出力

array(2) {
  ["inserts"]=>
  array(2) {
    [0]=>
    string(103) "INSERT INTO tanukis (id,tanuki_name,tanuki_date,kemono_id) VALUES ('','赤ダヌキ','2019-4-9','101');"
    [1]=>
    string(110) "INSERT INTO tanukis (id,tanuki_name,tanuki_date,kemono_id) VALUES ('','ビッグダヌキ','2019-4-11','103');"
  }
  ["updates"]=>
  array(2) {
    [0]=>
    string(98) "UPDATE tanukis SET tanuki_name='アオダヌキ',tanuki_date='2019-4-8',kemono_id='100' WHERE id=2"
    [1]=>
    string(96) "UPDATE tanukis SET tanuki_name='黒ダヌキ',tanuki_date='2019-4-10',kemono_id='102' WHERE id=3"
  }
}


エンティティからINSERT文とUPDATE文を作成する


	/**
	 * INSERT文を作成する
	 * @param string $tbl_name テーブル名
	 * @param array $ent 登録データのエンティティ
	 * @return string INSERT文
	 */
	private function makeInsertSql($tbl_name, &$ent){
		
		$clms_str = '';
		$vals_str = '';
		foreach($ent as $field => $value){
			if($value === null) continue;
			$clms_str .= $field . ',';
			$vals_str .= "'{$value}',";
		}
		
		// 末尾の一文字であるコンマを削る
		$clms_str = mb_substr($clms_str,0,mb_strlen($clms_str)-1);
		$vals_str = mb_substr($vals_str,0,mb_strlen($vals_str)-1);
		
		$insert_sql = "INSERT INTO {$tbl_name} ({$clms_str}) VALUES ({$vals_str});";
		return $insert_sql;
	}
	
	
	/**
	 * UPDATE文を作成する
	 * @param string $tbl_name テーブル名
	 * @param array $ent 登録データのエンティティ
	 * @return string UPDATE文
	 */
	private function makeUpdateSql($tbl_name, &$ent){
		if(empty($ent['id'])) throw new Exception('makeUpdateSql: idが空です。');
		
		$vals_str = '';
		foreach($ent as $field => $value){
			if($value === null) continue;
			$vals_str .= "{$field}='{$value}',";
		}
			
		$vals_str = mb_substr($vals_str,0,mb_strlen($vals_str)-1);// 末尾の一文字であるコンマを削る
		
		$update_sql = "UPDATE {$tbl_name} SET {$vals_str} WHERE id={$ent['id']}";
		
		return $update_sql;
	}
	

ブラウザ判定


	function judgBrowser(){
		
		// ユーザーエージェントを取得、および小文字化する。
		$browser = strtolower($_SERVER['HTTP_USER_AGENT']);
	
		// ユーザーエージェント文字列中のキーワードからブラウザを判定する
		if (strstr($browser , 'edge')) {
			return 'edge';
		} elseif (strstr($browser , 'trident') || strstr($browser , 'msie')) {
			return 'ie';
		} elseif (strstr($browser , 'chrome')) {
			if(strstr($browser , 'opr')){
				return 'opera';
			}else{
				return 'chrome';
			}
		} elseif (strstr($browser , 'firefox')) {
			return 'firefox';
		} elseif (strstr($browser , 'safari')) {
			return 'safari';
		} else {
			return 'none';
		}
	}
	
参考: アクセスされたブラウザ名をPHPで判別する方法


画像サイズ(横幅、縦幅)を取得する


	$sizeInfo = getimagesize('img/imori.jpg');
	$width = $sizeInfo[0];
	$height = $sizeInfo[1];
	

使用メモリを取得 memory_get_usage()

バイト単位で割り当てられている使用メモリを取得する

	$mem1 =  memory_get_usage();
	
	~ 重たい処理 ~
	
	$mem2 =  memory_get_usage() - $mem1;
	echo "使用量→{$mem2}Byte
";

ファイル容量を取得 | filesize()


	$fsize = filesize ($fn);
	

UTF8ファイルのテキストに付いているBOMを除去する

テキストファイルから文字列を読み込んだ時、先頭に謎の文字がくっついており、それがバグを引き起こすことがある。
この謎の文字はBOMと呼ばれるものである。
以下のメソッドは文字列からBOMを除去する。


	/**
	 * UTF8ファイルのテキストに付いているBOMを除去する
	 * @param string $str UTF8ファイルから取得したテキストの文字列
	 * @return string BOMを除去した文字列
	 */
	function deleteBom($str){
		if (($str == NULL) || (mb_strlen($str) == 0)) {
			return $str;
		}
		if (ord($str{0}) == 0xef && ord($str{1}) == 0xbb && ord($str{2}) == 0xbf) {
			$str = substr($str, 3);
		}
		return $str;
	}
	

ログ出力 error_log

error_log('ログテスト\n',3,'b_debug.txt');

ログ出力 | オリジナル


	/**
	 * ログB
	 * @param mixed $val
	 */
	function logB($val){
		if(is_array($val)){
			error_log(print_r($val, true), 3, 'log_b.log');
		}else{
			error_log($val, 3, 'log_b.log');
		}
		error_log("\n", 3, 'log_b.log');
	}
	

入力チェックバリデーション | InputCheckValid


	<?php 
	
	    require_once 'InputCheckValid.php';
	    $icv = new InputCheckValid(); // 入力チェックバリデーション
	    
	    $long_str = "ウナギ(鰻[2]、うなぎ)とは、ウナギ科(Anguillidae) ウナギ属(Anguilla) に属する魚類の総称である。世界中の熱帯から温帯にかけて分布する。ニホンウナギ、オオウナギ、ヨーロッパウナギ、アメリカウナギ(英語版)など世界で19種類(うち食用となるのは4種類)が確認されている";
	    
	    $data = [
	        ['animal_name'=>'タウナギ', 'age'=>4],
	        ['animal_name'=>'オオウナギ', 'age'=>1000],
	        ['animal_name'=>'ドジョウ', 'age'=>-1],
	        ['animal_name'=>'ウツボ', 'age'=>1.2],
	        ['animal_name'=>'ウミヘビ', 'age'=>'a'],
	        ['animal_name'=>$long_str, 'age'=>-1.2],
	        [],
	    ];
	    
	    // バリデーションデータ
	    $validData=[
	        'animal_name'=>['valid_type'=>'string', 'wamei'=>'動物名', 'len'=>4, 'req'=>1],
	        'age'=>['valid_type'=>'int', 'wamei'=>'年齢', 'req'=>0, 'max'=>1000],
	    ];
	    
	    $validData = $icv->normalizeValidData($validData); // バリデーションデータの正規化
	    
	    foreach($data as $ent){
	        $animal_name = '';
	        if(!empty($ent['animal_name'])) $animal_name = $ent['animal_name'];
	        if(mb_strlen($animal_name) > 8){
	            $animal_name = mb_substr($animal_name, 0, 8);
	            $animal_name .= '...';
	        }
	
			$age = '';
	        if(isset($ent['age'])) $age = $ent['age'];
	        $res1 = $icv->validEnt($ent, $validData);
	        echo "<tr>";
	        echo "<td>{$animal_name}</td>";
	        echo "<td>{$age}</td>";
	        echo "<td>{$res1}</td>";
	        echo "</tr>";
	    }
	    
	    function debug($value){
	        echo '<pre>';
	        var_dump($value);
	        echo '</pre>';
	    }
	?>
	

出力

動物名 年齢 エラーメッセージ
タウナギ4
オオウナギ1000「動物名」は4文字以内にしてください。→'オオウナギ'
ドジョウ-1
ウツボ1.2「年齢」は整数にしてください。→1.2
ウミヘビa「年齢」は整数にしてください。→a
ウナギ(鰻[2]...-1.2「動物名」は4文字以内にしてください。→'ウナギ(鰻[2]...' | 「年齢」は整数にしてください。→-1.2
「動物名」は必須入力です。

ディレクトリごとログファイルを作成、また旧ログファイルの除去も行う | LogEx.php

テストコード

	<?php 
	    require_once ('LogEx.php');
	    $logEx = new LogEx();
	    
	    $logEx->write('カタクチイワシ');
	    $logEx->write('カライワシ');
	    
	    $log_text = $logEx->getLogText(); // ログのテキストを取得
	    
	    echo '<pre>';
	    echo $log_text;
	    echo '</pre>';
	    
	?>
	

出力

カタクチイワシ
カライワシ