Foros del Web » Programando para Internet » PHP »

Comportamiento raro funcion unlink

Estas en el tema de Comportamiento raro funcion unlink en el foro de PHP en Foros del Web. Hola, estoy teniendo problemas con la funcion unlink. El php que hice pretende modificar la Base de datos cambiando el contenido de un campo para ...
  #1 (permalink)  
Antiguo 10/10/2012, 14:47
 
Fecha de Ingreso: septiembre-2012
Ubicación: Argentina
Mensajes: 43
Antigüedad: 12 años, 2 meses
Puntos: 0
Comportamiento raro funcion unlink

Hola, estoy teniendo problemas con la funcion unlink.
El php que hice pretende modificar la Base de datos cambiando el contenido de un campo para que refiera a una foto diferente a la que ya esta, y que ademas mueva el archivo que se corresponde con lo que marca la base de datos a la carpeta correspondiente para que luego se pueda visualizar.

Ahora quise agregarle lineas de codigo para que al reemplazar la vieja foto por una nueva, esta se elimine de la carpeta.

if($Foto =! ''){
if(is_file('../'.$fotovieja) ){
unlink( '../'.$fotovieja);
}
}

Pero estoy teniendo un problema extraño.

Sin esas lineas, todo funciona bien.
Pero cuando agrego esas lineas, la foto que se debe eliminar con UNLINK se elimina
pero sin embargo la foto que se mueve a la carpeta se nombre como "1"
y tambien en la base de datos, se nombre como "1".
Y funciona! solo que se nombra como "1", sin extension. Nada de "1.jpg"
Estoy confundido.

Este es el codigo pertinente.

Código PHP:
$cnx mysql_connect('localhost','root','saracatunga');
mysql_select_db("arrorro");

$Nombre $_POST['Nombre']; 
$Descripcion $_POST['Descripcion'];
$Id $_POST['Id'];
///////////
$consulta4modik1 "SELECT * FROM kitnombres
            WHERE kitnombre = '$Id'"
;
$resultado4modik1 mysql_query($consulta4modik1) or die(mysql_error());
$fila4modik1 mysql_fetch_array($resultado4modik1) or die(mysql_error());
$IDP $fila4modik1['IDK'];
$fotovieja $fila4modik1['fotogrande'];
//////////

$fotoName $_FILES['Foto']['name'];


$Foto             $fotoName;

if(
$Foto =! ''){
    if(
is_file('../'.$fotovieja) ){
    
unlink'../'.$fotovieja);
    }
}

if(
$Foto ==''){ //proteccion si no llega nada agarra el que ya esta
    
$Foto $fila4modik1['fotogrande'];
}else{
    
$tmpName  $_FILES['Foto']['tmp_name']; //si este y ruta los pongo arriba me da error
$ruta "../$Foto";
move_uploaded_file($tmpName$ruta);

$original imagecreatefromjpeg('../'.$Foto);
$ancho_original imagesx$original );
$alto_original =  imagesy$original );

$ancho_final 500;
$alto_final 500;
    
if(
ancho_original!=ancho_final or alto_original!=alto_final){
    
$destino imagecreatetruecolor($ancho_final,$alto_final);
    
imagecopyresampled$destino$original0,0,0,0,$ancho_final,$alto_final,$ancho_original,$alto_original );
    
imagejpeg$destino '../'.$Foto);
    
//echo '</br>'.$destino; funca
}
}
//echo $Id; funca


if($Nombre ==''){
    
$Nombre $fila4modik1['kitnombre'];
}

if(
$Descripcion ==''){
    
$Descripcion $fila4modik1['kitdescripcion'];
}


$consulta4modik2 "UPDATE kitnombres SET 
             kitdescripcion='$Descripcion',
             fotogrande='$Foto',
             kitnombre='$Nombre' 
             WHERE IDK = $IDP"

             
$consultando4modik mysql_query($consulta4modik2) or die("</br>El error es que "mysql_error());
header("Location: ../../home.php?seccion=kit&n=$IDP"); 
Las rutas son estas:
C:\AppServ\www\arrorro\SETS

y el archivo del codigo que postie, se encuentra en

C:\AppServ\www\arrorro\SETS\EDITAR

