Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/04/2007, 04:32
Avatar de estibaliz2006
estibaliz2006
 
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
que jaleo con los directorios: ahora renombrar y descargar

muy buenas a todos. esto de las funciones y ordenes dentro de los directorios es algo que jamás creí que se me atragantara tanto. si a esto le añadimos las peculiaridades del sistema que desarrollo, se puede hacer una un jaleo enorme. bueno, os cuento.

en mi sistema, el usuario una vez que se registra con un determinado nombre, se crea en el directorio raíz del servidor (llamado módulos, en el cual se guardan todas las carpetas y archivos de la web) un directorio nuevo para ese usuario en concreto con el nombre que ha dado al registrarse. supongamos que el usuario se registra con el nombre de 'pedromanuel'. automáticamente, en el sistema se creará una carpeta llamada 'pedromanuel'.
este usuario, una vez validado su nombre de usuario y su password, podrá acceder a su carpeta y ver los archivos que previamente él mismo ha subido. así, este usuario accederá a su directorio 'pedromanuel'. esto lo hago así:
//////////////////////
Código PHP:
 if(!isset($path))
    {
        
$path "modulos/$nombre";
    } 
recogemos la ruta del directorio, donde 'modulos/' es la carpeta raíz del servidor y donde $nombre es la variable que recoge el valor del nombre introducido por el usuario y que da nombre a su carpeta. así, en este caso, $path sería igual a $path=modulos/pedromanuel:
////////////////////
una vez tenemos la ruta, accedemos al directorio y mostramos tanto los archivos como los subdirectorios que en él pudiera haber:
Código PHP:
if ($handle opendir($path))  
    { 
while (
false !== ($file readdir($handle)))  
        { 
            if (
$file != "." && $file != "..")  
            {     
             
$fName $file
           
$file $path.'/'.$file
///////////////////
una vez tengo ya el acceso para leerlos, los pongo en cada campo.
así, en el campo 'nombre', el código que utilizo para obtener los nombres de los ficheros o subdirectorios es el siguiente:
Código PHP:
if(is_file($file))////si es un fichero 

print
"<a href='".$file."'>".$val."</a>"


if(
is_dir($file))////si es un directorio 

print 
"<a href='index.php?mod=10&path=$file'>$val</a>"

////////////////////////////////////
cuando se trata de ficheros, aparece al lado un campo llamado 'accion' que recoge una serie de opciones que hacer con el fichero, como son 'ver', 'renombrar' y 'descargar'.
bien. para ver el archivo, hacemos click en el enlace 'ver' que tiene de código:
Código PHP:
echo("<a href='".$file."' >Ver</a>"); 
donde $file recoge la ruta en el servidor del archivo en cuestión que queremos ver. así por ejemplo, el archivo 'ejemplo.jpg' tendría
$file=modulos/pedromanuel/ejemplo.jpg
//////////////////////////
pero ahora viene el jaleo.
cuando opto por la opción 'descargar', pincho en el enlace 'descargar' que tiene de código:
Código PHP:
echo ("<a href=descargar.php?id='".$file."' >Descargar</a>"); 
donde $file sigue siendo la ruta de ese archivo. en el ejemplo, sería:

Código PHP:
("<a href=descargar.php?id='modulos/pedromanuel/ejemplo.jpg' >Descargar</a>"); 
esto lleva directamente a la página 'descargar' que tiene este código:
Código PHP:
$id $_GET['id']; 
//conecto con la base de datos donde recojo los datos del archivo en cuestión
$cnx mysql_connect("localhost""user""pass"); 
mysql_select_db("basededatos"$cnx);
//selecciono la tabla y digo que me muestre el nombre del documento (en este caso mostrará 'ejemplo.jpg' cuya ruta (almacenada en el campo 'ruta' de esa tabla) coincide con la variable $id recogida
$sql="SELECT documento FROM archinteg WHERE ruta='".$id."'";
$resultado=mysql_query($sql) or die (mysql_error());
 
while (
$row mysql_fetch_array($resultado)) { 
$documento "".$row['documento'].""
//código para descargar 

    
header("Content-Transfer-Encoding: binary"); 
    
header("Content-type: application/force-download");  
    
header("Content-Disposition:attachment; filename=$documento"); 
    
readfile("$id");



   } 
bien. pues de esta forma todo va correcto, pero lo que me descargo, el fichero, que se llama exactamente igual que el del servidor, no puedo leerlo, me da un error de lectura. dice que el archivo (sea cual sea su extensión) es ilegible y por lo tanto no puedo abrirlo con nada. qué hago mal?

respecto al último apartado, 'renombrar', este no hay forma. he leido las multiples opciones que hay en este foro y en otros pero no lo consigo.

por favor, me echáis un cable con estos temas? gracias.