PHP - UNLINK no funciona con extension JPEG

 
Vista:
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

UNLINK no funciona con extension JPEG

Publicado por Alejandro (172 intervenciones) el 21/12/2020 11:07:16
Hola buenos días, veréis tengo el siguiente código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
 
include("conexion.php");
 
 
$id=(isset($_GET['id']))?$_GET['id']:"";
 
 
$nombre = (isset($_POST['nombre']))?$_POST['nombre']:"";
$apellido1 = (isset($_POST['apellido1']))?$_POST['apellido1']:"";
$apellido2 = (isset($_POST['apellido2']))?$_POST['apellido2']:"";
 
//subida a directorio de foto de perfil
    $archivo = (isset ($foto)) ? $foto: NULL;
    $archivo_destino = NULL;
 
    if ($archivo) {
        $extension = pathinfo($archivo['name'], PATHINFO_EXTENSION);
        $extension = strtolower($extension);
 
        if ($extension == "jpg" or $extension == "jpeg" or $extension == "png"){
 
                $nombreArchivo = pathinfo($archivo['name'], PATHINFO_FILENAME);
 
                if($nombreArchivo == $nombre." ".$apellido1." ".$apellido2){
 
 
                    $archivo_destino = "documentos/imagenes_perfil/".basename($archivo['name']);
 
                    if(file_exists($archivo_destino)){
 
                        unlink($archivo_destino);
 
                        $archivo_ok = move_uploaded_file($archivo['tmp_name'], $archivo_destino);
 
                    }else{
 
                        $archivo_ok = move_uploaded_file($archivo['tmp_name'], $archivo_destino);
 
                    }
 
                }else{
 
                    echo "Debes subir la imagen de perfil con el nombre del usuario con este formato: <i>Maria Perez Gonzalez</i><br>";
 
                }
 
        }else if($extension==""){
 
            //NADA
 
        }else if($extension!=="jpg" or $extension!=="png"){
 
            echo "La extension de la imagen no es JPG o PNG<br/>";
        }
 
    }
 
cerrarBD();
 
?>

Tengo un formulario en el que un campo es seleccion de una foto de perfil. Lo que hago es guardar los archivos en el sistema de archivos y la ruta en una base de deatos MYSQL. Cuando modifico la foto de perfil elimino la antigua con unlink comprobando si existe archivo en la ruta que le paso al IF. El problema que tengo es que con archivo de diferentes extensiones unlink no elimina el archivo del sistema de archivos locales.

Por ejemplo, si tengo guardado un archivo en PNG pero luego elijo otro archivo con extension JPG Unlink no lo elimina. Sin embargo con la misma extension si lo hace. A que puede deberse???

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

UNLINK no funciona con extension JPEG

Publicado por Mauro (1036 intervenciones) el 21/12/2020 14:27:39
Hola Alejandro:

Suena algo extraño lo que comentas... yo te sugeriría, ante todo, verificar si el problema es efectivamente el que describes.

Prueba hacer un simple script que haga esto:

1
2
3
<?php
 
unlink('ARCHIVO.PNG');

Y chequea si la eliminación funciona (apuesto a que sí :p).

Si efectivamente lo hace entonces el problema no está en el unlink si no en la lógica de tus comparaciones.

Lo mejor que puedes hacer para encontrar el problema es correr el programa paso a paso usando un debugger.

Coméntame si tienes dudas.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

UNLINK no funciona con extension JPEG

Publicado por Alejandro (172 intervenciones) el 23/12/2020 14:16:59
Si tienes razón es la lógica de mis comparaciones. Me elimina los de la misma extensión porque el archivo destino es identico, tanto el nombre como la extensión. Uso file_exists en el archivo destino por eso me lo reconoce, pero claro al cambiar la extension el if va al else puesto que no existe...

Tendré que repensar como puedo hacerlo..

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Yoel
Val: 617
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

UNLINK no funciona con extension JPEG

Publicado por Yoel (198 intervenciones) el 21/12/2020 16:49:01
Hola Alejandro, para hacer eso que tu necesitas, primero tienes que traer el nombre de tu archivo viejo y eliminarlo, después subes el nuevo al servidor, por lo que puedo ver en tu código no me queda claro como es que lo estas haciendo para traer el nombre del archivo anterior.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

UNLINK no funciona con extension JPEG

Publicado por Alejandro (172 intervenciones) el 23/12/2020 14:07:39
Si es que se me ha olvidado poner la variable con la que recibo la foto seria así:
1
$foto = (isset($_FILES['foto']))?$_FILES['foto']:"";

Perdona
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Yoel
Val: 617
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

UNLINK no funciona con extension JPEG

Publicado por Yoel (198 intervenciones) el 23/12/2020 16:54:01
Hola, en este caso me estas colocando el código, que utilizas para subir el nuevo fichero al servidor. El código que no veo es donde estas trayendo el nombre del fichero anterior que se va a remplazar.

Nota: el nombre del fichero anterior lo tienes en base de datos.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar