¿Cómo se eliminan automáticamente todos los archivos en un subdirectorio después del tiempo x (digamos después de 24 horas)? Sin usar un comando cronjob del servidor o pl. ¿Cómo puede hacer esto simplemente usando código PHP o simplemente visitando la página sin hacer clic en algo y el comando se ejecuta automáticamente.Eliminar automáticamente todos los archivos después del tiempo x
Respuesta
de respuesta para el último comentario de mi primera respuesta. Voy a escribir una muestra de código, así que he creado otra respuesta en lugar de agregar un comentario más.
Para eliminar los archivos con extensión personalizada que tiene que poner en práctica código:
<?php
$path = dirname(__FILE__).'/files';
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ((time()-filectime($path.'/'.$file)) < 86400) { // 86400 = 60*60*24
if (preg_match('/\.txt$/i', $file)) {
unlink($path.'/'.$file);
}
}
}
}
?>
Comentario: 1. En este ejemplo se utiliza la expresión regular /\.txt$/i
, lo que significa, que sólo los archivos con extensión txt
serán eliminados. El signo '$' significa que el nombre del archivo debe terminar con la cadena '.txt'. La bandera "i" indica que esa comparación será insensible a mayúsculas y minúsculas. Más sobre la función preg_match().
Además, puede utilizar la función strripos() para buscar archivos con cierta extensión. Aquí está el fragmento de código:
<?php
$path = dirname(__FILE__).'/files';
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ((time()-filectime($path.'/'.$file)) < 86400) { // 86400 = 60*60*24
if (strripos($file, '.txt') !== false) {
unlink($path.'/'.$file);
}
}
}
}
?>
Comentario: En este ejemplo se parece más evidente. El resultado de strripos()
también se puede lograr combinando dos funciones: strrpos(strtolower($file), '.txt')
, pero, en mi humilde opinión, es una buena regla usar menos funciones en el código para hacerlo más legible y más pequeño. Por favor, lea atentamente la advertencia en la página de la función strripos() (bloque de valores de retorno).
Una notificación más importante: si está utilizando el sistema UNIX, la eliminación de archivos podría fallar debido a los permisos de archivos. Puede consultar el manual sobre la función chmod().
Buena suerte.
Puede usar las funciones básicas de PHP filectime() y unlink() para verificar la hora de creación del archivo y eliminar su archivo/archivos.
EDITAR. Código ejemplo:
if ($handle = opendir('/path/to/files')) {
while (false !== ($file = readdir($handle))) {
if (filectime($file)< (time()-86400)) { // 86400 = 60*60*24
unlink($file);
}
}
}
Es solo el esqueleto de la función. Puede agregar cualquier condición, p. archivos con extensiones personalizadas o archivos, que coinciden con ciertos patrones, etc. – Alex
gracias alex .... espero que este trabajo ... – jones
De nada. Estoy encantada de ayudarte. Si esta respuesta es apropiada para usted, puede aceptarla haciendo clic en un tic cerca de mi respuesta. – Alex
utilizo shell de comandos AT, que es como una tarea programada, aunque
php:
exec("echo rm /somedir/somefile.ext|at now +24 hours");
Aquí es otro ejemplo que utiliza MUNDIALIZA y se eliminará cualquier archivo
$files = glob('path/to/your/files/*');
foreach($files as $file) { // iterate files
// if file creation time is more than 5 minutes
if ((time() - filectime($file)) > 3600) { // 86400 = 60*60*24
unlink($file);
}
}
o si desea excluir ciertos archivos
$files = preg_grep('#\.txt#', glob('/path/to/your/files/*'), PREG_GREP_INVERT);
Bueno, aquí vamos, el script PHP que borra los archivos que tienen X días.
<?
$days = 1;
$dir = dirname (__FILE__);
$nofiles = 0;
if ($handle = opendir($dir)) {
while (($file = readdir($handle)) !== false) {
if ($file == '.' || $file == '..' || is_dir($dir.'/'.$file)) {
continue;
}
if ((time() - filemtime($dir.'/'.$file)) > ($days *86400)) {
$nofiles++;
unlink($dir.'/'.$file);
}
}
closedir($handle);
echo "Total files deleted: $nofiles \n";
}
?>
Ahora pegue este código y guárdelo como un archivo php, cárguelo en la carpeta desde la que desea eliminar los archivos.Se puede ver al principio de este código php
$days = 1;
que establece el número de días, por ejemplo, si se establece a continuación, 2 archivos mayores de 2 días se eliminarán. Básicamente esto es lo que sucede cuando se ejecuta la secuencia de comandos, se pone el directorio actual y lee las entradas del archivo, se salta '' para el directorio y más controles actuales si hay otros directorios,
if ($file == '.' || $file == '..' || is_dir($dir.'/'.$file)) {
continue;
}
si la entrada del archivo es no es un directorio entonces se obtiene el tiempo de archivo modificado (hora de última modificación) y lo compara, si es el número de días de edad
if ((time() - filemtime($dir.'/'.$file)) > ($days *86400)) {
$nofiles++;
unlink($dir.'/'.$file);
}
si la condición se convierte en verdad, entonces borra el archivo con la ayuda de unlink() php función. Finalmente cierra el directorio y sale. También agregué un contador para contar la cantidad de archivos que se eliminaron, que se mostrarán al final del proceso de eliminación. Así que coloque el archivo php en el directorio que necesita la eliminación del archivo y ejecútelo.
Esperemos que ayuda :)
function deleteCachedData($hours=24)
{
$files = glob(ROOTDIR.DIRECTORY_SEPARATOR.'tmp'.DIRECTORY_SEPARATOR.'*.txt');
foreach($files as $file) {
if(is_file($file) && (time() - filectime($file)) > $hours*3600) {
unlink($file);
}
}
}
Después de tratar de utilizar estos ejemplos, que conectó un par de cuestiones:
- El operador de comparación debe ser mayor que, no menos de
- filemtime devuelve la hora modificada. filectime es el momento en que se modifican los datos de inodo de un archivo; es decir, cuando los permisos, propietario, grupo, u otros metadatos de la inode se actualiza, lo que puede conducir a resultados inesperados
He cambiado el ejemplo de usar filemtime y se fija la comparación de la siguiente manera:
<?php
$path = dirname(__FILE__).'/files';
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ((time()-filemtime($path.'/'.$file)) > 86400) { // 86400 = 60*60*24
if (preg_match('/\.txt$/i', $file)) {
unlink($path.'/'.$file);
}
}
}
}
?>
- 1. ¿Cómo eliminar todos los archivos eliminados del repositorio?
- 2. Cómo eliminar todos los números después del punto en PHP
- 3. Eliminar todos los caracteres después del signo $ usando Javascript
- 4. Eliminar archivos de registro después de x días
- 5. Eliminar carpeta y todos los archivos/subdirectorios
- 6. Borrar todos los archivos del repositorio svn
- 7. Eliminar automáticamente archivos/carpetas en R
- 8. ¿Cómo eliminar los archivos temporales automáticamente en ruby-rails?
- 9. Borrar todos menos los archivos X más recientes en bash
- 10. Mantener x número de archivos y eliminar todos los demás - Powershell
- 11. jquery: seleccione todos los elementos después del enésimo
- 12. Tratando de eliminar los archivos mayores de x días vb.net
- 13. QMake: compilando automáticamente todos los archivos en un directorio
- 14. Realización de una función después del tiempo x
- 15. Eliminar todos los elementos después de cierto elemento
- 16. NSOutlineView - Expandir automáticamente todos los nodos
- 17. ¿Log4Net puede eliminar archivos de registro automáticamente?
- 18. GNU encuentra todos los archivos ejecutables: ¿Equivalente en OS X?
- 19. Eliminar todos los atributos
- 20. Subversion: cómo eliminar todos los archivos .svn recursivamente?
- 21. Eliminar todos los archivos en un directorio con Python
- 22. Eliminar todos los archivos creados por el usuario especificado
- 23. ¿Eliminar todos los archivos de git de un directorio?
- 24. Eliminar todos los archivos desprotegidos sin afectar el repositorio SVN
- 25. NSIS - Eliminar todos los archivos, excepto un archivo
- 26. Cómo eliminar archivos anteriores a X horas
- 27. ¿Eliminar todos los archivos pero mantener todos los directorios en un script bash?
- 28. Cómo eliminar todos los productos del catálogo en Magento
- 29. script php para eliminar los archivos de más de 24 horas, se borran todos los archivos
- 30. Ocultar/Eliminar una etiqueta después de X segundos con jquery
En lugar de readdir + preg_match ¿por qué no simplemente usar glob()? –
Tienes razón. No escribí sobre la función glob() simplemente porque nunca la había usado antes. :) Gracias por tu comentario. – Alex
Tomó nota de Alex y Muchísimas gracias – jones