hola
estoy haciendo una aplicacion a la cual le agregue unos archivos de upload( cargar achivos ) el cual tambien lista los archivos cargados y los forza a descargar...
lista.php
<?php
include("arriba.php");
$status = "";
if ($_POST["action"] == "upload") {
// obtenemos los datos del archivo
$tamano = $_FILES["archivo"]['size'];
$tipo = $_FILES["archivo"]['type'];
$archivo = $_FILES["archivo"]['name'];
$prefijo = substr(md5(uniqid(rand())),0,6);
if ($archivo != "") {
// guardamos el archivo a la carpeta files
$destino = "archivos/".$prefijo."_".$archivo;
if (copy($_FILES['archivo']['tmp_name'],$destino)) {
$status = "Archivo subido satisfactoriamente: <b>".$archivo."</b>";
} else {
$status = "Error al subir el archivo";
}
} else {
$status = "Error al subir archivo";
}
}
?>
<?php
echo "".$status;
?>
<br>
<table height="30" class="texto_titulo" align="center">
<tr>
<td >Listado de Archivos Subidos </td>
</tr>
</table>
<?php
echo "<table class='texto_tabla' align='center'> ";
if ($gestor = opendir('archivos')) {
while (false !== ($arch = readdir($gestor))) {
if ($arch != "." && $arch != "..") {
echo "<tr><td><a href='bajar.php?nom=".$arch."'>".$arch."</a></td>";
echo "<td> </td>";
echo"<td><a href='eliminar_archivo.php?nom=".$arch."'>eliminar</a></td> \n ";
}
}
closedir($gestor);
}
echo "<br> \n";
echo "</tr> </table><br>";
echo"<a href='upload.php>Regresar a Upload</a>";
?>
<?php
include("abajo.php");
?>
bajar.php
<?php
$ruta = 'archivos/';//definimos la ruta para las descargas
$error = 'Archivo no disponible para descarga.';
if(isset($_GET['nom']) && basename($_GET['nom']) == $_GET['nom']) {
$getfile=$_GET['nom'];
} else { $getfile = NULL; }
if(!$getfile){ echo $error;
} else {
$filepath = $ruta.'/'.$getfile;
if(file_exists($filepath) && is_readable($filepath)){
$size = filesize($filepath);
header('Content-Type: application/octet-stream');
header('Content-Length: '.$size);
header('Content-Disposition: attachment; filename='.$getfile);
//header('Content-Transfer-Encoding: binary');
$file = @ fopen($filepath,'rb');
if($file) {
fpassthru($file);
exit;
} else { echo $error; }
} else {echo $error;
} }
?>
en lista php listo los archivos cargados pero el problema es que si cargo un archivo con caractes ("·$%$%, etc....) incluyendo la ñ, a la hora de dar click para descargarlos no los descarga..
mi pregunta es:
alguien me podria decir como valido los caracteres para que no tenga problema a la hora de descargarlos....
les agredeceria si me ayudacen.
gracias
Lo mejor seria que renombres los archivos al subirlos.
Lo que puedes hacer es detectar si contiene algun caracter problematico y lo eliminas o lo sustituyes.
Un saludo.
en ese caso como podria renombrarlo o hacer que si tiene un caracter no lo deje subir..?
haz una función que genere nombres aleatorios con los caracteres de tu preferencia. Algo así:
<?php
function gen_nombre(){
for($i = 1; $i <= 4; $i++){
$nombre = $nombre.chr(rand(97, 122));
}
$nombre = strtoupper($nombre);
$nombre = $nombre.rand(100, 999);
return $nombre;
}
echo gen_nombre();
?>
Hola, veo algunas fallas de programación en tu script, talves te interese darle un ojo a este post:
http://foro.elhacker.net/nivel_web/vulnerabilidad_en_la_subida_de_imagenes-t266003.0.html
sobre los nombres yo creo que bastaría con pasarlos a md5 y tener una base de datos con el nombre real de cada hash como lo hace smf.