আমি কীভাবে পিএইচপি-তে কোনও ডিরেক্টরি এবং এর সম্পূর্ণ বিষয়বস্তু (ফাইল + সাব ডায়ারস) পুনরাবৃত্তভাবে মুছব?


133

কীভাবে আমি পিএইচপি-তে কোনও ডিরেক্টরি এবং এর সম্পূর্ণ বিষয়বস্তু (ফাইল এবং উপ-ডিরেক্টরি) মুছব?


উত্তর:


207

এর ম্যানুয়াল পৃষ্ঠায় ব্যবহারকারী-অবদানের অংশটিতে rmdirএকটি শালীন বাস্তবায়ন রয়েছে:

 function rrmdir($dir) { 
   if (is_dir($dir)) { 
     $objects = scandir($dir);
     foreach ($objects as $object) { 
       if ($object != "." && $object != "..") { 
         if (is_dir($dir. DIRECTORY_SEPARATOR .$object) && !is_link($dir."/".$object))
           rrmdir($dir. DIRECTORY_SEPARATOR .$object);
         else
           unlink($dir. DIRECTORY_SEPARATOR .$object); 
       } 
     }
     rmdir($dir); 
   } 
 }

1
@ দ্য পিক্সেল বিকাশকারী - আমি এটি দেখিয়ে একটি উত্তর যুক্ত করেছি ।
সালাতে

2
খুঁজে বার করো সমাধান কেউ আমাকে একই প্রশ্ন জন্য দিয়েছেন: উল্লিখিত glob কাজ সুন্দর বলে মনে হয়: stackoverflow.com/questions/11267086/...
NoodleOfDeath

এটি is_dirপ্রতিটি পুনরাবৃত্তি ডিরেক্টরিতে দু'বার কল করে। যদি আর্গুমেন্টটি একটি সিমিলিংক হয় তবে এটি সিমলিংক মোছার পরিবর্তে এটি অনুসরণ করে, যা আপনি যা চান তা হতে পারে বা নাও পারে। যাইহোক, এটি কি rm -rfকরে না।
ভ্লাদিমির পানতেলিভ

116

দ্য পিক্সেল বিকাশকারীর মন্তব্যে বিল্ডিং , এসপিএল ব্যবহার করে একটি স্নিপেট দেখতে দেখতে দেখতে পারা যায়:

$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
    RecursiveIteratorIterator::CHILD_FIRST
);

foreach ($files as $fileinfo) {
    $todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
    $todo($fileinfo->getRealPath());
}

rmdir($dir);

দ্রষ্টব্য: এটি কোনও বিচক্ষণতা যাচাই করে না এবং পিএইচপি 5.3.0-এ ফাইল-সিস্টেমআইট্রেটারের সাথে প্রবর্তিত এসকেআইপি_ডটস পতাকা ব্যবহার করে। অবশ্যই, এটি $todoএকটি if/ হতে পারে else। গুরুত্বপূর্ণ পয়েন্টটি হ'ল CHILD_FIRSTবাচ্চাদের (ফাইলগুলি) তাদের পিতামাতার (ফোল্ডার) আগে প্রথমে পুনরাবৃত্তি করতে ব্যবহৃত হয়।


SKIP_DOTSশুধুমাত্র পিএইচপি 5.3 এ চালু হয়েছিল? তুমি কোথায় দেখলে?
অ্যালিক্স অ্যাক্সেল

ধন্যবাদ. এছাড়াও: আপনি কি getPathname()পরিবর্তে পদ্ধতি ব্যবহার করা উচিত নয় getRealPath()?
অ্যালিক্স অ্যাক্সেল

3
এই সমাধানটি ভালভাবে কাজ করে, তবে এটি সবকিছু মুছে দেয় ... ডিরেক্টরি বাদে (খালি থাকুক না কেন)। rmdir($dir)স্ক্রিপ্টের শেষে একটি হওয়া উচিত ।
লরেন্ট

3
এখানে একই ফাংশনটি মোড়ানো, ডক-ব্লকড, এবং এর সাথে সামঞ্জস্যপূর্ণ rmdir()এবং unlink()যেমন: সাথে অ্যাফোর্ট করে E_WARNINGএবং ফেরত দেয় trueবা falseসাফল্যের ইঙ্গিত দেয়।
mindplay.dk

2
@dbf না এটি করবে না, এটি FilesystemIteratorকোনও পুনরাবৃত্ত পুনরাবৃত্তিকারী নয়।
সালাথে

