【PHP】これで分かる関数! – ディレクトリ操作その2 –

PHP

更新履歴

更新日更新者更新内容
2021/8/24JJI・サンプルプログラムの実行結果に画面の画像を追加

はじめに

この記事で載せているサンプルプログラムは次の記事で紹介する関数を使用している場合があります。

ディレクトリのコピー

PHPにはディレクトリのコピー関数は存在しないため、OSコマンドを使用します。
OSコマンドを使用したサンプルプログラムは次の通りです。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // 共通ライブラリの読み込み
    require_once __DIR__ . "../../../lib/sample_common.php";

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】ディレクトリのコピー<br>\n";

    // ディレクトリのコピー
    $dirname = "data/work/dir3";
    $dirname2 = "data/work/copy_dir3";
    echo "ディレクトリのコピー コピー元:${dirname}: コピー先:${dirname2}:<br>\n";

    echo "コピー元:${dirname}の表示<br>\n";
    if(substr(PHP_OS,0, 3) === "WIN") {
        $cmd = "dir /B /S " . conv_path($dirname);
        exec_win_cmd($cmd, true);
    }
    echo "<br>\n";

    // コピー先のディレクトリが存在しない場合、作成する
    if(! is_dir($dirname2)) {
        $ret = @mkdir($dirname2);
        if(! $ret) {
            echo "コピー先ディレクトリ:${dirname2}:の作成に失敗しました。\n";
            return ;
        }
    }

    // コピーの実行、PHPにサブフォルダを含めたコピー関数はないため、OSのコマンドを使用する
    if(substr(PHP_OS,0, 3) === "WIN") {
        // Windowsの場合、xcopyコマンドを使用する
        $cmd = "xcopy " . conv_path($dirname) . " " . conv_path($dirname2). " /E /Y";
        // コマンドの実行
        $ret = exec_win_cmd($cmd, true);
        if($ret !== 0) {
            echo "ディレクトリのコピーに失敗しました。<br>\n";
        }
    }
    echo "<br>\n";

    echo "コピー先:${dirname2}の表示<br>\n";
    if(substr(PHP_OS,0, 3) === "WIN") {
        $cmd = "dir /B /S " . conv_path($dirname2);
        exec_win_cmd($cmd, true);
    }
    echo "<br>\n";
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_08_23.php<br>
【PHP】ディレクトリのコピー<br>
ディレクトリのコピー コピー元:data/work/dir3: コピー先:data/work/copy_dir3:<br>
コピー元:data/work/dir3の表示<br>
dir /B /S data\work\dir3<br>
[0] C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_3\data\work\dir3\sub31<br>
[1] C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_3\data\work\dir3\sub32<br>
[2] C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_3\data\work\dir3\sub32\sample01.txt<br>
[3] C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_3\data\work\dir3\sub32\subsub3201<br>
[4] C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_3\data\work\dir3\sub32\subsub3202<br>
[5] C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_3\data\work\dir3\sub32\subsub3201\sample02.txt<br>
<br>
xcopy data\work\dir3 data\work\copy_dir3 /E /Y<br>
[0] data\work\dir3\sub32\sample01.txt<br>
[1] data\work\dir3\sub32\subsub3201\sample02.txt<br>
[2] 2 個のファイルをコピーしました<br>
<br>
コピー先:data/work/copy_dir3の表示<br>
dir /B /S data\work\copy_dir3<br>
[0] C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_3\data\work\copy_dir3\sub31<br>
[1] C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_3\data\work\copy_dir3\sub32<br>
[2] C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_3\data\work\copy_dir3\sub32\sample01.txt<br>
[3] C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_3\data\work\copy_dir3\sub32\subsub3201<br>
[4] C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_3\data\work\copy_dir3\sub32\subsub3202<br>
[5] C:\private\repo\app\php-git\php-sample\htdocs\sample2\sample2_8_3\data\work\copy_dir3\sub32\subsub3201\sample02.txt<br>
<br>

コメント