現在の言語: 日本語

戻る

リネームしたファイルを指定の場所にコピーする処理
ファイル関連

ファイルを一定のルールによってコピーするサンプルです。
ファイル名に規則がある場合、そのファイル名を基準に
(1) ファイル名の変更をしてファイルを指定の場所にコピー
(2) ファイル名から一定の情報を取得
していています。

[サンプル]

copy

$input_dir = '../img/';   
$output_dir = '../img/out/'; 
copyFileIdRule($input_dir, $output_dir);

//nocopy:コピーの有無
//0:コピーしない
//1:コピーする
function copyFileIdRule(string $input_dir, string $output_dir, $nocopy=0)
{
    $filename="";//取得したファイル名
    $fileId="";//ファイルID
    $ext="";//拡張子
    $tmp1="";
    $tmp2="";
    $ary=[];
    $no=[];
    $list=[];

    // 保存先フォルダがなければ作成する
    if (!is_dir($output_dir))
    {
        mkdir($output_dir, 0755, true);
    }

    //xxx_001_name1.png
    //拡張子とそれ以外に分ける
    //_でsplitする
    //最初に2個をファイル名にして_で結合する
    //残りの文字列(2個目の_から.までの文字列)を分離して変数にして後で出力する
    $files = scandir($input_dir);
    $index = 0;
    foreach($files as $file)
    {
        //  . : カレントディレクトリ
        // .. : 親ディレクトリ
        if($file === "." || $file === "..") continue;

        //フォルダは対象外としています
        if(is_dir($input_dir . $file)) continue;

        //macのケース
        if($file === ".DS_Store") continue;

        $index++;
        $filename = $file;
        $ary = explode("_", $file);
        $info=pathinfo($filename);
        $filename=$info["filename"];//ファイルID
        $ext=$info['extension'];//拡張子
        //最後のアンダースコアで分割します
        //ex.)
        //$filename:
        //aaa_bbb_xxx
        $lastPos = strrpos($filename, "_");
        $tmp1 = substr($filename, 0, $lastPos); // "aaa_bbb"
        $tmp2 = substr($filename, $lastPos + 1); // "xxx"
        $fileId = $tmp1 . "." . $ext; // "aaa_bbb.png"
        $no[]=(string)$ary[1];
        $list[]=$tmp2;
        if($nocopy==1)
        {
            //ファイル存在チェックをしていないため
            //上書きになります
            if(copy($input_dir . $file, $output_dir . $fileId))
            {
                //コピーに成功しました
            }
            else
            {
                echo "copy fail i:$index filename:$file<br>";
            }
        }
    }
    //ファイル管理番号を表示
    $count = count($no);
    for($i=0;$i < $count;++$i)
    {
        echo $no[$i]."<br>";
    }
	echo "<hr>";
    //リストを表示
    $count = count($list);
    for($i=0;$i < $count;++$i)
    {
        echo $list[$i]."<br>";
    }
}
copy
$input_dir = '../img/';
$output_dir = '../img/out/';
copyFileIdRule($input_dir, $output_dir);

//nocopy: Copy
//0: Do not copy
//1: Copy
function copyFileIdRule(string $input_dir, string $output_dir, $nocopy=0)
{
	$filename=""; // Retrieved file name
	$fileId=""; // File ID
	$ext=""; // Extension
	$tmp1="";
	$tmp2="";
	$ary=[];
	$no=[];
	$list=[];
	
	// Create the destination folder if it does not exist
	if (!is_dir($output_dir))
	{
		mkdir($output_dir, 0755, true);
	}
	
	/xxx_001_name1.png
	// Separate the file name from the extension
	// Split with _
	// First, make the two strings into file names and join them with _
	// Separate the remaining string (the string from the second _ to .) and save it as a variable to output later.
	$files = scandir($input_dir);
	$index = 0;
	foreach($files as $file)
	{
		// . : Current directory
		// .. : Parent directory
		if($file === "." || $file === "..") continue;
		
		// Folders are not included.
		if(is_dir($input_dir . $file)) continue;
		
		// Mac case
		if($file === ".DS_Store") continue;
		
		$index++;
		$filename = $file;
		$ary = explode("_", $file);
		$info=pathinfo($filename);
		$filename=$info["filename"]; // File ID
		$ext=$info['extension']; // Extension
		// Split at the last underscore
		//Example)
		//$filename:
		//aaa_bbb_xxx
		$lastPos = strrpos($filename, "_");
		$tmp1 = substr($filename, 0, $lastPos); // "aaa_bbb"
		$tmp2 = substr($filename, $lastPos + 1); // "xxx"
		$fileId = $tmp1 . "." . $ext; // "aaa_bbb.png"
		$no[]=(string)$ary[1];
		$list[]=$tmp2;
		if($nocopy==1)
		{
			//File existence check not performed
			//Overwritten
			if(copy($input_dir . $file, $output_dir . $fileId))
			{
				//Copy successful
			}
			else
			{
				echo "copy fail i:$index filename:$file<br>";
			}
		}
	}
	// Display the file control number
	$count = count($no);
	for($i=0;$i < $count;++$i)
	{
		echo $no[$i]."<br>";
	}
	echo "<hr>";
	// Display the list
	$count = count($list);
	for($i=0;$i < $count;++$i)
	{
		echo $list[$i]."<br>";
	}
}
今回のファイル名の規則
xxx_001_name1.png
このファイル名の命名規則から
(1)xxx_001
(2)name1
(3)png
のように_(アンダースコア)で区切るとします。
その場合、(1)と(2)は最後の_で分割することで分離させます。
最初にファイルIDと拡張に分割します。
pathinfo() にファイルパスを渡すと、ファイル名(拡張子なし)や拡張子を連想配列で返してくれます。
$info=pathinfo($filename);
$filename=$info["filename"];//ファイルID
$ext=$info['extension'];//拡張子
次に最後のアンダースコアで分割します
$lastPos = strrpos($filename, "_");//最後の位置を取得します
$tmp1 = substr($filename, 0, $lastPos); // xxx_001
$tmp2 = substr($filename, $lastPos + 1); // name1

ファイル名の中に連番があります。
番号を下記のように抽出して配列に格納します。
$ary = explode("_", $file);
...
$no[]=(string)$ary[1];
そして、結果を番号の一覧として表示しています。
//ファイル管理番号を表示
$count = count($no);
for($i=0;$i<$count;++$i)
{
  echo $no[$i]."<br>";
}
また、nameの一覧も表示しています。
$list[]=$tmp2;
...
//リストを表示
$count = count($list);
for($i=0;$i<$count;++$i)
{
  echo $list[$i]."<br>";
}



戻る

著作権情報
ホームページおよびアプリ等に掲載されている情報等については、いかなる保障もいたしません。
ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、
または公開したりすることはできません。
当方は、ホームページおよびアプリ等を利用したいかなる理由によっての障害等が発生しても、
その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について
一切の責任を負わないものとします。