Pregunta

mkdir () funciona correctamente a esta pregunta es más acerca de la captura de un error. En lugar de imprimir esto cuando existe el directorio me gustaría tener que escribir en un mensaje a mí en un registro personalizado. ¿Cómo se crea esta excepción.

Advertencia: mkdir () [function.mkdir]: archivo existe

¿Fue útil?

Solución

  

Me gustaría tener que escribir en un mensaje a mí en un registro personalizado.

la solución es muy fácil. PHP tiene ya todo para usted:

ini_set('display_errors',0);
ini_set('log_errors',1);
ini_set('error_log','/path/to/custom.log');

o la misma configuración en php.ini o .htaccess
Creo que sería mejor que escribir cada posible error manualmente

Si no desea que este error al iniciar sesión (ya que no puede ser error, sino parte de la lógica de la aplicación), se puede comprobar la existencia de carpetas primera

if (!file_exists($folder)) mkdir($folder);
else {/*take some appropriate action*/}

Otros consejos

Puede detener el mensaje de error se muestre ya sea mediante la supresión de mensajes de error a nivel mundial (en la configuración o en tiempo de ejecución) con el display_errors el establecimiento, o caso por caso anteponiendo la llamada de función con un @ caracteres. (Por ejemplo @mkdir('...')).

A continuación, se puede comprobar con error_get_last cuando vuelve la mkdir false.

Para el registro de errores se aplican las reglas globales. Puede registrar los errores de forma manual con error_log .

Para la lectura adicional, consulte la sección del manual sobre Tratamiento de errores .

Editar:

Como se sugiere en los comentarios, un gestor de errores a medida también es posible, sin duda más robusta (dependiendo de su aplicación), pero sin duda más elegante, solución.

function err_handler($errno, $errstr) {
    // Ignore or log error here
}

set_error_handler('err_handler');

De esta manera, el mensaje de error no se mostrará, a menos que echo explícitamente. Tenga en cuenta, sin embargo, cuando se utiliza un error_get_last manipulador personalizado volverá NULL.

Se puede reescribir cualquier función llamada al sistema con una clase como esta:

file: system.php     

namespace abc;

class System {

    const CAN_NOT_MAKE_DIRECTORY = 1;

    static public function makeDirectory($path) {
        $cmd = "mkdir " . $path;
        $output = \shell_exec($cmd . " 2>&1"); // system call
        if ($output != "") {
            throw new \Exception($output, System::CAN_NOT_MAKE_DIRECTORY);
        }
        return(\TRUE);
    }

}

A continuación, puede llamar al método e interceptar la excepción:

file: index.php     

namespace abc;
require 'system.php';

try {
    System::makeDirectory($directoryName);
} catch (\Exception $e) {
    throw new \Exception($e->getMessage(), System::CAN_NOT_MAKE_DIRECTORY);
} 

Ahora se puede tratar a todos los errores del sistema con el try {...} catch(...) {...} finally {...} normalmente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top