Archives by date

You are browsing the site archives by date.

【PHP】ファイルのmimeTypeを取得する。

今まではmime_content_type()を使用してたけど、非推奨らしいので推奨メソッドで取得する方法のめも。

function getMimeType($filePath) {
	// ファイルインフォリソースを作成
	$finfo = finfo_open(FILEINFO_MIME_TYPE);
	// mimeTypeを取得
	$mimeType = finfo_file($finfo, $filePath);
	// リソースをクローズ
	finfo_close($finfo);
	// 値を返却する
	return $mimeType;
}

finfo_open()なんて初めて聞いた件。笑

 

【PHP】自分用CSV読み込みメソッド。

基本的にRFC4180準拠のCSVファイル用。文字コードはSJISを想定、区切り文字はカンマ、文字列は必ず「”」で囲うことを前提とする。
※文字列がマルチバイト、かつ「”」で括られていないカラムは場合文字化けするので注意。

function importCsv($filePath) {
	// 返却用の入れ物を用意
	$data = array();
	// ファイルポインタを読み取り専用でオープン
	$fp = fopen($filePath, 'r');
	// ロケールをja_JPにセット(これをしないとマルチバイトを読み込んだ際に文字化けするので注意)
	setlocale(LC_ALL, 'ja_JP');
	// ファイルの先頭から終端まで読み込む
	while(!feof($fp)){
		$line = fgetcsv($fp);
		if($line) {
			// 読み込むと同時に文字コードをSJISから現在の設定値へ変換する
			foreach($line as $k => $v) $line[$k] = mb_convert_encoding($v, mb_internal_encoding(), 'SJIS');
			$data[] = $line;
		}
	}
	// 値を返却する
	return $data;
}

 

【PHP】自分用CSV出力メソッド。

メモ

function exportCsv($fileName, $data, $header = null) {
	// headerがあれば先頭行に追加
	if(!is_null($header)) array_unshift($data, $header);
	// tmpファイルストリームをオープン
	$fp = tmpfile();
	// データの書き込み
	foreach($data as $v) fputcsv($fp, $v, ',', '"');
	// ファイルポインタを先頭へ移動
	rewind($fp);
	// ストリームを文字列に読み込む
	$csv = stream_get_contents($fp);
	// 文字コードをSJISにコンバート(excelで開いた際の文字化け対策)
	$csv = mb_convert_encoding($csv, 'SJIS', mb_internal_encoding());
	// ファイルポインタを閉じる
	fclose($fp);
	// 指定したファイル名の拡張子やパスを取り除く
	$fileName = basename($fileName);
	// ダウンロード用のヘッダーを出力
	header('Content-Disposition:attachment; filename="'.$fileName.'.csv"');
	header('Content-Type:application/octet-stream');
	header('Content-Length:'.strlen($csv));
	echo $csv;
	die();
}

$fileName:保存したいファイル名を指定
$data:CSVファイルに書き込みたいデータを連想配列で指定
$header:先頭行に配置するデータを配列で指定(1行分)

以下渡すデータの例。

// ヘッダー(先頭行)
$header = array(
	'name_1',
	'name_2',
	'name_3',
	'name_4',
	'name_5',
);
// データ部分(基本foreachで回す)
$data[] = array(
	'col_data_1',
	'col_data_2',
	'col_data_3',
	'col_data_4',
	'col_data_5'
);
$data[] = array(
	'col_data_1',
	'col_data_2',
	'col_data_3',
	'col_data_4',
	'col_data_5'
);

 

【Eclipse】ファイル検索後、一致箇所を一括で置換する方法。

「Ctrl + H」でファイルを検索した後に、文字列をまとめて置換したかったので調べてみたら意外と簡単。

1, ファイルサーチで探したい文字列を検索

2, 右側に出てくる検索結果窓(Searchタブ)内で右クリック

3, コンテキストメニューの「Replace All…」を選択

ec

4, 「Replace:」の欄に置換対象文字列がセットされているので確認した後、「With:」の欄に置換文字列を入力し「OK」を押す

ec2

5, 全ファイルまとめて一括で置換される

以上で完了。超便利。