Ayuda, ver y borrar archivos

Iniciado por krisor, 22 Julio 2009, 18:56 PM

0 Miembros y 1 Visitante están viendo este tema.

krisor

Holap, soy nuevo por aqui, paso por recomendacion ^^

Mi caso es, tengo dos codes, uno para ver archivos de un directorio y otro para eliminar archivos, concretamente, el que este puesto en el .php. Lo que quisiera es, que al escribir, por ejemplo, www.webweb.com/cajon/borrar.php, muestre los archivos que hay en dichi directorio y que al seleccionar uno, se borre, seria eso posible?

Os pongo los codes:

-Para borrar

<?php
if (file_exists("/temp/aviso.bmp")) {
  
unlink("/temp/aviso.bmp");
  print(
"File removed.\n");
} else {
  print(
"File does not exist.\n");
}
?>



-Para ver los archivos

<?php
function getFiles($path) {
$files = array();
$fileNames = array();
$i 0;

if (
is_dir($path)) {
if (
$dh opendir($path)) {
while ((
$file readdir($dh)) !== false) {
if (
$file == "." || $file == ".." || $file == "index.php" || $file == "passwords.txt") continue;
$fullpath $path "/" $file;
$fkey strtolower($file);
while (
array_key_exists($fkey,$fileNames)) $fkey .= " ";
$a stat($fullpath);
$files[$fkey]['size'] = $a['size'];
if (
$a['size'] == 0$files[$fkey]['sizetext'] = "-";
else if (
$a['size'] > 1024$files[$fkey]['sizetext'] = (ceil($a['size']/1024*100)/100) . " Kb";
else if (
$a['size'] > 1024*1024$files[$fkey]['sizetext'] = (ceil($a['size']/(1024*1024)*100)/100) . " Mb";
else 
$files[$fkey]['sizetext'] = $a['size'] . " bytes";
$files[$fkey]['name'] = $file;
$files[$fkey]['type'] = filetype($fullpath);
$fileNames[$i++] = $fkey;
}
closedir($dh);
} else die (
"No pudo abrirse el directorio: $path");
} else die (
"La ruta no es un directorio: $path");
sort($fileNames,SORT_STRING);
$sortedFiles = array();
$i 0;
foreach(
$fileNames as $f$sortedFiles[$i++] = $files[$f];

return 
$sortedFiles;
}

$files getFiles("./");
foreach (
$files as $file) print "&nbsp;&nbsp;&nbsp;&nbsp;<b><a href=\"$file[name]\">$file[name]</a></b><br>\n";
}
    
?>


Espero puedan ayudarme, saludos ^^

SnakeDrak

#1
Hola,

No entiendo el problema, si ahí tienes los códigos, ¿qué necesitas?, ¿te dan error?

Bueno si lo que quieres es borrar el archivo seleccionado pues borrar.php:

Código (php) [Seleccionar]

// Función de ver los ficheros
// AQUÍ INCLUYE LA DE GETFILES (por ejemplo)
$dir = "./"; // Ahí pones el directorio
// Comprobamos si el nombre pasado tiene "/" (para evitar salir de directorios, lee debajo del code) o si no existe
if(!isset($_GET['archivo']) || !preg_match('/[^\/]/',$_GET['archivo']) || $_GET['archivo']=="borrar.php"){
$files = getFiles($dir);
foreach ($files as $file) echo "&nbsp;&nbsp;&nbsp;&nbsp;<b><a href=\"./?archivo=".$file[name]."\">".$file[name]."</a></b><br>\n";
}
else {
if (file_exists($dir.$_GET['archivo'])) {
unlink($dir.$_GET['archivo']);
echo "Archivo eliminado.\n";
} else
echo "El archivo ".$_GET['archivo']." no existe.\n";
}


La única restricción que he puesto es de "/" pero puedes ponerle que el nombre de archivo no pueda contener caracteres como "*" o similares.. para evitar que te borren otros archivos.

NOTA: NO HE COMPROBADO LA FUNCIÓN GETFILES pero supongo que estará bien, solo ponla arriba y ya.

Lo he hecho a lo rápido, pero no debería tener errores, si tiene alguno solo dilo.

Saludos!

krisor

Bueno, he echo esto a ciegas, por eso no va .-.

<?php
function getFiles($path) {
$files = array();
$fileNames = array();
$i 0;

if (
is_dir($path)) {
if (
$dh opendir($path)) {
while ((
$file readdir($dh)) !== false) {
if (
$file == "." || $file == ".." || $file == "index.php" || $file == "passwords.txt") continue;
$fullpath $path "/" $file;
$fkey strtolower($file);
while (
array_key_exists($fkey,$fileNames)) $fkey .= " ";
$a stat($fullpath);
$files[$fkey]['size'] = $a['size'];
if (
$a['size'] == 0$files[$fkey]['sizetext'] = "-";
else if (
$a['size'] > 1024$files[$fkey]['sizetext'] = (ceil($a['size']/1024*100)/100) . " Kb";
else if (
$a['size'] > 1024*1024$files[$fkey]['sizetext'] = (ceil($a['size']/(1024*1024)*100)/100) . " Mb";
else 
$files[$fkey]['sizetext'] = $a['size'] . " bytes";
$files[$fkey]['name'] = $file;
$files[$fkey]['type'] = filetype($fullpath);
$fileNames[$i++] = $fkey;
}
closedir($dh);
} else die (
"No pudo abrirse el directorio: $path");
} else die (
"La ruta no es un directorio: $path");
sort($fileNames,SORT_STRING);
$sortedFiles = array();
$i 0;
foreach(
$fileNames as $f$sortedFiles[$i++] = $files[$f];

return 
$sortedFiles;
}

$files getFiles("./uploads/");
foreach (
$files as $file) print "&nbsp;&nbsp;&nbsp;&nbsp;<b><a href=\"$file[name]\">$file[name]</a></b><br>\n";
}
// AQUÍ INCLUYE LA DE GETFILES (por ejemplo)
$dir "./uploads/"// Ahí pones el directorio
// Comprobamos si el nombre pasado tiene "/" (para evitar salir de directorios, lee debajo del code) o si no existe
if(!isset($_GET['archivo']) || !preg_match('/[^\/]/',$_GET['archivo']) || $_GET['archivo']=="borrar.php"){
$files getFiles($dir);
foreach ($files as $file) echo "&nbsp;&nbsp;&nbsp;&nbsp;<b><a href=\"./?archivo=".$file[name]."\">".$file[name]."</a></b><br>\n";
}
else {
if (file_exists($dir.$_GET['archivo'])) {
unlink($dir.$_GET['archivo']);
echo "Archivo eliminado.\n";
} else
echo "El archivo ".$_GET['archivo']." no existe.\n";
}
?>


El archivo esta alojado en www.pagina.web.com/uploads/ (dentro de uploads), no va, tampoco entiendo bien lo que me as dixo, se nota que soy super novato .-.

A lo que me referia es, mostrar archivos a borrar, elegir cual borrar, y borrar, se supone que con esos codes se puede hacer, pero no se como .-.

Gracias por el cable ^^

SnakeDrak

#3
Hola,

Pues aquí te he arreglado el archivo, esto lo que haría sería abrir el directorio uploads (que debe estar en el mismo directorio que borrar.php) y al abrir borrar.php mostraría todos los archivos de la carpeta uploads y cuando pulses en un archivo automáticamente se borraría.

Código (php) [Seleccionar]

<?php
function getFiles($path) {
$files = array();
$fileNames = array();
$i 0;
if (is_dir($path)) {
if ($dh opendir($path)) {
while (($file readdir($dh)) !== false) {
if ($file == "." || $file == "..") continue;
$fullpath $path "/" $file;
$fkey strtolower($file);
while (array_key_exists($fkey,$fileNames))
$fkey .= " ";
$a stat($fullpath);
$files[$fkey]['size'] = $a['size'];
if ($a['size'] == 0)
$files[$fkey]['sizetext'] = "-";
else if ($a['size'] > 1024)
$files[$fkey]['sizetext'] = (ceil($a['size']/1024*100)/100) . " Kb";
else if ($a['size'] > 1024*1024)
$files[$fkey]['sizetext'] = (ceil($a['size']/(1024*1024)*100)/100) . " Mb";
else
$files[$fkey]['sizetext'] = $a['size'] . " bytes";
$files[$fkey]['name'] = $file;
$files[$fkey]['type'] = filetype($fullpath);
$fileNames[$i++] = $fkey;
}
closedir($dh);
} else die ("No pudo abrirse el directorio: $path");
} else die ("La ruta no es un directorio: $path");
sort($fileNames,SORT_STRING);
$sortedFiles = array();
$i 0;
foreach($fileNames as $f)
$sortedFiles[$i++] = $files[$f];
return $sortedFiles;
}
$dir "./uploads/"// Ahí pones el directorio
// Comprobamos si el nombre pasado tiene "/" (para evitar salir de directorios, lee debajo del code) o si no existe
if(!isset($_GET['archivo']) || !preg_match('/[^\/]/',$_GET['archivo']) || $_GET['archivo']=="." || $_GET['archivo']==".."){
$files getFiles($dir);
foreach ($files as $file) echo "&nbsp;&nbsp;&nbsp;&nbsp;<b><a href=\"./?archivo=".$file[name]."\">".$file[name]."</a></b><br>\n";
}
else {
if (file_exists($dir.$_GET['archivo'])) {
unlink($dir.$_GET['archivo']);
die("Archivo eliminado.\n");
} else
die("El archivo ".$_GET['archivo']." no existe.\n");
}
?>



Si tienes más problemas dilo.

Saludos!

дٳŦ٭



Con sangre andaluza :)


krisor

.... no me funciona, solo cambio

$dir = "./uploads/"; // Ahí pones el directorio por $dir = "./"; // Ahí pones el directorio

Al ser esa carpeta donde estan alojados los archivos a borrar.
Pongo www.frfr.web.com/th/uploads/borrar.php, una vez hecho, parece que se carga algo, termina de cargarse y se siguen mostrando los los archivos, le doy a uno, parece que hace algo, pero se para, y no borrar.

Nose, sere yo? (He dado 777 a la carpeta)

SnakeDrak

Hola,

Dale permisos 777 también a los ficheros, además el borrar.php no lo pongas en la misma carpeta.. o te podrán borrar ese archivo, subelo mejor un directorio y pon como tenías antes, ./uploads/.

Activa los errores en el .htaccess:

Código (apache) [Seleccionar]

php_flag display_errors On


Y pon una dirección válida para ver cual es el error.

Como te he dicho, yo solo he adaptado la función que pusiste de getFiles, no sé si estará bien, así que pon la web con los errores activados.

Recuerda darle 777 a los archivos y a la carpeta y SUBE un directorio el borrar.php y ponle ./uploads/ en caso de que no puedas subirlo cambia:

Código (php) [Seleccionar]

if(!isset($_GET['archivo']) || !preg_match('/[^\/]/',$_GET['archivo']) || $_GET['archivo']=="." || $_GET['archivo']==".."){


Por:

Código (php) [Seleccionar]

if(!isset($_GET['archivo']) || !preg_match('/[^\/]/',$_GET['archivo']) || $_GET['archivo']=="." || $_GET['archivo']==".." || $_GET['archivo']=="borrar.php"){


Saludos!

ihton

Había un pequeño fallo

   
Citarforeach ($files as $file) echo "&nbsp;&nbsp;&nbsp;&nbsp;<b><a href=\"./?archivo=".$file[name]."\">".$file[name]."</a></b><br>\n";

Ahí es donde esta el fallo, falta una cosa, hay que dejarlo así:

Citarforeach ($files as $file) echo "&nbsp;&nbsp;&nbsp;&nbsp;<b><a href=\"./borrar.php?archivo=".$file[name]."\">".$file[name]."</a></b><br>\n";

SnakeDrak

Hola,

Ops xD, es que yo trabajo con .htaccess y mod_rewrite siempre (para que no se vean los nombres de fichero) y claro, constumbre.

Al ser borrar.php y no index.php pues no funcionaba, ponle el borrar.php donde dijo ihton y ya debería borrarlos, también podrías hacerlo con AJAX más avanzado.

Saludos.

krisor

Asunto zanjado, gracias a los 3 ^^