por favor, me pueden aconsejar?

Última edición por lionel1989; 10/10/2012 a las 14:55
  #2 (permalink)  
Antiguo 10/10/2012, 17:08
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Comportamiento raro funcion unlink

Código PHP:
Ver original
  1. <?php
  2. $cnx = mysql_connect('localhost','root','saracatunga');
  3. mysql_select_db("arrorro");
  4.  
  5. $Nombre = $_POST['Nombre'];
  6. $Descripcion = $_POST['Descripcion'];
  7. $Id = $_POST['Id'];
  8. ///////////
  9. $consulta4modik1 = "SELECT * FROM kitnombres
  10.            WHERE kitnombre = '$Id'";
  11. $resultado4modik1 = mysql_query($consulta4modik1) or die(mysql_error());
  12. $fila4modik1 = mysql_fetch_array($resultado4modik1) or die(mysql_error());
  13. $IDP = $fila4modik1['IDK'];
  14. $fotovieja = $fila4modik1['fotogrande'];
  15. //////////
  16.  
  17. $Foto = $_FILES["Foto"]["name"];
  18.  
  19. if($Foto =! ''){
  20.     if(is_file('../'.$fotovieja) ){
  21.     unlink( '../'.$fotovieja);
  22.     }
  23. }
  24.  
  25. if($Foto ==''){ //proteccion si no llega nada agarra el que ya esta
  26.     $Foto = $fila4modik1['fotogrande'];
  27. }else{
  28.     $tmpName  = $_FILES["Foto"]["tmp_name"]; //si este y ruta los pongo arriba me da error
  29.     $ruta = "../$Foto";
  30.     move_uploaded_file($tmpName, $ruta);
  31. Echo('$Foto='.$Foto.';$Ruta='.$Ruta.'$tmpName='.$tmpName);//fijate que datos hay aca
  32. $original = imagecreatefromjpeg('../'.$Foto);
  33. $ancho_original = imagesx( $original );
  34. $alto_original =  imagesy( $original );
  35.  
  36. $ancho_final = 500;
  37. $alto_final = 500;
  38.    
  39. if(ancho_original!=ancho_final or alto_original!=alto_final){
  40.     $destino = imagecreatetruecolor($ancho_final,$alto_final);
  41.     imagecopyresampled( $destino, $original, 0,0,0,0,$ancho_final,$alto_final,$ancho_original,$alto_original );
  42.     imagejpeg( $destino , '../'.$Foto);
  43.     //echo '</br>'.$destino; funca
  44. }
  45. }
  46. //echo $Id; funca
  47.  
  48.  
  49. if($Nombre ==''){
  50.     $Nombre = $fila4modik1['kitnombre'];
  51. }
  52.  
  53. if($Descripcion ==''){
  54.     $Descripcion = $fila4modik1['kitdescripcion'];
  55. }
  56.  
  57.  
  58. $consulta4modik2 = "UPDATE kitnombres SET
  59.             kitdescripcion='$Descripcion',
  60.             fotogrande='$Foto',
  61.             kitnombre='$Nombre'
  62.             WHERE IDK = $IDP";
  63.              
  64. $consultando4modik = mysql_query($consulta4modik2) or die("</br>El error es que ". mysql_error());
  65. header("Location: ../../home.php?seccion=kit&n=$IDP");

prueba con eso y dime que te muestra?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #3 (permalink)  
Antiguo 10/10/2012, 17:51
 
Fecha de Ingreso: septiembre-2012
Ubicación: Argentina
Mensajes: 43
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Comportamiento raro funcion unlink

Perdon por la tardanza, hemos tenido un contratiempo aqui en la oficina..

Lo que me muestra es esto:

$Foto=1;$Ruta=$tmpName=C:\WINDOWS\Temp\phpEB.tmp
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\arrorro\SETS\EDITAR\kit_modificar.p hp:1) in C:\AppServ\www\arrorro\SETS\EDITAR\kit_modificar.p hp on line 65
  #4 (permalink)  
Antiguo 10/10/2012, 18:13
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: Comportamiento raro funcion unlink

