Ver Mensaje Individual
  #5 (permalink)  
Antiguo 20/04/2007, 23:43
Avatar de estibaliz2006
estibaliz2006
 
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: subir nivel en subdirectorios casi solucionado

hola gerson. gracias por tu ayuda, pero no era a eso a lo que yo me refería. mira, yo lo que tengo es lo siguiente:

en la cabecera de la tabla se muestra un mensaje que dice:
Cita:
Directorio Actual:
y al lado aparece el nombre del usuario que se ha registrado. supongamos que el usuario se ha registrado con el nombre de 'juanluis'. bien. pues automáticamente, se crea en el servidor un nuevo directorio con ese nombre, 'juanluis'. cuando el usuario accede a su panel de usuario, lo que hace es llevarlo a su directorio o carpeta, es decir, a 'juanluis'. con lo cual, el mensaje que le aparecerá en la cabecera de la tabla será:

Cita:
Directorio Actual: juanluis
esto, como te decía en el email anterior, lo hago así:
recojo el nombre del directorio (que viene dado por el nombre que dio el usuario al registrarse. lo recojo a través de la variable $nombre y así digo que la variable $path=$nombre
Código PHP:
if(!isset($path))   
    {   
        
$path "$nombre";    
//donde la variable nombre recoge el nombre que el usuario da al registrarse y por lo tanto, el nombre del directorio principal//   
    

ahora detecto el directorio o subdirectorio en el que estoy:
Código PHP:
if ($handle opendir($path))    
    {   
//con esto me dice el directorio en el que estoy (directorio o subdirectorio, es decir, si pincho en un subdirectorio, me aparece el nombre del subdirectorio en el que estoy. si estoy en el directorio principal, me aparece el nombre del directorio principal   
        
$curDir substr($path, (strrpos(dirname($path."/."),"/")+0));   
        print 
"<br>Directorio Actual: <b>".$curDir."</b>&nbsp;&nbsp"
muy bien. este directorio para él será su directorio raíz, con lo que no podrá aparecer en ningún sitio 'subir nivel' pues si apareciera lo llevaría al directorio raiz del sistema (llamémosle 'modulos') que es donde están todos los archivos que dan forma a la web. por lo tanto, si el usuario está en su directorio raiz, en la cabecera aparecerá
Cita:
Directorio Actual: juanluis
y no habrá posibilidad de que aparezca el enlace 'subir nivel'.
bien. pero es que este usuario tiene la posibilidad, dentro de su directorio principal (dentro de 'juanluis'), de crear nuevas carpetas. así, supongamos que el usuario 'juanluis' crea en su carpeta raíz una nueva carpeta a la que le da el nombre de 'dibujos'. al leer el directorio raíz de ese usuario (es decir, al leer el directorio 'juanluis') desplegará los archivos que haya en él y además el subdirectorio creado 'dibujos'. supongamos que este usuario accede al subdirectorio 'dibujos'. entonces en la cabecera de la tabla aparecerá:
Cita:
Directorio Actual: juanluis/dibujos
y aquí es donde debería aparecer la opción 'subir nivel' para que el usuario volviera a su directorio raíz 'juanluis' (donde nunca podrá aparecer esta opción de 'subir nivel')

cómo había pensado hacer esto? bien. pues contando caracteres: puesto que el todos los archivos de la web están en la carpeta 'modulos' tendríamos que obviamente los directorios creados por los usuarios al registrarse irían a la carpeta 'modulos', de tal forma que $path sería igual a 'modulos/$nombre':
Código PHP:
$path='modulos/$nombre' 
donde $nombre es la variable que recoge el nombre de usuario que da el visitante al registrarse y que da nombre a su directorio raiz.
bueno, pues para todo ello, para contar los caracteres yo hacía así:
Código PHP:
strlen($path)> 
y aquí a partir de mayor ponía un número que debía ser lo suficientemente grande para que cogiera los caracteres que hay en modulos/ más el nombre del usuario, por ejemplo, 15 (que eran los caracteres sumados de modulos/, que son 8, más aproximadamente los del usuario) así yo decía: si eso es mayor que 15 quiere decir que hay un directorio creado, con lo cual debe aparecer la opción 'subir nivel':
Código PHP:
if (strlen($path)> 15
        { 
        
$curDir substr($path, (strrpos(dirname($path."/."),"/")+0)); 

        print 
"<br>Directorio Actual: <b>".$curDir."</b>&nbsp;&nbsp";  

          

        
$up substr($path0, (strrpos(dirname($path."/."),"/"))); 

        print 
"|&nbsp;&nbsp;<a href='index.php?mod=10&path=$up' class=textenlace3>Subir Nivel</a><br><hr color=#EAEAEA>"; } 
        else 
        { 
         
$curDir substr($path, (strrpos(dirname($path."/."),"/")+0)); 

        print 
"<br>Directorio Actual: <b>".$curDir."</b>&nbsp;&nbsp";} 
poniendo un número alto, me curaba en salud de que el 'subir nivel' no aparecería en el directorio raiz del individuo, pues en el caso de un usuario registrado como 'ana' tendriamos en total 8 caracteres (de modulos/) más 3 caracteres (de ana) igual a 11 caracteres. como es menor que 15, quiere decir que estamos en el directorio raiz del usuario (es decir, en 'ana') y no debe aparecer la opción 'subir nivel'. si 'ana' crease una nueva carpeta en su directorio llamada 'claves' por ejemplo, ya tendríamos 8 caracteres (de modulos/) más 3 caracteres (de ana) más 6 caracteres (de claves) igual a 17 caracteres, que es mayor que 15 con lo cual el sistema sabe que no está en el directorio raiz del usuario si no en un subdirectorio y aparece el 'subir nivel'.

pero esto tiene un pero. y cual es? supongamos el caso del usuario 'juanluis'. este usuario, su directorio raiz, tiene como caracteres: 8 caracteres (de modulos/) más otros 8 caracteres de su nombre de usuario, es decir, de 'juanluis' dan lugar a 16 caracteres. qué sucede? pues que 16>15, con lo cual el sistema cree que estamos en un subdirectorio de la carpeta raíz del usuario 'juanluis' (a pesar de que estamos en su directorio principal) y lo que hace es que muestra el enlace 'subir nivel' que si pinchas lo lleva directamente a la carpeta 'modulos' que es la carpeta raíz del sistema.
¡¡¡que jaleo, no?!!!
bueno, el tema está en que ese numero que ponemos al azar en el código (>15) no fuera al azar, sino que tuviera sentido. es decir, que se dijera algo así:
si strlen($path)> suma de caracteres directorio raiz del usuario más caracteres de modulos/, entonces mostrar enlace 'subir nivel', si no, no mostrar nada.
el problema viene que la parte fija en esa expresión es modulos/, que como es fija, sabemos el número de caracteres. pero la variable $nombre, es eso, variable, y recoge el nombre del usuario al registrarse y que da nombre al directorio raiz del usuario. pero es que esa variable puede tener desde 3 caracteres (por ejemplo, ana) hasta 8 (juanluis) o los que sean, con lo cual, cómo hago esto?

espero no haberte liado.