original_string: public static function rmtree(string $path)
      {
          $path = self::realpath($path);
          if (empty($path)) // File/dir does not exist
              return true;
  
          if (empty(self::$required_prefix))
              throw new \RuntimeException("Safety measure: required prefix needs to be set before running rmtree");
  
          if (strpos($path, self::$required_prefix) !== 0)
              throw new \RuntimeException("Refusing to remove directory outside " . self::$required_prefix);
  
          self::checkWrite($path);
  
          if (!is_dir($path))
              return unlink($path) ? 1 : 0;
  
          $cnt = 0;
          $d = \dir($path);
          while (($entry = $d->read()) !== false)
          {
              if ($entry === "." || $entry === "..")
                  continue;
  
              $entry = $path . '/' . $entry;
              self::checkWrite($entry);
  
              if (is_dir($entry))
                  $cnt += self::rmtree($entry);
              else
                  $cnt += (unlink($entry) ? 1 : 0);
          }
  
          rmdir($path);
          return $cnt + 1;
      }
code: public static function rmtree(string $path)
      {
          $path = self::realpath($path);
          if (empty($path)) // File/dir does not exist
              return true;
  
          if (empty(self::$required_prefix))
              throw new \RuntimeException("Safety measure: required prefix needs to be set before running rmtree");
  
          if (strpos($path, self::$required_prefix) !== 0)
              throw new \RuntimeException("Refusing to remove directory outside " . self::$required_prefix);
  
          self::checkWrite($path);
  
          if (!is_dir($path))
              return unlink($path) ? 1 : 0;
  
          $cnt = 0;
          $d = \dir($path);
          while (($entry = $d->read()) !== false)
          {
              if ($entry === "." || $entry === "..")
                  continue;
  
              $entry = $path . '/' . $entry;
              self::checkWrite($entry);
  
              if (is_dir($entry))
                  $cnt += self::rmtree($entry);
              else
                  $cnt += (unlink($entry) ? 1 : 0);
          }
  
          rmdir($path);
          return $cnt + 1;
      }
code_tokens: public static function rmtree ( string $ path ) { $ path = self :: realpath ( $ path ) ; if ( empty ( $ path ) ) // File/dir does not exist return true ; if ( empty ( self :: $ required_prefix ) ) throw new \ RuntimeException ( "Safety measure: required prefix needs to be set before running rmtree" ) ; if ( strpos ( $ path , self :: $ required_prefix ) !== 0 ) throw new \ RuntimeException ( "Refusing to remove directory outside " . self :: $ required_prefix ) ; self :: checkWrite ( $ path ) ; if ( ! is_dir ( $ path ) ) return unlink ( $ path ) ? 1 : 0 ; $ cnt = 0 ; $ d = \ dir ( $ path ) ; while ( ( $ entry = $ d -> read ( ) ) !== false ) { if ( $ entry === "." || $ entry === ".." ) continue ; $ entry = $ path . '/' . $ entry ; self :: checkWrite ( $ entry ) ; if ( is_dir ( $ entry ) ) $ cnt += self :: rmtree ( $ entry ) ; else $ cnt += ( unlink ( $ entry ) ? 1 : 0 ) ; } rmdir ( $ path ) ; return $ cnt + 1 ; }
docstring: Delete a directory and its contents. The provided path must be inside the configured prefix.
  @param $path string The path to remove
  @return int Amount of files and directories that have been deleted
docstring_tokens: Delete a directory and its contents . The provided path must be inside the configured prefix .