Foros del Web » Programando para Internet » PHP »

borrar archivo con el unlink

Estas en el tema de borrar archivo con el unlink en el foro de PHP en Foros del Web. Hola llevo toda el dia consultando las FAQs y probando de todo para que me funcione el borrar archivo y nada....yo no guardo su ruta ...
  #1 (permalink)  
Antiguo 07/06/2006, 05:50
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 1 mes
Puntos: 0
borrar archivo con el unlink

Hola llevo toda el dia consultando las FAQs y probando de todo para que me funcione el borrar archivo y nada....yo no guardo su ruta en la base de datos la guardo en una variable. borrar de la base de datos me lo borra bien pero fisicamente no...Os adjunto el codigo que utilizo a ver si me podeis ayudar..

$ruta="C:/AppServ/www/Nogues/admin/Upload";

$sql = "Select nombre FROM Documentos where id_documento='".$HTTP_POST_VARS["id_documento"]."'" ;
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
echo "-->".$row;
unlink($ruta,$row);
mysql_query("delete from documentos where id_documento='".$HTTP_POST_VARS["id_documento"]."'");
header("Location: listado_archivos.php");


el nombre que guardo en la base de datos y el del archivo es el mismo, primero tendria que igualarlo para luego poner unlink($ruta,$row); pero creo q la consulta esta mal...

Gracias
  #2 (permalink)  
Antiguo 07/06/2006, 06:24
Avatar de jmqc  
Fecha de Ingreso: noviembre-2004
Ubicación: Venezuela
Mensajes: 353
Antigüedad: 19 años, 4 meses
Puntos: 1
Que tal buenos días bueno creo que estas utilizando mal la funcion UNLINK creo que cuando asignas el valor de tu direccion del servidor a la variable $ruta debes tambien asignar el nombre del archivo. EJ:

Código PHP:
$ruta="C:/AppServ/www/Nogues/admin/Upload";
$sql "Select nombre FROM Documentos where id_documento='".$HTTP_POST_VARS["id_documento"]."'" ;
$result mysql_query($sql);
$row mysql_fetch_array($result);
echo 
"-->".$row;
$ruta $ruta.$row;
unlink($ruta);
mysql_query("delete from documentos where id_documento='".$HTTP_POST_VARS["id_documento"]."'");
header("Location: listado_archivos.php"); 
creo que asi te funcionaria, prueba y cualquier cosa no dudes en preguntar.. Saludos
__________________
Ante el desconocimiento ni entendimiento de las cosas decimos que los demás estan locos.

José Quintero. Saludos.
:adios:
  #3 (permalink)  
Antiguo 07/06/2006, 07:41
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 1 mes
Puntos: 0
muchas gracias jmqc lo he probado y sigue sin funcionarme...me lo borra de la base de datos pero fisicamente no..creo que es porque ese archivo fisico no le tengo relacionado con los datos que inserto en la base de datos, no guardo la ruta de ese archivo porque creo q no hace falta y lo que al subirlo darle el mismo nombre en la base que el y no se si eso ta mal asi o q...entonces queria que me dijeran los pasos exactos que tengo q hacer, que dato necesito para que sepa que archivo tiene borrar...
  #4 (permalink)  
Antiguo 07/06/2006, 07:48
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 1 mes
Puntos: 0
Yo subo el archivo con un formulario, le inserto esos datos del formulario en mi base de datos insertando el mismo nombre con la extension que quiero subir en la base de datos asi $sql = "INSERT INTO Documentos (expediente,nombre,tipo)
VALUES (";
$sql .= "'".quitar($HTTP_POST_VARS["expediente"])."'";
$sql .= ",'".quitar($HTTP_POST_VARS["nombre"])."'";
$sql .= ",'".quitar($HTTP_POST_VARS["tipo"])."'";
$sql .= ")";
mysql_query($sql);

luego lo subo fisicamente al servidor con este script

$cadenatexto = $_POST["cadenatexto"];
echo "<p style='font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 11px;color: #000000; font-weight: bold;' >Comentario: $cadenatexto </p>";

//datos del arhivo
$nombre_archivo = $HTTP_POST_FILES['userfile']['name'];
$tipo_archivo = $HTTP_POST_FILES['userfile']['type'];
$tamano_archivo = $HTTP_POST_FILES['userfile']['size'];
//compruebo si las características del archivo son las que deseo
if (!((strpos($tipo_archivo, "pdf") || strpos($tipo_archivo, "jpeg")) && ($tamano_archivo < 100000))) {
echo "<p style='font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 11px;color: #000000; font-weight: bold;'> La extensión o el tamaño de los archivos no es correcta. </p>";
echo "<p style='font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 11px;color: #000000; font-weight: bold;'> Solo admite archivos con extension .pdf o .jpg </p>";
echo "<p style='font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 11px;color: #000000; font-weight: bold;'> Solo admite archivos con un tamaño máximo de 200kb </p>";

}else{
if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'],"C:/AppServ/www/Nogues/admin/Upload/$nombre_archivo")) {
echo "<p style='font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 11px;color: #000000; font-weight: bold;'> El archivo $nombre_archivo ha sido cargado correctamente</p>";

}else{
echo "<p style='font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 11px;color: #000000; font-weight: bold;'> Ocurrió algún problema al subir el fichero </p>";
}
}

