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";
}
?>
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?