Saltar al contenido

PHP unlink() manejando la excepción

Esta es la solución más correcta que encomtrarás compartir, pero primero obsérvala pausadamente y valora si es compatible a tu proyecto.

Solución:

Si solo desea suprimir el error, puede hacer esto:

@unlink('your_file_name');

Generalmente, en php, @ suprimirá cualquier error.

La mejor manera es minimizar la probabilidad de error. Usted ha dicho que una de las posibilidades de error es causada por un archivo que no existe. Si yo fuera tú, haría esto:

if(file_exists('your_file_name'))
    unlink('your_file_name');
else
    echo 'file not found';

Buena suerte 🙂

unlink no arroja excepciones, genera errores. La forma correcta de hacer esto es verificar que el archivo exista antes de intentar llamar unlink en eso. Si simplemente está preocupado por no tener la salida de errores, entonces simplemente debe apagar display_errors lo que siempre debe hacer en un entorno de producción de todos modos. Entonces simplemente se registrarán.

No suprima los errores con el @rara vez es aconsejable.

¿Puedes ser más descriptivo sobre @

No estoy seguro de lo que quieres decir exactamente. Pero la documentación está aquí. En cuanto a por qué no quieres usarlo… Eso es porque nunca sabes que el código no funciona o es problemático. Incluso si el código aún funciona desde una perspectiva funcional, todavía tiene un problema y ese problema podría hacer que otra cosa no funcione por completo en algún momento. Si nunca tiene el error, probablemente perderá mucho tiempo depurando.

Está bien cambiar su nivel de registro o deshabilitar la visualización de errores, pero nunca querrá suprimirlos por completo.

Este método puede parecer extraño, pero creo que es el más infalible, tiene en cuenta las “condiciones de carrera”.

  • mkdir-condición de carrera
  • file_put_contents-carrera-condición

es_archivo

if(is_file($file) && @unlink($file))
    // delete success
 else if (is_file ($file)) 
    // unlink failed.
    // you would have got an error if it wasn't suppressed
 else 
  // file doesn't exist

¿Por qué?

En primer lugar, is_file es el método correcto para verificar si un ARCHIVO existe, no file_exists. file_exists comprueba tanto los directorios como los archivos, por lo que puede devolver el TRUE para un directorio con el mismo nombre de archivo, no puede eliminar un directorio con desvincular y al hacerlo arrojará un error.

Verificar que existe un archivo (is_file) antes de desvincularlo es la forma correcta/mejor de eliminar un archivo.

if(is_file($file) && unlink($file)){

Pero no es un método infalible, ya que es común que un archivo se elimine en la pequeña ventana entre la comprobación de is_file y la desvinculación. He experimentado esto varias veces cuando un método de almacenamiento en caché usa el sistema de archivos.

Pero es el mejor método disponible.

¡Así que puedes hacer todo bien y aun así obtener un error!

Bueno, al menos el error te dice si falla… bueno, en realidad puedes saber si falla sin el error.

desconectar

Devoluciones TRUE en el éxito o FALSE sobre el fracaso

Si lo ha codificado correctamente y puede diferenciar entre un desvinculo exitoso y fallido, entonces SÍ suprimir el errorno lo beneficia a usted ni a su código.

Ya sea que el error se suprima o no, este es el mejor método que se me ocurre para evitar que suceda. Al reducir el tiempo entre la verificación y la eliminación, reducirá la probabilidad de que arroje un error.

EDITAR: URL de enlace actualizadas

Recuerda que tienes autorización de valorar este escrito si descubriste tu traba justo a tiempo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *