2012-05-15 26 views
5

Estoy trabajando con una aplicación php, y hay una línea que mueve un archivo. Encerré el método dentro de un bloque try ... catch, por lo que, si se produce un error, puedo administrar un sistema de reversión. Pero la excepción nunca se atrapa, entonces, ¿cambiar el nombre arroja cualquier tipo de excepción? ¿Debo probar con otro método?PHP rename() no arroja la excepción en el error

Gracias

código anterior:

try{ 
    if(rename($archivo_salida, $ruta_archivos)){ 
    //anything; 
    } 

}catch (Exception $e) 
    //do something 
} 

Respuesta

6

Las funciones PHP "normales" no arrojan excepciones.

cambiar su código para simular una excepción:

try{ 
    if(rename($archivo_salida, $ruta_archivos)){ 
     //anything; 
    } else { 
     throw new Exception('Can not rename file'.$archivo_salida); 
    } 
}catch (Exception $e) 
    //do something 
} 
+0

mi mal. ¡Gracias! – Cheluis

+0

Podría haber un transformador automático de error a excepción: http://stackoverflow.com/a/10919969/22470 – powtac

2

Devuelve FALSE en caso de fallo. Ver http://php.net/manual/en/function.rename.php

Si realmente necesita una excepción que se inicia cuando se produce el cambio de nombre falla, puede hacer esto:

if (rename($archivo_salida, $ruta_archivos)) { 
    // anything; 
} else { 
    throw new Exception("Rename failed."); 
} 

Ahora, usted puede terminar con esto alrededor de un bloque try {} catch {} donde cada vez que se invoca este código.

+0

gracias! lo mismo que una respuesta, pero gracias – Cheluis

0

También puede utilizar el mismo método que se describe en esta respuesta: https://stackoverflow.com/a/43364340/563049

crear una clase de excepción personalizada y utilizar su método constructor estático con or operador después de rename().

clase

Excepción:

class CustomException extends Exception { 
    static public function doThrow($message = "", $code = 0, Exception $previous = null) { 
    throw new Exception($message, $code, $previous); 
    } 
} 

Uso:

try { 

    rename($archivo_salida, $ruta_archivos) or CustomException::doThrow('Renaming failed.'); 

} catch (Exception $e){ 
    //do something 
} 

Nota

Si está usando PHP 7 y superior - se puede cambiar el nombre de método estático doThrow() simplemente throw() , ya que en PHP 7 y superior está permitido usar palabras clave reservadas como nombres de métodos.

Cuestiones relacionadas