17

পথে সমস্ত ফাইল এবং ফোল্ডার মুছে দেয়।

function recurseRmdir($dir) {
  $files = array_diff(scandir($dir), array('.','..'));
  foreach ($files as $file) {
    (is_dir("$dir/$file")) ? recurseRmdir("$dir/$file") : unlink("$dir/$file");
  }
  return rmdir($dir);
}

1
rm -rf /== recurseRmdir('/'):)
হারুন

5
দয়া করে নোট করুন যে এটি নিরাপদ নয়! Is_dir এর পরে আপনার একটি স্যানিটি চেক দরকার এটিও পরীক্ষা করে দেখুন! এটি_লিংক, কারণ অন্যথায় আপনি কোনও বাহ্যিক ফোল্ডারে সিলেক করতে পারেন যা পরে মুছে ফেলা হয় এবং এটি একটি সুরক্ষা গর্ত হিসাবে বিবেচিত হতে পারে। সুতরাং আপনার পরিবর্তন is_dir("$dir/$file")করা উচিতis_dir("$dir/$file") && !is_link("$dir/$file")
কীরা এম ব্যাকস

13

* নিক্সের জন্য আপনি উইন্ডোজের shell_execজন্য rm -Rবা এর DEL /S folder_nameজন্য একটি ব্যবহার করতে পারেন ।


2
DEL /S folder_nameউইন্ডোজের জন্য কীভাবে
অংকিতজাইনইনফো

@ গর্ডন আমার RMDIR /S /Q folder_nameপক্ষে যা কাজ করেছে
ব্রায়ান

2
@ WiR3D যতক্ষণ না এক্সিকিউটে কমান্ডটিতে কোনও ব্যবহারকারী ইনপুট থাকে না, আপনার ভাল হওয়া উচিত। প্রাক্তন:exec('rm -rf ' . __DIR__ . '/output/*.log');
ব্রায়ান হ্যানয়

5
<?php

use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;
use SplFileInfo;

# http://stackoverflow.com/a/3352564/283851
# https://gist.github.com/XzaR90/48c6b615be12fa765898

# Forked from https://gist.github.com/mindplay-dk/a4aad91f5a4f1283a5e2

/**
 * Recursively delete a directory and all of it's contents - e.g.the equivalent of `rm -r` on the command-line.
 * Consistent with `rmdir()` and `unlink()`, an E_WARNING level error will be generated on failure.
 *
 * @param string $source absolute path to directory or file to delete.
 * @param bool   $removeOnlyChildren set to true will only remove content inside directory.
 *
 * @return bool true on success; false on failure
 */
function rrmdir($source, $removeOnlyChildren = false)
{
    if(empty($source) || file_exists($source) === false)
    {
        return false;
    }

    if(is_file($source) || is_link($source))
    {
        return unlink($source);
    }

    $files = new RecursiveIteratorIterator
    (
        new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS),
        RecursiveIteratorIterator::CHILD_FIRST
    );

    //$fileinfo as SplFileInfo
    foreach($files as $fileinfo)
    {
        if($fileinfo->isDir())
        {
            if(rrmdir($fileinfo->getRealPath()) === false)
            {
                return false;
            }
        }
        else
        {
            if(unlink($fileinfo->getRealPath()) === false)
            {
                return false;
            }
        }
    }

    if($removeOnlyChildren === false)
    {
        return rmdir($source);
    }

    return true;
}

বেশ জটিল পরামর্শ ;-)
ফিলিপ

@ ফিলিপ হ্যাঁ আমি অনুমান করি। ভাল আমি gist.github.com/mindplay-dk/a4aad91f5a4f1283a5e2 এর বাইরে একটি কাঁটা তৈরি করেছি কারণ আমি এটি কাজ করতে পাইনি তাই আমি কেবল ভেবেছিলাম আমিও এটি ভাগ করে নিতে পারি share
এক্সদাআর

একটি সমস্যা আছে. সমস্ত ফাইল সরানোর পরে এটি খালি ফোল্ডারগুলি মুছবে না। নীচে উত্তর হিসাবে সামান্য পরিবর্তিত সংস্করণ পোস্ট করা।
ভ্লাদিস্লাভ রাস্ট্রুসনি

@ ভ্লাদিস্লাভ রাস্ট্রুসনি আসলেই? এটা আমার জন্য কাজ করে. হতে পারে আপনার কেবল পঠনযোগ্য বা কিছু সহ একটি ফোল্ডার ছিল।
XzaR