Ese error es muy común, cuando envías salidas en pantalla antes de la función header, o tenes espacios en blanco antes de <?php.
http://www.php.net/manual/es/function.header.php
lo dice el manual, fijate que está pasando en tu código, a ver si envias algo a mostrar en pantalla antes del header
  #5 (permalink)  
Antiguo 10/10/2012, 18:25
 
Fecha de Ingreso: septiembre-2012
Ubicación: Argentina
Mensajes: 43
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Comportamiento raro funcion unlink

Cita:
Iniciado por rodrigo791 Ver Mensaje
Ese error es muy común, cuando envías salidas en pantalla antes de la función header, o tenes espacios en blanco antes de <?php.
[url]http://www.php.net/manual/es/function.header.php[/url]
lo dice el manual, fijate que está pasando en tu código, a ver si envias algo a mostrar en pantalla antes del header
No, la verdad que meparece que no es eso. Tuve cuidado de no mandar un echo antes..
El tema es que me transforma el nombre del archivo en "1" sin extension
  #6 (permalink)  
Antiguo 10/10/2012, 18:29
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: Comportamiento raro funcion unlink

mostranos solo la parte del código en la cual almacenas el archivo en su directorio correspondiente
  #7 (permalink)  
Antiguo 10/10/2012, 18:43
 
Fecha de Ingreso: septiembre-2012
Ubicación: Argentina
Mensajes: 43
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Comportamiento raro funcion unlink

Si te entendi bien, es esto

Código PHP:
$tmpName  $_FILES['Foto']['tmp_name']; //si este y ruta los pongo arriba me da error
$ruta "../$Foto";
move_uploaded_file($tmpName$ruta); 
  #8 (permalink)  
Antiguo 10/10/2012, 19:19
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: Comportamiento raro funcion unlink

Código PHP:
Ver original
  1. $tmpName  = $_FILES['Foto']['tmp_name'];
  2.  
  3. $nombre = $_FILES['Foto']['name'];
  4.  
  5. $ruta = "directorio/";
  6. move_uploaded_file($tmpName, $ruta.$nombre);  //concateno la ruta con el nombre real del archivo, asi indico que la ruta será directorio/archivo.extension
y si intentas con algo como esto?
  #9 (permalink)  
Antiguo 10/10/2012, 19:49
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Comportamiento raro funcion unlink

el error del header es tema aparte, no creo que tenga nada que ver con esto.
Código PHP:
Ver original
  1. Echo('Prueba1='.$_FILES["Foto"]["name"].';Prueba2='.$_FILES["foto"]["name"]);//fijate que datos ahora hay aca

prueba con lo que te paso rodrigo, si no te anda, pon esta linea en lugar de la otra y dime que vez en este caso
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #10 (permalink)  
Antiguo 10/10/2012, 20:27
 
Fecha de Ingreso: septiembre-2012
Ubicación: Argentina
Mensajes: 43
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Comportamiento raro funcion unlink

Antes que nada, gracias por la ayuda.

COn la respuesta de Rodrigo no pude hacerlo funcionar,
pero con esta linea que me has dicho tu

me da

Prueba1=palom.jpg;Prueba2=
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\arrorro\SETS\EDITAR\kit_modificar.p hp:31) in C:\AppServ\www\arrorro\SETS\EDITAR\kit_modificar.p hp on line 65

sigue pasando el archivo como "1"
  #11 (permalink)  
Antiguo 10/10/2012, 20:36
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: Comportamiento raro funcion unlink

lo de header es 1 problema a parte, solucionalo por parte, antes del header no puede haber nada de echos, nada de mysql_error, nada de die, nada de nada.

De la forma que te lo di yo tiene que funcionar siempre, no hay forma de que no funcione, mostrame como lo implementaste a ver en que estas fallando
  #12 (permalink)  
Antiguo 10/10/2012, 20:40
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Comportamiento raro funcion unlink

Código PHP:
Ver original
  1. $tmpName  = $_FILES["Foto"]["tmp_name"]; //si este y ruta los pongo arriba me da error
  2.     $ruta = "../$_FILES[Foto][name]";
  3.     move_uploaded_file($tmpName, $ruta);

prueba con eso, pero en definitiva estamos destilando en el codigo de rodrigo porque como bien dise no hay muchas formas de hacer esto
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #13 (permalink)  
Antiguo 10/10/2012, 20:51
 
Fecha de Ingreso: septiembre-2012
Ubicación: Argentina
Mensajes: 43
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Comportamiento raro funcion unlink

Hostia reputa.

He puesto el codigo , NSD,
me sale

Prueba1=satu.JPG;Prueba2=
Warning: imagecreatefromjpeg(../1) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in C:\AppServ\www\arrorro\SETS\EDITAR\kit_modificar.p hp on line 32

Warning: imagesx(): supplied argument is not a valid Image resource in C:\AppServ\www\arrorro\SETS\EDITAR\kit_modificar.p hp on line 33

Warning: imagesy(): supplied argument is not a valid Image resource in C:\AppServ\www\arrorro\SETS\EDITAR\kit_modificar.p hp on line 34

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\AppServ\www\arrorro\SETS\EDITAR\kit_modificar.p hp on line 41

Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\arrorro\SETS\EDITAR\kit_modificar.p hp:31) in C:\AppServ\www\arrorro\SETS\EDITAR\kit_modificar.p hp on line 65

He aqui todo mi codigo otra vez.


Código PHP:
<?php
$cnx 
mysql_connect('localhost','root','saracatunga');
mysql_select_db("arrorro");
 
$Nombre $_POST['Nombre'];
$Descripcion $_POST['Descripcion'];
$Id $_POST['Id'];
///////////
$consulta4modik1 "SELECT * FROM kitnombres
           WHERE kitnombre = '$Id'"
;
$resultado4modik1 mysql_query($consulta4modik1) or die(mysql_error());
$fila4modik1 mysql_fetch_array($resultado4modik1) or die(mysql_error());
$IDP $fila4modik1['IDK'];
$fotovieja $fila4modik1['fotogrande'];
//////////
 
$Foto $_FILES["Foto"]["name"];
 
if(
$Foto =! ''){
    if(
is_file('../'.$fotovieja) ){
    
unlink'../'.$fotovieja);
    }
}
 
if(
$Foto ==''){ //proteccion si no llega nada agarra el que ya esta
    
$Foto $fila4modik1['fotogrande'];
}else{
        
$tmpName  $_FILES["Foto"]["tmp_name"]; //si este y ruta los pongo arriba me da error
        
$ruta "../$_FILES[Foto][name]";
        
move_uploaded_file($tmpName$ruta);
    Echo(
'Prueba1='.$_FILES["Foto"]["name"].';Prueba2='.$_FILES["foto"]["name"]);//fijate que datos ahora hay aca
$original imagecreatefromjpeg('../'.$Foto);
$ancho_original imagesx$original );
$alto_original =  imagesy$original );
 
$ancho_final 500;
$alto_final 500;
   
if(
ancho_original!=ancho_final or alto_original!=alto_final){
    
$destino imagecreatetruecolor($ancho_final,$alto_final);
    
imagecopyresampled$destino$original0,0,0,0,$ancho_final,$alto_final,$ancho_original,$alto_original );
    
imagejpeg$destino '../'.$Foto);
    
//echo '</br>'.$destino; funca
}
}
//echo $Id; funca
 
 
if($Nombre ==''){
    
$Nombre $fila4modik1['kitnombre'];
}
 
if(
$Descripcion ==''){
    
$Descripcion $fila4modik1['kitdescripcion'];
}
 
 
$consulta4modik2 "UPDATE kitnombres SET
            kitdescripcion='$Descripcion',
            fotogrande='$Foto',
            kitnombre='$Nombre'
            WHERE IDK = $IDP"
;
             
$consultando4modik mysql_query($consulta4modik2) or die("</br>El error es que "mysql_error());
header("Location: ../../home.php?seccion=kit&n=$IDP");
?>
gracias por su ayuda, esto me saca de quicio
  #14 (permalink)  
Antiguo 10/10/2012, 21:08
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: Comportamiento raro funcion unlink

tenes 1 monton de errores.

te recomiendo que vallas comentando codigo para ir solucionandolos de a 1.

Código PHP:
Ver original
  1. $tmpName  = $_FILES['Foto']['tmp_name']; //si este y ruta los pongo arriba me da error
  2.         $ruta = "carpeta/".$_FILES['Foto']['name']; //create 1 carpeta llamada "carpeta" en donde corres el script este, ahí se van a guardar las imágenes.
  3.  
  4.         move_uploaded_file($tmpName, $ruta);

olvidate de lo otro, vamos a el tema de mover la imagen, aplica esto
  #15 (permalink)  
Antiguo 10/10/2012, 21:37
 
Fecha de Ingreso: septiembre-2012
Ubicación: Argentina
Mensajes: 43
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Comportamiento raro funcion unlink

Muy bien, eso lo aplique, y la mueve a donde debe moverla.
Queda la eliminacion
  #16 (permalink)  
Antiguo 10/10/2012, 21:40
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: Comportamiento raro funcion unlink

y porque no la haces? que esperas? es lo mismo, solo que usa el directorio que te dije ( la carpeta llamada carpeta ) no es tan dificil no? ::
  #17 (permalink)  
Antiguo 10/10/2012, 21:47
 
Fecha de Ingreso: septiembre-2012
Ubicación: Argentina
Mensajes: 43
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Comportamiento raro funcion unlink

Cita:
Iniciado por rodrigo791 Ver Mensaje
y porque no la haces? que esperas? es lo mismo, solo que usa el directorio que te dije ( la carpeta llamada carpeta ) no es tan dificil no? ::

Es que..
Lo acabo de hacer, pero me vuelve a crear el archivo "1"



Chicos, les agradezco pero dejen.
Voy a tratar de cambiar la consigna del IF o de buscarle otra vuelta.
Voy a tratar de ayudarme con los tips que me pusieron.

Y cuando encuentre que funciona, posteare el codigo para el proximo desafortunada que tenga el problema que yo. Pero aca hay algo extraño.- Debe ser algo que no alcanzan a darse cuenta y que yo solo puedo ver.

Gracias enserio por la ayuda !!
  #18 (permalink)  
Antiguo 10/10/2012, 21:50
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: Comportamiento raro funcion unlink

Código PHP:
Ver original
  1. $nombreFoto = $_FILES['Foto']['name'];
  2. unlink("carpeta/".$nombreFoto);
  #19 (permalink)  
Antiguo 10/10/2012, 22:21
 
Fecha de Ingreso: septiembre-2012
Ubicación: Argentina
Mensajes: 43
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Comportamiento raro funcion unlink

Cita:
Iniciado por rodrigo791 Ver Mensaje
Código PHP:
Ver original
  1. $nombreFoto = $_FILES['Foto']['name'];
  2. unlink("carpeta/".$nombreFoto);
Rodrigo lo hice pero no me funciono porque me sigue creando el archivo con el "1"
vayan a descansar que estan ayudandome hace mas de 1 hora
ya lo voy a solucionar.. : D
  #20 (permalink)  
Antiguo 10/10/2012, 23:36
 
Fecha de Ingreso: septiembre-2012
Ubicación: Argentina
Mensajes: 43
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Comportamiento raro funcion unlink

He dado con la respuesta !

Código PHP:
if($Foto ==''){ //proteccion si no llega nada agarra el que ya esta
    
$activarborrado false;
    
$Foto $fila4modik1['fotogrande'];
}else{
    
$activarborrado true;
    echo 
'$Foto es= '.$Foto;
    echo 
'Fotovieja es= '.$fotovieja;
    
$tmpName  $_FILES['Foto']['tmp_name']; //si este y ruta los pongo arriba me da error
$ruta "../$Foto";
move_uploaded_file($tmpName$ruta); 
................................ etcetera..

y al final:

Código PHP:
$rute '../';
$direccion $rute.$fotovieja;
if(
$activarborrado == true){
    if(
file_exists($direccion) ){
    
unlink'../'.$fotovieja);
    echo 
'todobien';
    }else{
        echo 
'todomal';
}

Creo que el meollo del asunto era este

Código PHP:
$rute '../';
$direccion $rute.$fotovieja

Hacer la combinacion en una sola variable porque sino se puede marear el file_exists :D

Saludos!!

Pueden cerrar el tema! :aplausos:

Etiquetas: comportamiento, funcion, mysql, raro, sql, unlink
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 14:33.