【问题标题】:PHP Deleting a full folderPHP删除一个完整的文件夹
【发布时间】:2012-04-11 22:31:10
【问题描述】:

我尝试使用以下功能删除完整文件夹,但它似乎没有删除任何想法或建议?

public function submit()
{
        $location = $_SERVER['DOCUMENT_ROOT'].'/_assets/quote/uploads/';

        $folderName = $this->quote->getCompanyDetails()->companyName;

        $data['companyContact'] = $this->quote->getCompanyDetails()->companyContact;

        $this->load->view('submit',$data);

        $this->quote->removeQuote();

        if(is_dir($location.$folderName) === TRUE)
        {
            $files = array_diff(scandir($location.$folderName), array('.','..'));

            foreach($files as $file)
            {
                Delete(realpath($location.$folderName).'/'. $file);
            }
            return rmdir($location.$folderName);
        }
        else if(is_file($location.$folderName) === TRUE)
        {
            return unlink($location.$folderName);
        }
        return FALSE;
}

更新:

public function submit()
{
        $location = $_SERVER['DOCUMENT_ROOT'].'/_assets/quote/uploads/';

        $folderName = $this->quote->getCompanyDetails()->companyName;

        $data['companyContact'] = $this->quote->getCompanyDetails()->companyContact;

        $this->load->view('submit',$data);

        //$this->quote->removeQuote();

        $this->removeFolder();
}

private function removeFolder(){
        $location = $_SERVER['DOCUMENT_ROOT'].'/_assets/quote/uploads/';

        $folderName = $this->quote->getCompanyDetails()->companyName;

        foreach(glob($location.$folderName.'/*') as $file)
        {
            if(is_dir($location.$folderName))
            {
                rmdir($location.$folderName);
            }else{
                unlink($location.$folderName);
            }
            rmdir($location.$folderName);
        }
}

【问题讨论】:

  • 你有权限删除操作系统上的文件吗?
  • 您第一次调用“删除”,第二次调用“取消链接”。不应该两次都取消链接吗?
  • @kingcoyote 我在这里发现不确定是否正确
  • 除非您使用定义 Delete 的库,否则它在 PHP 中本身并不存在。尝试用 unlink 替换对 Delete 的调用,这是删除文件的实际 PHP 命令。
  • 你应该使用 unlink 两次

标签: php linux delete-file


【解决方案1】:

您无法在一次通话中删除整个文件夹。你应该递归地做:

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

【讨论】:

  • 他不是想在一次通话中删除一个完整的文件夹。虽然一点递归并不是一件坏事,但他正在进行深度 1 扫描并从那里删除。不,更新版本将不起作用,因为现在您正试图在非空文件夹上调用 rmdir。
  • @kingcoyote 你能提供任何光吗?
猜你喜欢
  • 2013-01-03
  • 2017-02-16
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
相关资源
最近更新 更多