ディレクトリを操作する
scandirとmkdirを使ってディレクトリの一覧表示、作成、削除を行います
「ディレクトリを操作する」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。
PHPでのディレクトリ操作
PHP には、サーバー上のディレクトリを一覧表示、作成、移動、削除するための関数があります。
scandir()— ディレクトリの内容を一覧表示するmkdir()— ディレクトリを作成するrmdir()— 空のディレクトリを削除するglob()— パターンに一致するファイルを検索する
scandir()
ディレクトリ内のすべてのファイルとディレクトリを一覧表示します。
<?php
$entries = scandir('/var/www/html/uploads');
// scandir includes '.' and '..'
$entries = array_diff($entries, ['.', '..']);
foreach ($entries as $entry) {
echo $entry . PHP_EOL;
}glob() によるパターンマッチング
glob() はシェル形式のパターンに一致するファイルを返します。
<?php
// Find all PHP files in a directory
$phpFiles = glob('/var/www/html/*.php');
// Recursively with GLOB_BRACE
$logs = glob('/var/log/{app,error,access}.log', GLOB_BRACE);
foreach ($phpFiles as $file) {
echo basename($file) . PHP_EOL;
}mkdir() と権限
1 つまたは複数の入れ子になったディレクトリを作成します。
<?php
$dir = '/var/www/uploads/2024/05';
// Create nested directories in one call:
if (!is_dir($dir)) {
mkdir($dir, 0755, true); // true = recursive
echo "Created: $dir";
}ディレクトリの削除
rmdir() で削除できるのは空のディレクトリだけです。内容を含めて削除するには、再帰関数を使用します。
<?php
function deleteDir(string $path): void {
foreach (scandir($path) as $entry) {
if ($entry === '.' || $entry === '..') continue;
$full = $path . DIRECTORY_SEPARATOR . $entry;
is_dir($full) ? deleteDir($full) : unlink($full);
}
rmdir($path);
}
deleteDir('/tmp/old_cache');DirectoryIterator によるディレクトリの反復処理
ディレクトリの内容を反復処理するオブジェクト指向の方法です。
<?php
$dir = new DirectoryIterator('/var/www/html/images');
foreach ($dir as $info) {
if ($info->isDot()) continue;
echo $info->getFilename();
echo ' (' . $info->getSize() . ' bytes)';
echo PHP_EOL;
}RecursiveDirectoryIterator
ディレクトリツリー内のすべてのファイルを再帰的に反復処理します。
<?php
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/var/www/src')
);
foreach ($iterator as $file) {
if ($file->isDot()) continue;
if ($file->getExtension() === 'php') {
echo $file->getPathname() . PHP_EOL;
}
}getcwd と chdir
現在の作業ディレクトリを取得および変更します。
<?php
$originalDir = getcwd();
echo 'Current: ' . $originalDir . PHP_EOL;
chdir('/var/www/html');
echo 'Changed to: ' . getcwd() . PHP_EOL;
// Restore
chdir($originalDir);
echo 'Restored: ' . getcwd() . PHP_EOL;パスの操作
移植性のある定数と関数を使って、ファイルパスを構築および解析します。
<?php
// DIRECTORY_SEPARATOR = '/' on Unix, '\\' on Windows
$base = '/var/www/app';
$subPath = 'uploads' . DIRECTORY_SEPARATOR . 'images';
$full = $base . DIRECTORY_SEPARATOR . $subPath;
echo realpath($full); // resolves symlinks
// __DIR__ is the directory of the current file
$configPath = __DIR__ . '/../config/settings.json';
echo realpath($configPath);ディスク容量
使用可能なディスク容量と合計ディスク容量を確認します。
<?php
$path = '/var/www';
$free = disk_free_space($path);
$total = disk_total_space($path);
$used = $total - $free;
echo 'Used: ' . round($used / 1024**3, 2) . ' GB';
echo 'Free: ' . round($free / 1024**3, 2) . ' GB';
echo 'Total: ' . round($total / 1024**3, 2) . ' GB';SPL一時ディレクトリ
プラットフォーム間で正しい一時ディレクトリを見つけるには、必ず sys_get_temp_dir() を使用します。
<?php
$tmpDir = sys_get_temp_dir();
echo 'Temp dir: ' . $tmpDir;
// Create a unique temporary directory
$uniqueDir = $tmpDir . DIRECTORY_SEPARATOR . 'myapp_' . uniqid();
mkdir($uniqueDir, 0700);
// ... use directory ...
// cleanup when done確認問題
1 回の呼び出しで入れ子になったディレクトリを再帰的に作成する PHP 関数はどれですか。
まとめ: ディレクトリの操作
ディレクトリ操作:
scandir()— 内容を一覧表示する(. と .. を含む)glob()— パターンでファイルを検索するmkdir($path, 0755, true)— 再帰的に作成するrmdir()— 空のディレクトリを削除する- RecursiveDirectoryIterator — 深い階層を走査する
- 移植性のあるパスには
__DIR__とDIRECTORY_SEPARATORを使用する
よくある質問
「ディレクトリを操作する」レッスンは無料ですか?
はい。「ディレクトリを操作する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。
「ディレクトリを操作する」で何を学びますか?
scandirとmkdirを使ってディレクトリの一覧表示、作成、削除を行います ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「ディレクトリを操作する」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- PHPでファイルを読み込む
- ファイルへの書き込みと追記
- ディレクトリを操作する
- ファイルアップロードの処理