4

এখানে আরও উদাহরণ সহ আরও একটি থ্রেড রয়েছে: পিএইচপি জন্য একটি পুনরাবৃত্ত ডিরেক্টরি মুছে ফেলা?

আপনি যদি Yii ব্যবহার করছেন তবে আপনি এটি ফ্রেমওয়ার্কটিতে রেখে যেতে পারেন:

CFileHelper::removeDirectory($my_directory);

1

'সরল' কোড যা কাজ করে এবং দশ বছরের পুরাতন দ্বারা এটি পড়তে পারে:

function deleteNonEmptyDir($dir) 
{
   if (is_dir($dir)) 
   {
        $objects = scandir($dir);

        foreach ($objects as $object) 
        {
            if ($object != "." && $object != "..") 
            {
                if (filetype($dir . "/" . $object) == "dir")
                {
                    deleteNonEmptyDir($dir . "/" . $object); 
                }
                else
                {
                    unlink($dir . "/" . $object);
                }
            }
        }

        reset($objects);
        rmdir($dir);
    }
}

দয়া করে মনে রাখবেন যে আমি যা করেছি তা হ'ল সমাধানটি প্রসারিত / সরলকরণ এবং ঠিক করা (খালি দিরের জন্য কাজ করেনি): খালি নয় এমন পিএইচপি-তে আমি কীভাবে পুনরুক্তি করে সমস্ত ফোল্ডার সরিয়ে ফেলব?


1

উন্নত @ আর্টেফ্যাক্টো'র সমাধান - সংশোধন করা টাইপস এবং সরলিকৃত কোড, উভয়ের জন্য কাজ করছে - খালি && খালি নয় ডিরেক্টরি।

  function recursive_rmdir($dir) { 
    if( is_dir($dir) ) { 
      $objects = array_diff( scandir($dir), array('..', '.') );
      foreach ($objects as $object) { 
        $objectPath = $dir."/".$object;
        if( is_dir($objectPath) )
          recursive_rmdir($objectPath);
        else
          unlink($objectPath); 
      } 
      rmdir($dir); 
    } 
  }

1

100% কাজ সমাধান

public static function rmdir_recursive($directory, $delete_parent = null)
  {
    $files = glob($directory . '/{,.}[!.,!..]*',GLOB_MARK|GLOB_BRACE);
    foreach ($files as $file) {
      if (is_dir($file)) {
        self::rmdir_recursive($file, 1);
      } else {
        unlink($file);
      }
    }
    if ($delete_parent) {
      rmdir($directory);
    }
  }

0

এটার মতো কিছু?

function delete_folder($folder) {
    $glob = glob($folder);
    foreach ($glob as $g) {
        if (!is_dir($g)) {
            unlink($g);
        } else {
            delete_folder("$g/*");
            rmdir($g);
        }
    }
}

আমি ব্যাখ্যা করতে পারি না কেন তবে এটি আমার পক্ষে কার্যকর হয়নি। এটি খালি নয় এমন একটি ফোল্ডার মোছার চেষ্টা করে চলেছে। উপরের দ্বিতীয় উত্তরটি ভাল কাজ করেছে।
লরেন্ট

1
@ বাগি 3 আপনি কোন নির্দিষ্ট কোডের কথা উল্লেখ করছেন? লিঙ্কটি কেবল এই প্রশ্ন পৃষ্ঠায় লিঙ্ক করে।
cgogolin

0

গ্লোব () ফাংশন সহ উদাহরণ । এটি বিন্দু দিয়ে শুরু হওয়া ফাইলগুলি সহ সমস্ত ফাইল এবং ফোল্ডারগুলি পুনরাবৃত্তভাবে মুছে ফেলবে।

delete_all( 'folder' );

function delete_all( $item ) {
    if ( is_dir( $item ) ) {
        array_map( 'delete_all', array_diff( glob( "$item/{,.}*", GLOB_BRACE ), array( "$item/.", "$item/.." ) ) );
        rmdir( $item );
    } else {
        unlink( $item );
    }
};

আমি সাথে ছিলামsystem('rm -fr folder')
Itay Moav -Malimovka

0

লিঙ্ক-লিঙ্ক ফাংশন পুনরাবৃত্তভাবে নির্দিষ্ট স্ক্রিপ্টটি মুছে দেয় না তা নিশ্চিত করে নির্দিষ্ট পথে সমস্ত ফোল্ডার এবং ফাইলগুলি মুছে দেয়।

