2012-09-03 18 views
5

Estoy trabajando en una secuencia de comandos php, donde quiero eliminar algunos archivos de una carpeta determinada con comodín (*).
He encontrado algunos ejemplos de trabajo como this one, donde se usan unlink() y glob() función.Eliminar archivos usando comodín - ejecutar vs unlink

Ahora, me preguntaba, ¿también sería correcto eliminar los archivos usando la función exec y un comando como rm -f /path/to/folder/_prefix_*?
¿Se toman riesgos de seguridad al usar esto?
Y si está bien, ¿sería mejor en términos de rendimiento?

EDIT:
Por lo tanto, desde las primeras respuestas puedo ver que de hecho, usar exec podría ser una solución aceptable.
¿Qué hay de los problemas de rendimiento? ¿Hay alguna posibilidad de que la opción exec sea mejor (más rápida/menos exigente) que la técnica glob/unlink?

gracias de antemano

+1

rm estaría bien, los problemas de seguridad dependen de quién puede ejecutar el script. –

Respuesta

8

Debido a que no hay ninguna posibilidad para los datos suministrados por el usuario a inyectar, no hay ningún problema de seguridad en el uso de exec sobre glob/unlink. Sin embargo, el uso de glob/unlink le permite definir excepciones:

foreach(glob("delete/*") as $f) { 
    if($f == "delete/notme.txt") continue; 
    unlink($f); 
} 

Y exec a menudo desactivado en servidores compartidos de manera glob/unlink es más portátil. Si tiene una configuración dedicada y no tiene la intención de abandonarla, no necesita preocuparse por eso.

+0

Gracias por responder Kolink. Estoy en un servidor de propiedad, y el ejecutivo está habilitado y funciona bien. ¿Crees que podría hacer una diferencia en el rendimiento usando una técnica sobre la otra? – CrisDeBlonde

+0

Me imagino que 'exec' es más rápido, pero' glob/unlink' permite que el script sepa en todo momento exactamente lo que está sucediendo, útil para aplicaciones de consola más que basadas en web, pero también puede obtener un informe de errores para cada archivo , o una lista de los archivos eliminados ... –

1

Ambas opciones podrían estar bien. Sin embargo, si no controla su propio servidor o está en el alojamiento compartido, el comando exec no podría estar disponible.

Para estar seguro, use glob y desvincular.

Cuestiones relacionadas