Eso suena a trabajo de las excepciones PHP. Con los bloques try y catch (opcionalmente finally en php 7 o era 5.6?) podrás manejar las excepciones que hayas definido (cuando algo no sale como quieres).
Sería algo así:
- Primero la función que elimina el directorio y todo lo que contiene (esto serviria para muchas otras cosas, asi que lo puedes poner en tu clase functions, o como la llames):
// Recursively remove the directory with all its content
public function removeDirectory($path) {
$exit = FALSE;
if ( FALSE !== $path && is_dir($path) ) {
$files = new FilesystemIterator($path, FilesystemIterator::SKIP_DOTS);
foreach ($files as $file) {
(is_dir($file)) ?
$this->removeDirectory($file) : unlink($file); }
}
return $exit;
}
- Ahora el script en sí, lo que querias hacer:
// Supongo que esto lo tendrás en tu index.php (donde declaras e inicializas las clases)
require('functions.php');
$functions = new functions();
// aquí generas el nombre aleatorio y creas la carpeta
$folder = '';
// no se pudo crear la carpeta
}
// Para comprobar que existe usamos la función realpath()
// que devolverá FALSE si no existe, o la ruta si existe
$path = realpath('/home/user/website.com/' . $folder);
if ( FALSE !== $path ) {
// Ahora es donde entra try/catch/finally en acción
try {
// aquí puedes hacer la operación con total seguridad
// ya que si falla, se ejecutará lo que haya en catch/finally {}
// cualquier error (else if o $mysqli->error) lo puedes manejar con
throw new Exception('mensaje de error con variable: ' $variable);
// por ejemplo
if ($x == $y) {
} else throw new Exception('x (' . $x . ' no es igual a y (' . $y . ')');
} catch (Exception $e) {
// aquí puedes loguear que ha habido un error
// el mensaje de error se encuentra dentro de $e
// viene bien para debuguear y estar pendiente de los listillos
} finally {
// finalmente se limpian los archivos temporales
// esto se ejecutará siempre despues de lo que hay en try, y en caso de fallar, lo de catch
$functions->removeDirectory($path);
}
}
Sencillo, ¿no?
Esto es más que nada para que te hagas una idea de como funciona, la idea básica es esa, tener 3 bloques, dos que se ejecutan siempre (primero y ultimo) y otro que se ejecuta solo en caso de que el primero falle.
Pero no estamos hablando de errores de php, si no errores de los distintos escenarios, que no son problema del código, si no del input de los usuarios y de las distintas variables. Los errores propios de php deben ser solucionados antes de producción.