ファイルを削除する/フォルダを削除する

ファイルを削除する

<?php
/* ================================
 * fileDelete
 *
 * @create  2009/06/09
 * @author  pentan
 * @url     http://pentan.info/
 *
 * Copyright (c) 2009 pentan.info All Rights Reserved.
 * 著作権表示部分の変更削除は禁止です
 * ================================
 */

function fileDelete($target){
// ファイルが存在する場合
  if (file_exists($target)) {
    if (is_dir($target)) {
      echo "指定されたファイルはフォルダです。";
      exit;
    }

    if (!is_writable($target)) {
      echo "ファイルの書き込み権限がありません。";
      exit;
    }

// シンボリックリンクであれば元のファイルを削除する
    if (is_link($target)) {
      fileDelete(realpath($target));
    }

    if (!@unlink($target)) {
      echo "ファイルの削除に失敗しました。";
      exit;
    }
  }

  return true;
}

// 対象のファイル
$target="test.txt";

fileDelete($target);
?>

フォルダを削除する

<?php
/* ================================
 * dirCanDelete
 * dirDelete
 *
 * @create  2009/06/09
 * @author  pentan
 * @url     http://pentan.info/
 * ================================
 */

// ディレクトリが削除可能かどうか調べる
function dirCanDelete($target){
  $target = preg_replace("/".preg_quote(DIRECTORY_SEPARATOR,"/")."$/","",$target);

// ファイルのステータスのキャッシュをクリアする
  clearstatcache();

// ファイルが存在する場合
  if (file_exists($target)) {
    if (!is_writable($target)) {
      echo "フォルダの書き込み権限がありません。";
      exit;
    }

// ディレクトリハンドルを開く
    if (!($dh = @opendir($target_dir))) {
      echo "フォルダ情報の取得に失敗しました。";
      exit;
    }

// ディレクトリ内のファイル名を1つづつ取得
    while ($file = readdir($dh)) {
      if ($file == "." || $file == "..") continue;

      $t = $target . DIRECTORY_SEPARATOR . $file;
      if(is_dir($t)){
// 下階層のディレクトリをチェックする
        dirCanDelete($t);
      }else{
        if (!is_writable($target)) {
          echo "ファイルの書き込み権限がありません。";
          exit;
        }
      }
    }
// ディレクトリハンドルを閉じる
    closedir($dh);
  }

  return true;
}

// ディレクトリを削除する
function dirDelete($target){
  $target = preg_replace("/".preg_quote(DIRECTORY_SEPARATOR,"$/")."/","",$target);

// ファイルのステータスのキャッシュをクリアする
  clearstatcache();

// ファイルが存在する場合
  if (file_exists($target)) {

// ディレクトリハンドルを開く
    if (!($dh = @opendir($target))) {
      echo "フォルダ情報の取得に失敗しました。";
      exit;
    }

// ディレクトリ内のファイル名を1つづつ取得
    while ($file = readdir($dh)) {
      if ($file == "." || $file == "..") continue;

      $t = $target . DIRECTORY_SEPARATOR . $file;
      if(is_dir($t)){
// 下階層のディレクトリを削除する
        dirDelete($t);
      }else{
        if (!@unlink($target)) {
          echo "ファイルの削除に失敗しました。";
          exit;
        }
      }
    }
// ディレクトリハンドルを閉じる
    closedir($dh);

    if (is_dir($target)) {
      if (!@rmdir($target)) {
        echo "フォルダの削除に失敗しました。";
        exit;
      }
    }else{
      if (!@unlink($target)) {
        echo "フォルダの削除に失敗しました。";
        exit;
      }
    }
  }

  return true;
}

// 対象のファイル
$target="/home/hoge/test";

// シンボリックリンクであれば元のファイルを削除する
if (is_link($target)) {
  dirCanDelete($target);
  dirDelete(realpath($target));
}
dirCanDelete($target);
dirDelete($target);
?>

関連記事

スポンサーリンク

スタイル適用時にdt, dd, liなどの要素の内容物が無視される

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る