$fp = 'C:\Users\k-uehara\Downloads\ebi\日本語テスト';
$data = scandirEx($fp,"\\");
var_dump($data);
/**
* 指定ディレクトリ内のファイル詳細情報を取得する
*
* @note
* PHP 5.6 に対応している。
* 日本語ディレクトリ、ファイル名に対応している。
* ファイル名、フルパス、拡張子、ファイル更新日時、ディレクトリ判定フラグ、画像判定フラグを取得する。
*
* @date 2016-8-31
* @version 1.0
*
* @param string $dir ディレクトリのフルパスまたはURL
* @param string $sep フルパスまたはURLの区分。スラッシュまたはバックスラッシュを指定する。
* @return ファイルデータ
*/
function scandirEx($dir,$sep='/'){
// ディレクトリが存在するか判定する(日本語フォルダに対応)
$dir2=mb_convert_encoding($dir,'SJIS','UTF-8');
if (!is_dir($dir2)){
return [];
}
// ディレクトリからファイル一覧を取得する
$files = scandir($dir2);
// 画像拡張子リスト
$imgExts = array('png','gif','jpg','jpeg','bpg','tiff','bmp','svg');
// ファイル一覧をループする
$data = [];
foreach($files as $proto_fn){
// 「.」,「..」は取得対象外なので無視する。
if($proto_fn=='.' || $proto_fn=='..'){
continue;
}
// 日本語ファイルに対応する
$fn = mb_convert_encoding($proto_fn, 'UTF-8', 'SJIS');
// ファイル名
$ent['file_name'] = $fn;
// フルパス
$fp = $dir.$sep.$fn;
$ent['fp'] = $fp;
// 拡張子
$path_param = pathinfo($fn);
$ext = null;
if(!empty($path_param['extension'])){
$ext = $path_param['extension'];
}
$ent['ext'] = $ext;
// ディレクトリフラグ false:ファイル , true:ディレクトリ
$fp2 = mb_convert_encoding($fp, 'SJIS', 'UTF-8');
$ent['dir_flg'] = is_dir($fp2);
// 更新日時
$ent['update_dt'] = date("Y-m-d H:i:s", filemtime($dir2.$sep.$proto_fn));
// 画像フラグ
$img_flg = false;
if(!empty($ext)){
$ext2 = mb_strtolower($ext);
if (in_array($ext2,$imgExts)){
$img_flg = true;
}
}
$ent['img_flg'] = $img_flg;
$data[] = $ent;
}
return $data;
}
array (size=5) 0 => array (size=6) 'file_name' => string 'test1.jpg' (length=9) 'fp' => string 'C:\Users\k-uehara\Downloads\ebi\日本語テスト\test1.jpg' (length=60) 'ext' => string 'jpg' (length=3) 'dir_flg' => boolean false 'update_dt' => string '2016-05-16 11:41:55' (length=19) 'img_flg' => boolean true 1 => array (size=6) 'file_name' => string 'test3.jpg' (length=9) 'fp' => string 'C:\Users\k-uehara\Downloads\ebi\日本語テスト\test3.jpg' (length=60) 'ext' => string 'jpg' (length=3) 'dir_flg' => boolean false 'update_dt' => string '2016-05-16 12:19:43' (length=19) 'img_flg' => boolean true 2 => array (size=6) 'file_name' => string 'たぬき' (length=9) 'fp' => string 'C:\Users\k-uehara\Downloads\ebi\日本語テスト\たぬき' (length=60) 'ext' => null 'dir_flg' => boolean false 'update_dt' => string '2016-08-31 12:40:59' (length=19) 'img_flg' => boolean false 3 => array (size=6) 'file_name' => string '新規 テキスト ドキュメント.txt' (length=42) 'fp' => string 'C:\Users\k-uehara\Downloads\ebi\日本語テスト\新規 テキスト ドキュメント.txt' (length=93) 'ext' => string 'txt' (length=3) 'dir_flg' => boolean false 'update_dt' => string '2016-08-31 12:48:10' (length=19) 'img_flg' => boolean false 4 => array (size=6) 'file_name' => string '日本語.png' (length=13) 'fp' => string 'C:\Users\k-uehara\Downloads\ebi\日本語テスト\日本語.png' (length=64) 'ext' => string 'png' (length=3) 'dir_flg' => boolean false 'update_dt' => string '2016-08-31 10:40:26' (length=19) 'img_flg' => boolean true
$data = [
['id'=>1, 'field'=>'neko', 'wamei'=>'猫'],
['id'=>2, 'field'=>'yagi', 'wamei'=>'山羊'],
['id'=>3, 'field'=>'same', 'wamei'=>'鮫'],
['id'=>4, 'field'=>'wasi', 'wamei'=>'鷲'],
['id'=>5, 'field'=>'goki', 'wamei'=>'御器'],
];
$csvDl = new CsvDownloader();
$csvDl->output('demo.csv', $data);
/**
* CSVダウンロード
*
* @version 2.0 Excel2019,2016で文字化けするようになった。対応策をコメントに記載。
* @date 2014-5-12 | 2019-4-11新規作成
* @author k-uehara
*
*/
class CsvDownloader{
/**
* データをCSVファイルとしてダウンロードする。(UTF-8)
*
* @param string $csv_file CSVファイル名
* @param array $data データ エンティティ配列型
* @param bool $bom_flg BOMフラグ 0:BOMなし(デフォ), 1:BOM有
*/
public function output($csv_file, $data, $bom_flg=0){
$buf = "";
// BOM付きutf-8のファイルである場合
if(!empty($bom_flg)){
$buf = "¥xEF¥xBB¥xBF";
}
// CSVデータの作成
if(!empty($data)){
$i=0;
foreach($data as $ent){
foreach($ent as $v){
$cell[$i][] = $v;
}
$buf .= implode(",",$cell[$i])."¥n";
$i++;
}
}
// CSVファイルのヘッダーを書き出す
header ("Content-disposition: attachment; filename=" . $csv_file);
header ("Content-type: application/octet-stream; name=" . $csv_file);
print($buf); // CSVデータの書き出し
}
/**
* データをCSVファイルとしてダウンロードする。(Shift-jis版) ※非推奨メソッド
*
* @note
* 旧Excelに対応。Excel2019,2016では文字化けする。
*
* ▼Excel2019,2016でCSVを開く場合
* メモ帳でCSVを開く → 「名前を付けて保存」 → 保存したCSVをExcelで開くと文字化けが治っている。
* ただutf-8のCSVでも同様なことができるので、わざわざ当メソッドを使うまでもない。なので当メソッドは非推奨とする。
*
* @param string $csv_file CSVファイル名
* @param array $data データ エンティティ配列型
*/
public function outputForExcel($csv_file, $data){
$buf = "";
// CSVデータの作成
if(!empty($data)){
$i=0;
foreach($data as $ent){
foreach($ent as $v){
$cell[$i][] = $v;
}
$buf .= implode(",",$cell[$i]) . "¥r¥n";
$i++;
}
}
// CSVファイルのヘッダーを書き出す
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename={$csv_file}");
print(mb_convert_encoding($buf,"SJIS", "UTF-8")); // Shift-JISに変換してからCSVデータの書き出し
}
}
旧式
$lineList = array('TEST','日本語2');
$txt_file = "text.xml";
download($txt_file,$lineList);
/**
* 行リストをテキストファイルに書き出し、ダウンロードする
*
* @param $txt_file テキストファイル名
* @param $lineList 行リスト
* @param $utf8_flg UTF-8フラグ
*/
function download($txt_file,$lineList,$utf8_flg=false){
$buf="";// バッファ
// Shift-jisでダウンロードする
if(empty($utf8_flg)){
foreach($lineList as $line){
$buf .= mb_convert_encoding($line."¥r¥n", "SJIS-win", "UTF-8");
}
}
else{
$buf = "¥xEF¥xBB¥xBF"; // utf-8形式のファイルにするため、BOMをセットする。
foreach($lineList as $line){
$buf .= $line."¥r¥n";
}
}
header ("Content-disposition: attachment; filename=" . $txt_file);
header ("Content-type: application/octet-stream; name={$txt_file}; charset=utf-8");
print($buf);
}
PHP8.2の変更点
PHP8.2からは、php.iniにて「extension=zip」を有効する必要があります。
$zip = new ZipArchive();
$res = $zip->open('xxx.zip'); // zipファイルを指定
if($res === true){
$zip->extractTo('tmp');// 出力先パスを指定
$zip->close();
echo '解凍しました。';
} else {
echo '解凍失敗:' . $res;
}
$zip = new ZipArchive();
// ZIPファイルをオープン
$res = $zip->open('xxx2.zip', ZipArchive::CREATE);
// zipファイルのオープンに成功した場合
if ($res === true) {
// 圧縮するファイルを指定する
$zip->addFile('tmp/xxx/icon_kabuto.jpg');
$zip->addFile('tmp/xxx/icon_tilapia.jpg');
// 閉じる
$zip->close();
echo '圧縮しました<br>';
}
$zip->addFile('tmp/xxx/icon_kabuto.jpg','icon_kabuto.jpg');
$zip->addFile('tmp/xxx/icon_tilapia.jpg','icon_tilapia.jpg');
PHP
<?php
$orig_pfn = "orig/imori.png";
$thum_pfn = "thum/imori.png";
// オリジナル画像の幅を取得する
list($orig_width, $orig_height) = getimagesize($orig_pfn);
// オリジナル画像のresourceオブジェクトを取得
$origImg = imagecreatefrompng($orig_pfn);
// サムネイル画像のresourceオブジェクトを取得
$thumImg = imagecreatetruecolor(80, 60);
// サムネイル画像を作成
imagecopyresized($thumImg, $origImg, 0, 0, 0, 0,
80, 60,
$orig_width, $orig_height);
// サムネイル画像を出力
imagepng($thumImg,$thum_pfn);
// resourceオブジェクトを破棄する
imagedestroy($origImg);
imagedestroy($thumImg);
echo "<img src='{$thum_pfn}' /><br>";
?>
PHP
<?php
$orig_pfn = "orig/test1.jpg";
$thum_pfn = "thum/test1.jpg";
// オリジナル画像の幅を取得する
list($orig_width, $orig_height) = getimagesize($orig_pfn);
// オリジナル画像のresourceオブジェクトを取得
$origImg = imagecreatefromjpeg($orig_pfn);
// サムネイル画像のresourceオブジェクトを取得
$thumImg = imagecreatetruecolor(80, 60);
// サムネイル画像を作成
imagecopyresized($thumImg, $origImg, 0, 0, 0, 0,
80, 60,
$orig_width, $orig_height);
// サムネイル画像を出力
imagejpeg($thumImg,$thum_pfn);
// resourceオブジェクトを破棄する
imagedestroy($origImg);
imagedestroy($thumImg);
echo "<img src='{$thum_pfn}' /><br>";
?>
PHP
<?php
$orig_pfn = "orig/batta.gif";
$thum_pfn = "thum/batta.gif";
// オリジナル画像の幅を取得する
list($orig_width, $orig_height) = getimagesize($orig_pfn);
// オリジナル画像のresourceオブジェクトを取得
$origImg = imagecreatefromgif($orig_pfn);
// サムネイル画像のresourceオブジェクトを取得
$thumImg = imagecreatetruecolor(80, 60);
// サムネイル画像を作成
imagecopyresized($thumImg, $origImg, 0, 0, 0, 0,
80, 60,
$orig_width, $orig_height);
// サムネイル画像を出力
imagegif($thumImg,$thum_pfn);
// resourceオブジェクトを破棄する
imagedestroy($origImg);
imagedestroy($thumImg);
echo "<img src='{$thum_pfn}' /><br>";
?>
PHP
<?php
/**
* サムネイル作成の拡張クラス
*
* @note
* 画像ファイルからサムネイル画像を作成する。
*
* png,jpeg,gifに対応している。
* MIMEタイプではなく、拡張子からファイルを分類している。(MIMEタイプではバグが発生する)
*
* @date 2016-11-1
* @version 1.0
* @author k-uehara
*
*/
class ThumbnailEx{
/**
* 画像ファイルからサムネイル画像を作成する
* @param string $orig_pfn オリジナル画像のファイル名
* @param string $thum_pfn サムネイル画像のファイル名
* @param int $thum_width サムネイル画像の横幅
* @param int $thum_height サムネイル画像の縦幅
*/
public function createThumbnail($orig_pfn,$thum_pfn,$thum_width,$thum_height){
// 拡張子を取得する
$info = pathinfo($orig_pfn);
$ext = $info["extension"];
$ext = mb_strtolower($ext);
// オリジナル画像の幅を取得する
list($orig_width, $orig_height) = getimagesize($orig_pfn);
// オリジナル画像のresourceオブジェクトを取得
$origImg=null;
if($ext == 'png'){
$origImg = imagecreatefrompng($orig_pfn);
}elseif($ext == 'gif'){
$origImg = imagecreatefromgif($orig_pfn);
}else{
$origImg = imagecreatefromjpeg($orig_pfn);
}
// サムネイル画像のresourceオブジェクトを取得
$thumImg = imagecreatetruecolor($thum_width, $thum_height);
// サムネイル画像を作成
imagecopyresized($thumImg, $origImg, 0, 0, 0, 0,
$thum_width, $thum_height,
$orig_width, $orig_height);
// サムネイル画像を出力
if($ext == 'png'){
imagepng($thumImg,$thum_pfn);
}elseif($ext == 'gif'){
imagegif($thumImg,$thum_pfn);
}else{
imagejpeg($thumImg,$thum_pfn);
}
// resourceオブジェクトを破棄する
imagedestroy($origImg);
imagedestroy($thumImg);
}
}
/**
* シンプルなSELECT要素を作成
* @param string $name SELECTのname属性
* @param primitive $value 初期値
* @param array $list 選択肢
* @param array $option オプション 要素の属性情報
* @param array $empty 未選択状態に表示する選択肢名。nullをセットすると未選択項目は表示しない
*
*/
public function select($name,$value,$list,$option=null,$empty=null){
// オプションから各種属性文字を作成する。
$optionStr = "";
foreach($option as $attr_name => $v){
$str = $attr_name.'="'.$v.'" ';
$optionStr.= $str;
}
$def_op_name = '';
echo "<select name='{$name}' {$optionStr} >¥n";
if($empty!==null){
$selected = '';
if($value===null){
$selected='selected';
}
echo "<option {$selected}>{$empty}</option>¥n";
}
foreach($list as $v=>$n){
$selected = '';
if($value===$v){
$selected='selected';
}
echo "<option value='{$v}' {$selected}>{$n}</option>¥n";
}
echo "</select>¥n";
}
<?php
$a = 4;
output($a);
settype($a,'string');
output($a);
settype($a,'bool');
output($a);
settype($a,'int');
output($a);
settype($a,'double');
output($a);
function output($a){
echo $a;
echo '<br>';
echo gettype($a);
echo '<br>';
echo '-----<br>';
}
?>
4 integer ----- 4 string ----- 1 boolean ----- 1 integer ----- 1 double -----
<?php
$ary = array(0,1,2,3,4);
settype($ary[1],'string');
settype($ary[2],'bool');
settype($ary[3],'int');
settype($ary[4],'double');
output($ary);
function output($ary){
foreach ($ary as $i=>$v){
echo $i . '→' . $v . '→'. gettype($v);
echo '<br>';
echo '-----<br>';
}
}
?>
0→0→integer ----- 1→1→string ----- 2→1→boolean ----- 3→3→integer ----- 4→4→double -----