为什么此功能不起作用?PHP


Why this function is not working? PHP

这是最初的函数,它非常完美。。。

    function delete_directory($dirname) {
  if (is_dir($dirname))
    $dir_handle = opendir($dirname);
    if (!$dir_handle)
      return false;
  while ($file = readdir($dir_handle)) {
    if ($file != "." && $file != "..") {
      if (!is_dir($dirname."/".$file))
                   unlink($dirname."/".$file);
              else
                   delete_directory($dirname.'/'.$file);
         }
   }
   closedir($dir_handle);
   rmdir($dirname);
   return true;
  }

我试着用大括号和不同的名字做一个版本,但它不起作用,我不确定有什么问题

    function borrar_directorio ($carpeta) {
  if (is_dir($carpeta)) {
    $abrir_directorio = opendir($carpeta);
    if (!$abrir_directorio) {
      return false;
    }
  }
  while ($archivo = readdir($abrir_directorio)) {
      if ($archivo != "." && $archivo != "..") {
        if (!is_dir($carpeta."/".$archivo)) {
          unlink($carpeta."/".$achivo);
        } else {
          borrar_directorio($carpeta.'/'.$archivo);
        }
      }
    }
  closedir($abrir_directorio);
  rmdir($carpeta);
  return true;
}

我缺少什么?我希望你能帮助我,提前感谢

编写过程中可能存在的一个问题是,如果文件夹不存在或由于权限限制或文件系统错误而无法打开,while循环仍将运行。

以下是使用大括号编写原始脚本的方法

  if(is_dir($carpeta))
  {
    $abrir_directorio = opendir($carpeta);
  }
  if(!$abrir_directorio)
  {
    return false;
  }
  while($archivo = readdir($abrir_directorio))
  { ...

也许scandir会有所帮助:

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

如果此函数不起作用,请取消对echo的注释,您将看到它试图删除哪些文件。