Entonces el archivo queda en el servidor subido con el mismo nombre que esta insertado en la base de datos, entonces a partir de ese nombre supongo que se podra borrar o no se si necesito guardar algun dato mas o que pero no consigo borrarle fisicamente, solo consigo de la base de datos asi

mysql_query("delete from documentos where id_documento='".$HTTP_POST_VARS["id_documento"]."'");

aver si asi os ha quedado mas claro y me podeis ayudar que toy un poco desesperado...Gracias por la atención..
  #5 (permalink)  
Antiguo 07/06/2006, 08:08
 
Fecha de Ingreso: junio-2005
Ubicación: Madrid, España
Mensajes: 288
Antigüedad: 18 años, 9 meses
Puntos: 1
as mirado los permisos de la carpeta, quiza no tengas permisos para borrar archivos
  #6 (permalink)  
Antiguo 07/06/2006, 08:12
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 1 mes
Puntos: 0
si los tengo bien los permisos, se que el problema es fijo de que al darle la orden del unlink no coge el nombre del archivo que tiene q borrar y no se que poner tiene que tar mal la consulta....
  #7 (permalink)  
Antiguo 07/06/2006, 08:22
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 1 mes
Puntos: 0
la consulta esta mal porque el resultado que me saca es Resource id #7 uff toy desesperado.
  #8 (permalink)  
Antiguo 07/06/2006, 08:26
 
Fecha de Ingreso: junio-2005
Ubicación: Madrid, España
Mensajes: 288
Antigüedad: 18 años, 9 meses
Puntos: 1
imagino que C:/AppServ/www/Nogues/admin/Upload esta en el servidor dsde donde se lanza el script php para borrar, es decir el servidor podra borrar archivos que tenga en el servidor donde se ejecuta pero no va a borrar en ningun caso archivos del cliente que ejecute el script.
De todas formas accede de forma relativa al archivo es decir imaginate que lo tienes en una carpeta con nombre "upload" por encima del archivo php que lo ejecuta entonces la ruta seria $ruta="upload/$nombre_archivo"; o si estuviese por debajo seria $ruta="../upload/$nombre_archivo";
  #9 (permalink)  
Antiguo 07/06/2006, 08:39
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 1 mes
Puntos: 0
he probado esto aunque creo q no me sirve porque entiendo que comprueba si hay archivos y entonces lo borra pero ademas me da fallo de permisos
$dir="C:/AppServ/www/Nogues/admin/Upload";
if(file_exists($dir))
{
if(unlink($dir))
print "El archivo fue borrado";
}
else
print "Este archivo no existe";

Warning: unlink(C:/AppServ/www/Nogues/admin/Upload): Permission denied in c:\appserv\www\nogues\admin\borrar_archivo.php on line 30
  #10 (permalink)  
Antiguo 07/06/2006, 08:43
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 1 mes
Puntos: 0
Por lo que zekenet hay q poner la ruta entera con el nombre del archivo, tengo primero que recoger el nombre del archivo porque va a ver mas de uno........y no me sale y creo ademas que tenias razon y voy a tener problemas de permisos...como miro si tengo permiso para borrarlo o modificarlo?
  #11 (permalink)  
Antiguo 07/06/2006, 08:46
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 1 mes
Puntos: 0
menudo lio tengo con una cosa que a priori es sencilla, primero tendre que recoger el nombre del archivo y luego borrarlo poniendo la ruta incluyendo el nombre del archivo no? Toy liado...Gracias por tu paciencia
  #12 (permalink)  
Antiguo 07/06/2006, 08:48
 
Fecha de Ingreso: junio-2005
Ubicación: Madrid, España
Mensajes: 288
Antigüedad: 18 años, 9 meses
Puntos: 1
depende tienes servidor windows o linux y tambien depende de que que tu hosting te deje hacerlo a ti si no lo tendras que solicitar a ellos
  #13 (permalink)  