function unlinkr($dir, $pattern = "*") {
    // find all files and folders matching pattern
    $files = glob($dir . "/$pattern"); 

    //interate thorugh the files and folders
    foreach($files as $file){ 
    //if it is a directory then re-call unlinkr function to delete files inside this directory     
        if (is_dir($file) and !in_array($file, array('..', '.')))  {
            echo "<p>opening directory $file </p>";
            unlinkr($file, $pattern);
            //remove the directory itself
            echo "<p> deleting directory $file </p>";
            rmdir($file);
        } else if(is_file($file) and ($file != __FILE__)) {
            // make sure you don't delete the current script
            echo "<p>deleting file $file </p>";
            unlink($file); 
        }
    }
}

আপনি যদি এই স্ক্রিপ্টটি রাখেন এমন সমস্ত ফাইল এবং ফোল্ডারগুলি মুছতে চান তবে নীচের হিসাবে এটি কল করুন

//get current working directory
$dir = getcwd();
unlinkr($dir);

আপনি যদি কেবলমাত্র পিএইচপি ফাইলগুলি মুছতে চান তবে নীচের হিসাবে এটি কল করুন

unlinkr($dir, "*.php");

আপনি ফাইলগুলি মুছতে অন্য যে কোনও পথ ব্যবহার করতে পারেন

unlinkr("/home/user/temp");

এটি হোম / ব্যবহারকারী / অস্থায়ী ডিরেক্টরিতে থাকা সমস্ত ফাইল মুছে ফেলবে।


0

আমি এই কোডটি ব্যবহার করি ...

 function rmDirectory($dir) {
        foreach(glob($dir . '/*') as $file) {
            if(is_dir($file))
                rrmdir($file);
            else
                unlink($file);
        }
        rmdir($dir);
    }

বা এই ...

<?php 
public static function delTree($dir) { 
   $files = array_diff(scandir($dir), array('.','..')); 
    foreach ($files as $file) { 
      (is_dir("$dir/$file")) ? delTree("$dir/$file") : unlink("$dir/$file"); 
    } 
    return rmdir($dir); 
  } 
?>

এটি কি পুনরাবৃত্তি?
মার্টিন টর্নোজাইজ

0

একবার আপনি চলমান পরীক্ষা শেষ করার পরে, ক্লাসে # ইউলিংক এবং #rmdir থেকে কেবল # সরিয়ে দিন

<?php 
class RMRFiles {

        function __construct(){
        }

    public function recScan( $mainDir, $allData = array() )
    {

    // hide files
    $hidefiles = array(
    ".",
    "..") ;

    //start reading directory
    $dirContent = scandir( $mainDir ) ;

        //cycle through
        foreach ( $dirContent as $key => $content )
        {
            $path = $mainDir . '/' . $content ;

            // if is readable / file
            if ( ! in_array( $content, $hidefiles ) )
            {
            if ( is_file( $path ) && is_readable( $path ) )
            {
            #delete files within directory
            #unlink($path);
            $allData['unlink'][] = $path ;
            }

            // if is readable / directory
            else
            if ( is_dir( $path ) && is_readable( $path ) )
            {
            /*recursive*/
            $allData = $this->recScan( $path, $allData ) ;

            #finally remove directory
            $allData['rmdir'][]=$path;
            #rmdir($path);
            }
            }
        }

    return $allData ;

    }

}

header("Content-Type: text/plain");

/* Get absolute path of the running script 
Ex : /home/user/public_html/   */
define('ABPATH', dirname(__file__) . '/'); 

/* The folder where we store cache files 
Ex: /home/user/public_html/var/cache   */
define('STOREDIR','var/cache'); 

$rmrf = new RMRFiles();
#here we delete folder content files & directories
print_r($rmrf->recScan(ABPATH.STOREDIR));
#finally delete scanned directory ? 
#rmdir(ABPATH.STOREDIR);

?>

0
<?php

/**
 * code by Nk (nk.have.a@gmail.com)
 */

class filesystem
{
    public static function remove($path)
    {
        return is_dir($path) ? rmdir($path) : unlink($path);
    }

    public static function normalizePath($path)
    {
        return $path.(is_dir($path) && !preg_match('@/$@', $path) ? '/' : '');      
    }

    public static function rscandir($dir, $sort = SCANDIR_SORT_ASCENDING)
    {
        $results = array();

        if(!is_dir($dir))
        return $results;

        $dir = self::normalizePath($dir);

        $objects = scandir($dir, $sort);

        foreach($objects as $object)
        if($object != '.' && $object != '..')
        {
            if(is_dir($dir.$object))
            $results = array_merge($results, self::rscandir($dir.$object, $sort));
            else
            array_push($results, $dir.$object);
        }

        array_push($results, $dir);

        return $results;
    }

    public static function rrmdir($dir)
    {
        $files = self::rscandir($dir);

        foreach($files as $file)
        self::remove($file);

        return !file_exists($dir);
    }
}

?>

ক্লিনআপ.এফপি:

<?php

/* include.. */

filesystem::rrmdir('/var/log');
filesystem::rrmdir('./cache');

?>

0

দেখে মনে হয় যে অন্যান্য সমস্ত উত্তর ফাংশনটিতে প্রদত্ত পথটি সর্বদা একটি ডিরেক্টরি হিসাবে অনুমান করে। এই রূপটি ডিরেক্টরি এবং একক ফাইলগুলি অপসারণ করতে কাজ করে:

/**
 * Recursively delete a file or directory.  Use with care!
 *
 * @param string $path
 */
function recursiveRemove($path) {
    if (is_dir($path)) {
        foreach (scandir($path) as $entry) {
            if (!in_array($entry, ['.', '..'])) {
                recursiveRemove($path . DIRECTORY_SEPARATOR . $entry);
            }
        }
        rmdir($path);
    } else {
        unlink($path);
    }
}

0

ডাইরেক্টরিআইটিরেটর এবং পুনরাবৃত্তি সঠিকভাবে ব্যবহার:

function deleteFilesThenSelf($folder) {
    foreach(new DirectoryIterator($folder) as $f) {
        if($f->isDot()) continue; // skip . and ..
        if ($f->isFile()) {
            unlink($f->getPathname());
        } else if($f->isDir()) {
            deleteFilesThenSelf($f->getPathname());
        }
    }
    rmdir($folder);
}

-1

কিছু স্ট্যাকওভারফ্লো আলোচনা থেকে আমি এই কোডটি তৈরি করেছি। আমি লিনাক্স পরিবেশে এখনও পরীক্ষা করিনি। এটি কোনও ফাইল বা ডিরেক্টরি মুছে ফেলার জন্য তৈরি করা হয়েছে, সম্পূর্ণ:

function splRm(SplFileInfo $i)
{
    $path = $i->getRealPath();

    if ($i->isDir()) {
        echo 'D - ' . $path . '<br />';
        rmdir($path);
    } elseif($i->isFile()) {
        echo 'F - ' . $path . '<br />';
        unlink($path);
    }
}

function splRrm(SplFileInfo $j)
{
    $path = $j->getRealPath();

    if ($j->isDir()) {
        $rdi = new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS);
        $rii = new RecursiveIteratorIterator($rdi, RecursiveIteratorIterator::CHILD_FIRST);
        foreach ($rii as $i) {
            splRm($i);
        }
    }
    splRm($j);

}

splRrm(new SplFileInfo(__DIR__.'/../dirOrFileName'));

-1
function rmdir_recursive( $dirname ) {

    /**
     * FilesystemIterator and SKIP_DOTS
     */

    if ( class_exists( 'FilesystemIterator' ) && defined( 'FilesystemIterator::SKIP_DOTS' ) ) {

        if ( !is_dir( $dirname ) ) {
            return false;
        }

        foreach( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $dirname, FilesystemIterator::SKIP_DOTS ), RecursiveIteratorIterator::CHILD_FIRST ) as $path ) {
            $path->isDir() ? rmdir( $path->getPathname() ) : unlink( $path->getRealPath() );
        }

        return rmdir( $dirname );

    }

    /**
     * RecursiveDirectoryIterator and SKIP_DOTS
     */

    if ( class_exists( 'RecursiveDirectoryIterator' ) && defined( 'RecursiveDirectoryIterator::SKIP_DOTS' ) ) {

        if ( !is_dir( $dirname ) ) {
            return false;
        }

        foreach( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $dirname, RecursiveDirectoryIterator::SKIP_DOTS ), RecursiveIteratorIterator::CHILD_FIRST ) as $path ) {
            $path->isDir() ? rmdir( $path->getPathname() ) : unlink( $path->getRealPath() );
        }

        return rmdir( $dirname );

    }

    /**
     * RecursiveIteratorIterator and RecursiveDirectoryIterator
     */

    if ( class_exists( 'RecursiveIteratorIterator' ) && class_exists( 'RecursiveDirectoryIterator' ) ) {

        if ( !is_dir( $dirname ) ) {
            return false;
        }

        foreach( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $dirname ), RecursiveIteratorIterator::CHILD_FIRST ) as $path ) {
            if ( in_array( $path->getFilename(), array( '.', '..' ) ) ) {
                continue;
            }
            $path->isDir() ? rmdir( $path->getPathname() ) : unlink( $path->getRealPath() );
        }

        return rmdir( $dirname );

    }

    /**
     * Scandir Recursive
     */

    if ( !is_dir( $dirname ) ) {
        return false;
    }

    $objects = scandir( $dirname );

    foreach ( $objects as $object ) {
        if ( $object === '.' || $object === '..' ) {
            continue;
        }
        filetype( $dirname . DIRECTORY_SEPARATOR . $object ) === 'dir' ? rmdir_recursive( $dirname . DIRECTORY_SEPARATOR . $object ) : unlink( $dirname . DIRECTORY_SEPARATOR . $object );
    }

    reset( $objects );
    rmdir( $dirname );

    return !is_dir( $dirname );

}

