Foros del Web » Programando para Internet » PHP »

Por qué unlink me da un warning?

Estas en el tema de Por qué unlink me da un warning? en el foro de PHP en Foros del Web. hola, es más que nada un cuestión de conceptos. Si unlink() es un bool que: Cita: Iniciado por php.net Devuelve TRUE si todo se llevó ...
  #1 (permalink)  
Antiguo 18/07/2006, 11:40
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Por qué unlink me da un warning?

hola, es más que nada un cuestión de conceptos.

Si unlink() es un bool que:
Cita:
Iniciado por php.net
Devuelve TRUE si todo se llevó a cabo correctamente, FALSE en caso de fallo.
... ¿por qué al hacer esto me da un warning? (además de arrojarme correctamente el mensaje de "no existía")

Código PHP:
if(unlink($_SERVER["DOCUMENT_ROOT"] . "/carpeta/archivito_inexistente.txt")){
    echo 
"borrado!";
}
else{
    echo 
"no existía";

¿ese warning no sería evitado, mediante el if, con el false que devuelve unlink al no encontrar el archivo?

Gracias y saludos

EDIT: No necesito solucionar el tema, ya le hice un file_exists(). Es una pregunta... filosófica si se quiere
__________________
...___...
  #2 (permalink)  
Antiguo 18/07/2006, 11:51
Avatar de turco_7  
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.044
Antigüedad: 20 años, 4 meses
Puntos: 19
Me llama la atencion lo que acabas de comentar, pero nose porque sera que pasa eso .. !!!!

Yo probaria, ahora no porque ando con poco tiempo ...

Código PHP:
$var unlink($archivo);
echo 
$var
saludos !
__________________
Mi Blog http://turco7.blogspot.com
Usuario Linux : 404289
Mi última página: http://www.digitalservicecba.com.ar - Reparacion de camaras digitales!
  #3 (permalink)  
Antiguo 18/07/2006, 11:54
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
También probé eso antes de escribir este tema y me arrojó el warning.
__________________
...___...
  #4 (permalink)  
Antiguo 18/07/2006, 12:10
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
De acuerdo

¿Tienes los permisos adecuados en dicha ruta?

Saludillos.
  #5 (permalink)  
Antiguo 18/07/2006, 12:13
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 7 meses
Puntos: 55
siempre la funcion unlink() devuelve un warning cuando no existe el archivo por eso yo uso

if(file_exists($archivo))
unlink($archivo);

slaudos
  #6 (permalink)  
Antiguo 18/07/2006, 12:16
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Bueno, pero entones... ¿como es?
¿Tengo que tener permisos adecuados en la ruta, siempre devuelve un warning o sólo devuelve warning dependiendo del nivel de alertas?
__________________
...___...
  #7 (permalink)  
Antiguo 18/07/2006, 15:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
La teoría o descripción de la función es como dices ..

Lo que no sé si controlando el mensaje de error ya sea por "error_Reporting()" o con el operador @ eliminas el hecho de presentar el error (lo digo por qué dices que te marca un "Warning" (no un "Notice" o "Fatal" ..)

Prueba:

Código PHP:
if (@unlink(.....)){
  
// se eliminó el archivo
} else {
  
// no se eliminó

Igualmente es buena práctica lo que ya haces, verificar si existe el archivo antes de pretender eliminarlo. Si luego tienes permisos de escritura/borrado .. teóricamente la función te debería devolver "False" y a su vez mostrar el "Warning" .. si lo ocultas con @ para ese caso concreto sería lo ideal (así controlas tu mensaje de error por tu parte).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 18/07/2006, 16:13
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Bueno, la verdad no entendí del todo lo que hacen las arrobas o el error_reporting() :(

Tendré que ponerme a leer un poco más para comprender la escencia de algunas cosas del mundo pieichpí ;)
__________________
...___...
  #9 (permalink)  
Antiguo 18/07/2006, 18:53
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Hola. Solo quiero agregar mi forma de ver a ese Warning. Como bien dice la documentación "Devuelve true si todo salio bien, false si ocurrio un error.", pero yo esta frase la tomo de la siguiente forma:

Esta función devuelve true si salio todo bien. (Esto era obvio, pero por las dudas lo vuelvo a escribir).
Devuelve false si ocurrio algún error, lo cual yo interpreto como error, falta de permisos, ya esta siendo utilizado por otra aplicación (si esta en win, no se si esto se cumple en GNU/Linux), o 2 personas intentan a la ves hacer lo mismo.
Pero devuelve un warning cuando este no existe, este no es un "error" al intentar hacerlo, si no que el archivo no existe y la accion es una accion invalida.

Espero que me entiendan y me corrijan si me equivoco.

Saludos.

PD: Solo a modo de prueba, en un servidor Win manten abierto un archivo con algun programa y desde PHP intenta borrarlo, si este no libera un warning creo que mi teoria es hacertada. (Te digo sobre un servidor Win porque no se si se cumple de la misma manera en GNU/Linux)
  #10 (permalink)  
Antiguo 18/07/2006, 20:24
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Estoy de acuerdo con DarioDario. Intentar eliminar algo que no existe merece la pena un warning.

Al Zuwaga:
La arroba se utiliza cuando queremos ocultar el reporte de errores. Si una función te genera un warning, que no te interesa atender (como en tu caso), puedes simplemente decirle al PHP "si esta función genera warning, no lo muestres".
@unlink($archivo_inexistente)

También podrías decirle al PHP "No quiero que se muestre ningún warning en ninguna parte del script". Eso lo seteas al principio mediante la función error_reporting().
error_reporting(~E_WARNING);

De todas maneras, en la mayoría de los casos es preferible no ocultar los errores (al menos en tiempo de desarrollo). Lo mejor es tratar de controlarlos, como ya te pusieron.
Código PHP:
if(file_exist($archivo)){
   if(
unlink($archivo)){
      
// se eliminó el archivo
   
}else{
      
// No se pudo eliminar
   
}
}else{
   
// El archivo no existe

  #11 (permalink)  
Antiguo 19/07/2006, 10:54
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Perfecto! me quedó clarísimo, gracias a todos.

Entonces me queda superdemostrado que en entornos de desarrollo los niveles de alertas de errores deben ser lo más alto posible para no cometer errores de lógica en el flujo de la aplicación (que era otra de mis dudas)
__________________
...___...
  #12 (permalink)  
Antiguo 19/07/2006, 11:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Al Zuwaga
Perfecto! me quedó clarísimo, gracias a todos.

Entonces me queda superdemostrado que en entornos de desarrollo los niveles de alertas de errores deben ser lo más alto posible para no cometer errores de lógica en el flujo de la aplicación (que era otra de mis dudas)
Así es .. en "desarrollo" usa niveles de reportes al máximo.

Luego en "producción" lo bajas al minimo (para que el mensaje de error propiamente dicho nunca desvele una "ruta" hacia un archivo o cualquier otro tipo de dato relevante de tu aplicación).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:36.