Antiguo 07/06/2006, 08:49
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 1 mes
Puntos: 0
no no, estoy ejecutandolo localmente en localhost con el APPSERV con windows
  #14 (permalink)  
Antiguo 07/06/2006, 09:50
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 1 mes
Puntos: 0
No me voy a rendir, he creado la carpeta dandola los permisos 0777 asi que por los permisos no va a ser voy a intentar empezar de 0, una vez que lo tengo subido lo borro asi de la base de datos.
mysql_query("delete from documentos where id_documento='".$HTTP_POST_VARS["id_documento"]."'");

osea q si consigo que me borre de la BD tengo q conseguir que me lo borre fisicamente de la carpeta del servidor donde la tengo subido, primero tendre que borrarlo fisicamente y luego de la base, aver si alguien ya me puede ayudar, gracias
  #15 (permalink)  
Antiguo 08/06/2006, 03:46
Avatar de Javiglez  
Fecha de Ingreso: marzo-2006
Ubicación: Valladolid
Mensajes: 496
Antigüedad: 18 años, 1 mes
Puntos: 0
Sigo sin rendirme, ahora lo tengo asi pero siggue sin funcionarme porque no me debe de recoger el nombre del archivo con la consulta y no me lo borra a ver si veis el fallo..el nombre del archivo coincide con el campo nombre de la tabla documentos al darlo de alta por eso necesito recogerlo con una consulta, guardarlo en la variable $archivo y asi ejecutar elunlink, y luego borrar el registro de la base que si que me lo hace... A ver si alguien me ayudar gracias.

$dir="C:/AppServ/www/Nogues/Upload";

//aki la consulta para seleccionar ese archivo
$sql=mysql_query("SELECT * from documentos where expediente='".$HTTP_POST_VARS["expediente"]."'
AND nombre='".$HTTP_POST_VARS["nombre"]."'");
$result = mysql_query($sql);

$result="$archivo";
unlink("$dir/$archivo");
//borra el registro del archiv de la base de datos
mysql_query("delete from documentos where id_documento='".$HTTP_POST_VARS["id_documento"]."'");
header("Location: listado_archivos.php");
  #16 (permalink)  
Antiguo 27/06/2006, 09:07
Avatar de elcamaleon007  
Fecha de Ingreso: julio-2004
Ubicación: Asunción - Paraguay
Mensajes: 256
Antigüedad: 19 años, 9 meses
Puntos: 0
te sirve esto?
  #17 (permalink)  
Antiguo 27/06/2006, 09:25
Avatar de elcamaleon007  
Fecha de Ingreso: julio-2004
Ubicación: Asunción - Paraguay
Mensajes: 256
Antigüedad: 19 años, 9 meses
Puntos: 0
tal vez pueda ayudarte esto tambien
saludos.. ^^
  #18 (permalink)  
Antiguo 27/06/2006, 09:39
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 18 años, 4 meses
Puntos: 1
Hola,
dices en tu último ejemplo:
Cita:
$result = mysql_query($sql);
$result="$archivo";
¿dónde está declarada la variable $archivo? También dices:

Código PHP:
$sql mysql_query("SELECT * from documentos where expediente='".addslashes($_POST["expediente"])."' AND nombre='".addslashes($_POST["nombre"])."'");
$result mysql_query($sql); 
¿no ves nada raro? ¿Por qué haces dos veces mysql_query? La segunda vez que lo hagas almacenarás en $result el manejador del recordset obtenido. Lo menor que podemos hacer es calmarnos.

En tu caso, podríamos hacer:
Código PHP:
$dir="C:/AppServ/www/Nogues/Upload";
$sql "SELECT * from documentos where expediente='".addslashes($_POST["expediente"])."' AND nombre='".addslashes($_POST["nombre"])."' LIMIT 0,1");
$result mysql_query($sql);
if(
mysql_num_rows(result) > 0){
    
$row mysql_fetch_assoc($result);
    
$result$row['archivo']; // suponiendo que el nombre nombre del fichero este almacenado en el campo 'archivo' de la base de datos
    
unlink($dir ."/".$archivo);
    
mysql_query("delete from documentos where id_documento='".(int)addslashes($_POST["id_documento"])."' LIMIT 1");
}
header("Location: listado_archivos.php"); 
repasa el código a ver si te puede valer, ya nos cuentas
__________________
http://www.nosoynadie.net/
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 09:02.