2012-05-08 22 views
7

Me pregunto si alguien puede ayudarme, por favor.Eliminar archivos de imagen del servidor

He creado la página this que permite a los usuarios ver sus imágenes cargadas en un formato de galería.

Ahora estoy queriendo agregar la funcionalidad de eliminación a cada imagen. He creado el botón y el Javascript detrás, pero realmente no estoy seguro de cómo vincular el "clic del botón" con la eliminación física real del archivo.

Las imágenes no se almacenan en una base de datos, pero están en dos ubicaciones de carpeta en mi servidor, en la siguiente estructura:

UploadedFiles/username/locationid/imagename y

UploadedFiles/username/locationid/Thumbnails/imagename

soy relativamente nuevo en PHP y ahora estoy llegando a los límites de mi conocimiento, pero estoy dispuesto a aprender. De la documentación que he leído, creo que estoy en lo cierto al decir que el método unlink es el comando correcto para usar.

Pero lo que estoy encontrando muy difícil es decir el código para encontrar las carpetas con las carpetas username y locationid que coinciden con la corriente username y locationid y elimine los archivos que coinciden con la variable $source nombre.

Me preguntaba si alguien podría ofrecer alguna orientación por favor sobre cómo puedo hacer esto.

Muchas gracias y un cordial saludo

Respuesta

4

Si puede pasar el nombre de usuario, LocationID, y las variables NombreImagen a su script, puede eliminar los archivos utilizando unlink():

$path = 'UploadedFiles/' . $username . '/' . $locationid . '/'; 

unlink($path . $imagename); 
unlink($path . 'Thumbnails/' . $imagename); 

Debido a que está interactuando con su sistema de archivos, querrá estar seguro y desinfectar las variables (evitar que alguien use ../../../ para llegar a partes no deseadas de su sistema de archivos).

$username = str_replace(array('..', '/', '\\', ':'), '', $username); 
$imagename = str_replace(array('..', '/', '\\', ':'), '', $imagename); 
$locationid= str_replace(array('..', '/', '\\', ':'), '', $locationid); 
+1

es posible que también desee asegurarse a escapar .. caracteres en el nombre del archivo de lo contrario podría algo así como "../../../public/index.php" –

+1

+1, gracioso creemos que estaba editando :) –

+1

No sé si es necesario mencionarlo, así que mencionaré: su código debe estructurarse para que las líneas de sanitización variables se ejecuten antes de $ path = y desvincular () líneas. –

0

Obviamente su Javascript (del lado del cliente) tendrá que llamar a un URL (del lado del servidor) para borrar la imagen que el usuario ha seleccionado. Propongo que por ahora lo hagas estáticamente (si luego quieres moverte a algo más dinámico, el paso para transformarte en ajax en algo pequeño.

Así como Set Sail Media dijo, tendrás que pasar el nombre de usuario y el ID de ubicación a su servidor al hacer clic en el botón Eliminar. Una forma de hacerlo es:

Al renderizar su galería en HTML/javascript, para cada imagen, tenía debajo una que contendrá la información necesaria y el botón Enviar se simplemente llame al script de eliminación desde su servidor. Un ejemplo de formulario que puede hacer es:

<form name="deleteImageX" method="GET" target="your.server.org/deleteImage.php"> 
     <input type="hidden" name="userName" value="theUserNameAssociatedWithThePicture" /> 
     <input type="hidden" name="locationId" value="locationOfThePicture" /> 
     <input type="submit" value="delete"/> 
    </form> 

This formulario almacenará el valor necesario en los campos ocultos que no se mostrarán en la página web, pero aún se enviarán al servidor al presionar el botón Enviar.

(para la pequeña historia, el método utilizado aquí es GET porque AFAIK HTML no admite el método DELETE (que habría sido adecuado en nuestro caso)).

El método GET llamará al script "your.server.org/deleteImage.php". En este script, tendrá toda la información que necesita (username/locationId) para eliminar la imagen utilizando las variables $ _GET ['username'] y $ _GET ['locationId']. Luego, como mencionaste, necesitarás usar el método de desvinculación para eliminar realmente el archivo del servidor.

Finalmente, una vez hecho esto, debe redirigir el script php para que, después de eliminar la imagen, vuelva a mostrar la galería (por ejemplo). Esto se puede hacer llamando a un script si tiene algún tipo de motor de plantilla, o llamando a la función "header" de php.

Espero que este flujo haya sido el esperado y espero haber sido útil.

cordiales,

oso

+0

Hola @bear foot, muchas gracias por tomarte el tiempo para explicar todo esto, es muy apreciado. Como dije en mi publicación original, soy muy nuevo en esto, así que me puede tomar algún tiempo para digerir los detalles técnicos que amablemente me has proporcionado. Entonces puedo tener algunas preguntas un poco más adelante. Saludos cordiales – IRHM

+1

No hay problema. Tómese su tiempo, disfrute de PHP y, por supuesto, no existe la pregunta estúpida. Si no puede encontrar una respuesta directa en php.net (que es una muy buena php biblia) o en Google, no dude en preguntar. BR, Bear –

+0

Muchas gracias @bear foot, es gracioso. Solo estaba mirando php.net. Saludos cordiales – IRHM

Cuestiones relacionadas