Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/11/2009, 12:46
Evgeny
 
Fecha de Ingreso: noviembre-2009
Ubicación: Illes Balears
Mensajes: 3
Antigüedad: 14 años, 6 meses
Puntos: 0
Exclamación unlink() arroja error... pero no hay error, y funciona... :P

Esto es curiosísimo, y francamente he optado por evitar el mensaje de error transitoriamente hasta que descubra qué es lo que está pasando.

Se trata de borrar un archivo, ubicado en un directorio que está un nivel por encima del directorio actual (../pics/).

Ahora bien, el código es archisimple:

Código PHP:
<?php
$DefaultDir 
"../pics/";
$PicNum $_GET['Nro'];
$ref $_GET['nom'];
$CodVerif $_GET['cod'];
$DelFile $ref "_" $PicNum ".jpg";
$Borrar $DefaultDir $DelFile;
if(
$VeriCode == $CodVerif)
{
    
$Resultado unlink($Borrar);
}
else
{
    die(
"ERROR: Código de Verificación Incorrecto.");
}
if(
$Resultado)
{
    
$msg "<b>Resultado:</b> OK";
}
else
{
    
$msg "<b>Resultado:</b> ERROR";
}
?>
Simple, muy simple.

Si el código de verificación coincide con la evaluación, se ejecuta el unlink().

Este código devuelve un Warning:

Warning: unlink(../pics/foto.jpg) [function.unlink]: No such file or directory in...

Lo divertido de esto es que el archivo sí existe, y lo que me deja pasmado es que no sólo existe el archivo, sino que además UNLINK() lo está BORRANDO realmente.

Es decir, que unlink() VE el archivo, lo ENCUENTRA, lo BORRA, pero informa que no lo encuentra, y por supuesto también devuelve FALSE... como si no lo hubiera borrado...

Es como si esa línea particular se estuviera ejecutando DOS VECES, que estuviera borrando el archivo, y luego -inmediatamente- volviendo a borrarlo.

Esto viene de una validación en javascript, también hiper simple, que pide confirmación de borrado, y si se confirma el borrado, llama a un window.location con la dirección donde está el código que realmente borra el arcihivo, si no se confirma, no se ejecuta el window.location y por lo tanto no se carga el código, y no se borra nada...

Lo que hice fue poner un if(file_exists($Borrar)){unlink($Borrar)} para que simplemente no aparezca el error... y ahora sí está borrando el archivo, no aparece el WARNING pero sigue retornando FALSE.

No sé... no acabo de entender qué es lo que está pasando, y como no hay watchdog que sirva en este código, porque no hay mucho por monitorear, no sé ya qué vuelta más dar... ¿alguna idea?

Aquí creo que necesito algún super gurú, porque en teoría no es técnicamente posible que el unlink() se esté ejecutando dos veces... ¿o sí es posible? daría esa impresión... ¿no?