-1

@ এক্সজাআর সমাধানের পরিবর্তিত রূপ। এটি খালি ফোল্ডারগুলি মুছে ফেলবে, যখন সমস্ত ফাইলগুলি সেগুলি থেকে মুছে ফেলা হয় এবং এটি ত্রুটিতে মিথ্যা ফিরিয়ে দেওয়ার পরিবর্তে ব্যতিক্রম ছুঁড়ে দেয়।

function recursivelyRemoveDirectory($source, $removeOnlyChildren = true)
{
    if (empty($source) || file_exists($source) === false) {
        throw new Exception("File does not exist: '$source'");
    }

    if (is_file($source) || is_link($source)) {
        if (false === unlink($source)) {
            throw new Exception("Cannot delete file '$source'");
        }
    }

    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS),
        RecursiveIteratorIterator::CHILD_FIRST
    );

    foreach ($files as $fileInfo) {
        /** @var SplFileInfo $fileInfo */
        if ($fileInfo->isDir()) {
            if ($this->recursivelyRemoveDirectory($fileInfo->getRealPath()) === false) {
                throw new Exception("Failed to remove directory '{$fileInfo->getRealPath()}'");
            }
            if (false === rmdir($fileInfo->getRealPath())) {
                throw new Exception("Failed to remove empty directory '{$fileInfo->getRealPath()}'");
            }
        } else {
            if (unlink($fileInfo->getRealPath()) === false) {
                throw new Exception("Failed to remove file '{$fileInfo->getRealPath()}'");
            }
        }
    }

    if ($removeOnlyChildren === false) {
        if (false === rmdir($source)) {
            throw new Exception("Cannot remove directory '$source'");
        }
    }
}

-1
function deltree_cat($folder)
{
    if (is_dir($folder))
    {
             $handle = opendir($folder);
             while ($subfile = readdir($handle))
             {
                     if ($subfile == '.' or $subfile == '..') continue;
                     if (is_file($subfile)) unlink("{$folder}/{$subfile}");
                     else deltree_cat("{$folder}/{$subfile}");
             }
             closedir($handle);
             rmdir ($folder);
     }
     else
     {
        unlink($folder);
     }
}

1
আপনি যদি কোনও পুরানো প্রশ্নের উত্তর দিচ্ছেন যা ইতিমধ্যে স্বীকৃত উত্তর সহ বেশ কয়েকটি উত্তর রয়েছে তবে আপনার কোডটি উত্তর দিয়ে কী মান দেয়, তার একটি বিবরণ পোস্ট করতে হবে, কেবল কোড নয়। কোড-কেবলমাত্র উত্তরগুলি সাধারণভাবে চিহ্নিত করা হয় তবে বিশেষত এই ক্ষেত্রে।
জারেড স্মিথ

আমি এই উত্তরটির পক্ষে ভোট দিয়েছি এবং উত্তরটি গ্রহণ করেছি। এটা আমার বেঞ্চমার্ক চেক থেকে (ছাড়া খারাপ নয়, unlink, rmdir) opendir+ + readdirকাজ দ্রুত যে scandirএবং RecursiveDirectoryIteratorএটি সমস্ত কম মেমরি ব্যবহার করা হয়। আমাকে closedirপ্রথমে ফোল্ডারটি সরাতে , আমি এতে আটকে গিয়েছিলাম। এই উত্তরের জন্য ধন্যবাদ।
Vee
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.