ubiquiti - mkdir() permission denied in php
¿Cómo encontrar una razón cuando mkdir falla desde PHP? (3)
La función mkdir de PHP solo devuelve verdadero y falso. Problema es cuando devuelve falso.
Si estoy ejecutando con el informe de errores habilitado, veo el mensaje de error en la pantalla. También puedo ver el mensaje de error en el registro de Apache. Pero me gustaría captar el texto del mensaje y hacer otra cosa con él (por ejemplo, enviarme a mí mismo a través de IM) ¿Cómo obtengo el texto de error?
Actualización: Siguiendo la idea de Ayman, llegué a esto:
function error_handler($errno, $errstr) {
global $last_error;
$last_error = $errstr;
}
set_error_handler(''error_handler'');
if (!mkdir(''/somedir''))
echo "MKDIR failed, reason: $last_error/n";
restore_error_handler();
Sin embargo, no me gusta porque usa variable global. ¿Alguna idea para una solución más limpia?
Podrías usar excepciones:
Configura un código así:
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
Y luego simplemente hacer:
try {
mkdir(''/somedir'');
} catch(ErrorException $ex) {
echo "Error: " . $ex->getMessage();
}
Eso debería hacer lo que quieras.
Si desea conservar el controlador de errores de php, luego de eso intente el bloque catch, simplemente llame:
restore_error_handler()
Puede suprimir la advertencia y hacer uso de error_get_last()
:
if (!@mkdir($dir)) {
$error = error_get_last();
echo $error[''message''];
}
Yo uso algo como lo siguiente:
if(! @mkdir(''$fileLocation'', 0777, $recursive = true)){
$mkdirErrorArray = error_get_last();
throw new Exception(''cant create directory '' .$mkdirErrorArray[''message''], 1);
}