14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ファイル操作関連と注意事項、用語の説明

Last updated at Posted at 2014-03-06

ファイル操作をする前に、このページをチェック!というものが欲しかったので、書いてみました。

PHP関数を使ったファイル操作における注意事項

readdirについては、ファイルを再帰的に処理する場合に...を除外する必要がないか確認する必要があります。例えば、ディレクトリを丸ごと削除するような場合に、より深い階層を削除しているつもりが..を使って親ディレクトリへ制御が移ってゆき、場合によってはPHPファイルが自滅する場合もあります。。。
※追記:コメント頂いたようなクラス(SPL)を使った方法ではこの点をより安全に処理できるようです。

関数名 用途 注意点
readdir エントリの取得 opendir()後に使用。ファイル名の他に.(カレントディレクトリ), ..(親ディレクトリ)も返す
scandir エントリ一覧の取得 ディレクトリを指定して使用。ファイル名の他に.(カレントディレクトリ), ..(親ディレクトリ)も返す
rmdir ディレクトリ削除 削除対象のディレクトリが空である必要がある
glob パスの検索 パターンにマッチするパス名を検索

他にも扱うファイルの名前が日本語の場合、上手く行かないことがあり、注意が必要との助言を頂きました。

使いやすいファイル操作関連関数

関数名 用途
is_dir パスがディレクトリであるかどうか調べる
is_file パスがファイルかどうか調べる
file_exists パスに ファイルかディレクトリ が存在するか調べる
unlink ファイル削除
copy ファイルコピー
rename ファイルの移動
basename ファイルパスを渡した場合、ファイル名を返す
dirname ファイルパスを渡した場合、ディレクトリのパスを返す
chmod アクセス権限の変更(Unixシステム向け?)
コメント頂いているように、 クラスを使った方法 も良いみたいです!

PHPマニュアルの気をつけたい用語

用語 意味
エントリ ファイルやディレクトリーなどを総称してentry(エントリ)と言うらしい
$filename PHPマニュアルで$filenameと書かれている場合、ディレクトリも対象だったりする
file ファイルとディレクトリを総称してfileと呼ぶ事がある

PHPで使われる言葉はUNIXに関連しているというのがヒントだと思います。

関数の使用例(サンプルコード)

別記事にすべきかもしれませんが、量がないのでひとまずここに記載しておきます。

<?php

/**
 * ディレクトリの中身が空か判定
 *
 * @param string $dir_path ディレクトリまでのパス
 * @return bool ディレクトリが空の場合、true
 */
function isEmptyDir($dir_path) {
    return (count(glob($dir_path . "/*")) == 0);
}

クラスを使ってファイルの一覧を取得する (2015/05/19追記)

特定ディレクトリ以下のファイルのパス一覧を表示する

$iteratorIterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("path/to/directory"));

foreach ($iteratorIterator as $pathName => $file) {
    var_dump($file);
    echo "{$pathName}\n\n";
}

特定ディレクトリ以下のjpgファイルのパス一覧を表示する

$iteratorIterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("path/to/directory"));
$objects = new RegexIterator($iteratorIterator, '/^.+\.jpg$/i', RecursiveRegexIterator::ALL_MATCHES);

foreach ($objects as $pathName => $cur) {
    var_dump($cur);
    echo "{$pathName}\n\n";
}

この記事は今後も更新していこうと思います。

14
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?