Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Moand en 26 Mayo 2016, 02:54 am



Título: Cambiar de directorio
Publicado por: Moand en 26 Mayo 2016, 02:54 am
Buenas a todos!

Estoy intentando mostrar los directorios y luego mediante click cambiar al seleccionado para mostrar este.

He conseguido hacer que liste todos los elementos de un directorio, vendiéndolo en directorios y ficheros. Eso parece que funciona correctamente, pero solo me muestra los datos del directorio actual, es decir, si en la variable que indica la ruta que mostrará únicamente tiene un ".", que indica que muestre el lugar donde estoy ahora mismo, no hay problema, pero si escribimos algo más, como "directorio1", solo me muestra los ficheros llamados index.

Una forma de arreglar eso es cambiando de directorio nada mas declarar la variable. Pero si alguien sabe el por que me lo diga por favor.

También quiero pedir ayuda o consejo el cambio de directorio al hacer click.

Código
  1. <?php
  2.  
  3.    $dir = "../css";
  4.    chdir("$dir");
  5.    $contenido = scandir($dir); //Crea un array con los datos del directorio actual.
  6.  
  7.    $contador = count($contenido); //Cuenta la cantidad de datos (ficheros y directorios) que hay.
  8.    for ($list = 0; $list < $contador ; $list++) {
  9.      $com_dir = is_dir($contenido[$list]); //Comprueba los datos que son directorios.
  10.      $com_file = is_file($contenido[$list]); //Comprueba los datos que son ficheros.
  11.  
  12.      if ($com_dir == true) {
  13.        $dir_list = $list; //Los datos que son directorios los añade a la variable.
  14.        echo "<a href='?move'>$contenido[$dir_list]</a><br>"; //Muestra los directorios.
  15.  
  16.        if (isset($_GET['move'])) {
  17.          chdir("$contenido[$dir_list]"); //Cambia de directorio. !!!???
  18.        }
  19.      }
  20.  
  21.      if ($com_file == true) {
  22.        $file_list = $list; //Los datos que son ficehros los añade a la variable.
  23.        echo "<a href=''>$contenido[$file_list]</a><br>"; //Muestra los ficheros.
  24.      }
  25.    }
  26.  
  27. ?>


Título: Re: Cambiar de directorio
Publicado por: gAb1 en 26 Mayo 2016, 05:34 am
Hmmm con eso no vás a conseguir mostrar los archivos y carpetas de la ruta a la que hagas click. Fíjate bien: lo que estás haciendo es cuando le das click a cualquier ruta, hace una petición y el script vuelve a empezar, entonces el primer directorio activara el chdir(), por lo que si le has dado click al primero tuviste suerte, pero si le das click a otro  :silbar:

De todas maneras no se puede hacer de esa manera, necesitas saber cual es el nombre del directorio antes de empezar el foreach, por lo que hay que pasarlo por get (como hace apache).

Tampoco tiene mucho sentido redeclarar $list como $dir_list o $file_list, es un simple número y van a tener el mismo valor siempre...

Es aconsejable comprobar primero que el directorio existe para que no de error. Puedes usar realpath().

Luego, scandir() es conocido por ser lento, en su lugar utiliza FilesystemIterator():

Por cierto, ya se te olvido lo de igual e idéntico?  :P

Código
  1. if ($com_dir == true)

 :rolleyes:

Código
  1. // necesitas php >= 7 para esto
  2. // si no usa isset($_GET['move']) ? $_GET['move'] : NULL;
  3. $newPath = $_GET['move'] ?? NULL;
  4.  
  5. $folder = realpath('./css' . $newPath);
  6.  
  7. if ( FALSE !== $folder && is_dir($folder) ) {
  8.  
  9.    $files  = new FileSystemIterator($folder, FileSystemIterator::SKIP_DOTS);
  10.  
  11.    if ( FALSE !== $files ) {
  12.  
  13.        echo isset($newPath) ? '<a href="/test">Go Back</a><br />' : '';
  14.  
  15.        foreach ( $files as $file ) {
  16.  
  17.            $dir = is_dir($file) ? '?move=/' . basename($file) : '#';
  18.  
  19.            echo '<a href="', $dir, '">', $file, '</a><br />';
  20.  
  21.        }
  22.    }
  23. }

Actualmente solo sube 1 nivel, te dejo a tí como hacer que suba 2 o más niveles, no es nada dificil, usa la imaginación  ;D

Si van a acceder a este script más personas (que no son de confianza) tendrás que verificar ese get.


Título: Re: Cambiar de directorio
Publicado por: Moand en 26 Mayo 2016, 17:29 pm
Muchas gracias bella persona, se nota que entiendes mucho  ;-)

Me pondré con ese código ahora mismo para saber como funciona linea a linea, así sera mejor para mi aprendizaje.

Todavía no se muy bien cual es el momento adecuado para usar igual o idéntico, por eso probé con igual y como me funcionaba lo deje con ese jeje Siento ser tan nooby  :-\

Intentare escribir lo antes posible con el código actualizado.

De nuevo, muchas gracias.


Título: Re: Cambiar de directorio
Publicado por: Moand en 26 Mayo 2016, 19:14 pm
Ya he conseguido bajar otro nivel.  ;-)

Hay que añadir: basename($newPath) a la linea 17.

Código
  1. $dir = is_dir($file) ? '?move=/' . basename($newPath) . "/" . basename($file) : '#';


Título: Re: Cambiar de directorio
Publicado por: gAb1 en 26 Mayo 2016, 21:06 pm
Sobre lo de igual e idéntico, engel lex dijo algo muy importante, no sé si te acordarás:

debido a la similitud entre 0, "" y false al no usar === en lugares clave, los programas pueden fallar

Básicamente cuandro trabajes con booleanos TRUE y FALSE usa identico para asegurarte que la respuesta solo sea esa y no un 0 o un 1 un texto o cualquier cosa que pueda dar positivo y no sea TRUE o falso y no sea FALSE.

Exacto! asi es, te paso una versión más completa. No se si te has fijado, pero te estás introduciendo a los Operadores ternarios (x = y ? 'si' : 'no') que, en ocasiones van mejor que un simple if y también al nuevo Null Coalesce Operator (x ?? 'no') si x no es null/false o el 'no', son un else/if simplificados.

Código
  1. $newPath = $_GET['move'] ?? NULL;
  2.  
  3. $folder = realpath('./' . $newPath);
  4.  
  5. if ( FALSE !== $folder && is_dir($folder) ) {
  6.  
  7.    $files  = new FileSystemIterator($folder, FileSystemIterator::SKIP_DOTS);
  8.  
  9.    if ( FALSE !== $files ) {
  10.  
  11.        $back_dir = dirname($newPath) == '/' ? '' : dirname($newPath);
  12.  
  13.        echo isset($newPath)
  14.                ? ($newPath == '' ? '' : '<a href="?move=' . $back_dir . '">Go Back</a><br />')
  15.                : '';
  16.  
  17.        foreach ( $files as $file ) {
  18.  
  19.            $dir = is_dir($file) ? (isset($newPath) ? '?move=' . $newPath . '/' . basename($file) : '?move=/' . basename($file)) : '#';
  20.  
  21.            echo '<a href="', $dir, '">', $file, '</a><br />';
  22.  
  23.        }
  24.    }
  25. }


Título: Re: Cambiar de directorio
Publicado por: Moand en 26 Mayo 2016, 23:26 pm
Increíble  :o

Hace mucho que no aprendo tanto en tan poco tiempo, de verdad muchas gracias. Explicas muy bien, no seras profesor? xD

Yo intente hacer esta parte:

Código
  1. $back_dir = dirname($newPath) == '/' ? '' : dirname($newPath);
Código
  1. echo isset($newPath) ? ($newPath == '' ? '' : '<a href="?move=' . $back_dir . '">Go Back</a><br />') : '';

No me salio porque cuando intentaba poner la variable me daba error, he incluso la intente poner como lo tenias en esta linea:

Código
  1. echo '<a href="', $dir, '">', $file, '</a><br />';

Con sus comas y comillas simples y todo, pero no se porque no funcionaba. Por que en uno son puntos y otro comillas?

También me di cuenta de que en los if pones FALSE antes y también que podría poner "== TRUE" en vez de "!==". Todo esto es por alguna razón en concreto o solo por gusto?


Título: Re: Cambiar de directorio
Publicado por: gAb1 en 27 Mayo 2016, 00:09 am
Vale, lo de los puntos y comas: para enlazar contenido dinamico, lo que php hace es concatenar los strings con variables o funciones usando el punto.

Código
  1. $mensaje = 'Hola ' . $nombre;

echo() no es una simple función, es un constructor de lenguage especial, por lo que acepta varias expresiones separadas por una coma.

La diferencia radica en que al concatenar, primero se juntan todos los trozos y luego se muestran, sin embargo si usas comas en echo, simplemente se muestran los trozos, sin tener que juntarlos. Esto supone un ahorro considerable. Siempre que uses echo utiliza la coma en lugar del punto.

La ultima pregunta: lo primero es por gusto: es lo mismo decir "(1+1) === 2" que "2 === (1+1)".

Lo segundo ya tiene su porque: no es lo mismo decir "X es identico a Y" que "X NO es identico Y": Eso es, el ! es negación cuando lo pones delante:

Código
  1. $variable = TRUE;
  2.  
  3. if (!$variable) {}
  4. // o lo que es lo mismo
  5. if (TRUE !== $variable) {}
  6. // no es lo mismo que
  7. if (TRUE === $variable) {}

Los dos primeros if no se cumplen, el tercero si que se cumple.


Título: Re: Cambiar de directorio
Publicado por: Moand en 27 Mayo 2016, 01:05 am
Creo que no me entendiste con lo de == y !==. Lo que quiero decir es:

Código
  1. // Ya sea poner esto:
  2. if ( FALSE !== $files )
  3.  
  4. // o esto
  5. if ( TRUE == $files )
  6.  
  7. // en los casos seria el mismo resultado, y a lo que me referia es si eso lo habias puesto por gusto o por alguna otra razon.
  8.  

También he añadido otro operador a la linea 14, ya que cuando cambiabas de directorio y luego volvías al directorio padre o raíz este seguía mostrando el "Go back".

Código
  1. echo isset($newPath) ? ($newPath == '' || $newPath == '\\' ? '' : '<a href="?move=' . $back_dir . '">Go Back</a><br />') : '';

Quería intentar averiguar por mi mismo como se escribía la \ en php pero al final tuve que mirarlo en Internet, por eso tarde tanto xD


Título: Re: Cambiar de directorio
Publicado por: gAb1 en 27 Mayo 2016, 15:30 pm
Te estás confundiendo, == y !== son dos cosas totalmente distintas, ¿no te leiste la tabla de comparadores (http://php.net/manual/en/language.operators.comparison.php)?

==   -> es igual
=== -> es idéntico
!=    -> no es igual
!==  -> no es idéntico

Eso es muy extraño, a mí el boton "Go back" no se me muestra en el directorio raiz.

(Por cierto eso se llama condición, no operador.)

Ah si, la barra invertida se usa para escapar caracteres, incluida ella misma.



Edito: Ah vale lo siento (soy yo el que me he confundido  :-[). Que pusiste TRUE en el segundo if, y yo dando por sentado que ambos tenian FALSE. Si, el resultado sería el mismo.

De todas maneras ya sabes que no se debe usar == para estos casos. Por lo tanto no es por gusto.

Estoy algo espeso ultimamente...

Edito 2: Estoy mejorando el script ya que voy a usarlo yo tmb xD Termino otras cosas y lo pondré.


Título: Re: Cambiar de directorio
Publicado por: Moand en 27 Mayo 2016, 19:08 pm
Leí que cuando se utiliza dirname (http://php.net/manual/es/function.dirname.php) (En el apartado ejemplos se ve bastante claro) este devuelve el directorio padre, y en este caso como devuelve el raíz lo muestra como "\" en Windows.

Aquí te adjunto imágenes para que veas lo que ocurre:

(http://i.imgur.com/eBvmMM4.png)

(http://imgur.com/7FT4Id3.png)

(http://imgur.com/Ui5CrjC.png)

Yo estoy intentando para que primero salgan las carpetas y luegos los ficheros  ;D


Título: Re: Cambiar de directorio
Publicado por: gAb1 en 27 Mayo 2016, 19:09 pm
Dejo la versión 1.0 release del script  ;D

Sigo sin saber por qué te salia el botón en el directorio raiz, pero ahora sé que estás en Windows y el separador de directorios es la barra invertida en lugar de la normal. El script ahora soporta Windows también:

Código
  1. $newPath = $_GET['move'] ?? NULL;
  2. $slash   = DIRECTORY_SEPARATOR; // \ for Windows and / for the rest
  3. $levels  = count(explode($slash, $newPath)) - 1;
  4. $baseDir = 'C:\\Apache\\htdocs\\'; // Absolute path to document root
  5.  
  6. $folder  = realpath($baseDir . $newPath);  // Checks for a valid and existent path
  7.  
  8. if ( NULL !== $newPath ) {
  9.    if (dirname($folder, $levels) !== $baseDir) die('Sorry I just died :P'); // Hack attempt
  10. }
  11.  
  12. if ( FALSE !== $folder && is_dir($folder) ) {
  13.  
  14.    $files          = new FileSystemIterator($folder, FileSystemIterator::SKIP_DOTS);
  15.    $privateArray   = [ '.htaccess' => '', 'h4x0r stuff' => '', 'etc...' => '' ]; // List of excluded files and folders
  16.  
  17.    if ( FALSE !== $files ) {
  18.  
  19.        if ( isset($newPath) && $newPath != '' ) {
  20.  
  21.            $dirName = dirname($newPath);
  22.            $backDir = $dirName == $slash ? '' : '?move=' . $dirName;
  23.  
  24.            echo '<a href="/test' . $backDir . '">Go Back</a><br />';
  25.  
  26.        }
  27.  
  28.        foreach ( $files as $file ) {
  29.  
  30.            $baseName = basename($file);
  31.  
  32.            if ( !isset($privateArray[$baseName]) ) {
  33.  
  34.                $dir = is_dir($file)
  35.                          ? (isset($newPath) ? '?move=' . $newPath . $slash . $baseName : '?move=' . $slash . $baseName)
  36.                          : '#';
  37.  
  38.                echo '<a href="/test', $dir, '">', $file, '</a><br />';
  39.  
  40.            }
  41.        }
  42.    }
  43. }

La dirección base tiene que ser absoluta, en Windows empezando por la letra de la unidad, que suele ser C.

Con realpath() ya te aseguras de que no se salga del document root, pero dará un error, para evitar esto se hace una pequeña comprobación y si se cumple entonces se termina el script y no se sigue ejecutando. También sirve por si quieres mostrar solo a partir de un subdirectorio y si se intenta subir con .. entonces realpath no dará error, pero la comprobación terminará el script y se evitará que se muestren directorios que no permites.

También he añadido otra comprobación por si se quieren excluir archivos y carpetas. Lo que no quieras que se muestre añadelo a la lista. Como se comprueba por key (nombre de archivo/carpeta) hay que darle un valor cualquiera (en este caso '') a cada elemento del array (lista).


Título: Re: Cambiar de directorio
Publicado por: Moand en 27 Mayo 2016, 20:05 pm
Ya he conseguido ordenador el resultado primero por carpetas y luego por ficheros.

No se si es la forma mas correcta, pero lo que he hecho ha sido crear if en el foreach para que únicamente muestre los directorios ya que con los operadores ternarios me obligaban a poner un else (":"), y por lo tanto, mostraba también los ficheros. Luego he creado otro foreach para los ficheros.

Código
  1. <?php
  2.  
  3.  $newPath = $_GET['move'] ?? NULL;
  4.  $folder = realpath("../usuarios" . $newPath);
  5.  
  6.  if ( $folder == TRUE && is_dir($folder) ) {
  7.  
  8.    $files  = new FileSystemIterator($folder);
  9.  
  10.    if ( $files == TRUE ) {
  11.  
  12.      $back_dir = dirname($newPath) == '/' ? '' : dirname($newPath);
  13.      echo isset($newPath) ? ($newPath == '' || $newPath == '\\' ? '' : '<a href="?move=' . $back_dir . '">Go Back</a><br>') : '';
  14.  
  15.      foreach ( $files as $file ) {
  16.        if (is_dir($file) === TRUE) {
  17.          if (isset($newPath) === TRUE) {
  18.  
  19.            $dir = '?move=' . $newPath . '/' . basename($file);
  20.            echo '<a href="', $dir, '">', $files, '</a><br>';
  21.  
  22.          }else {
  23.  
  24.            $dir = '?move=/' . basename($file);
  25.            echo '<a href="', $dir, '">', $files, '</a><br>';
  26.  
  27.          }
  28.        }
  29.      }
  30.  
  31.      foreach ($files as $file) {
  32.        if (is_file($file) === TRUE) {
  33.  
  34.          echo '<a href="#">', $files, '</a><br>';
  35.  
  36.        }
  37.      }
  38.    }
  39.  }
  40.  
  41. ?>

No esta modificado en el ultimo código que pusiste porque ya lo empece con este, pero seria prácticamente igual. Por si quieres usarlo.

También yo estoy usando $files en las etiquetas <a> porque así me muestra únicamente el nombre del archivo o directorio  :D


Título: Re: Cambiar de directorio
Publicado por: gAb1 en 27 Mayo 2016, 20:15 pm
Lo de dirname() es porque antes estaba usando el separador de unix / y en windows es \ por lo tanto:

Código
  1. $backDir = $dirName == '/' ? '' : '?move=' . $dirName;

En tu caso tu botón tiene /test?move=\ y el mio /test. Esto resuelve el misterio de porqué a tí se te muestra el botón en el directorio raiz, al ser la url /test?move=\ entonces $newPath ya no es NULL y entonces se muestra el botón.

Antes de PHP 7, dirname mostraba el primer directorio: /dir1/dir2/dir3 -> /dir1 o C:\dir1\dir2\dir3 -> C:\dir1. Ahora sube 1 nivel por defecto, con la adicción del parámetro adicional levels, que puedes elegir cuantos subir.

Todo estó quedo arreglado en la versión 1.0  ;D

Aaalaaaaaa  :o hahahaha  ;D (al menos no es tanto como lo que intenté hacer una vez...  :silbar:)

Mira esta manera parece más complicada?  :rolleyes:

Código
  1. // IMPORTANT: Requires PHP >= 7
  2.  
  3. $newPath = $_GET['move'] ?? NULL;
  4. $slash   = DIRECTORY_SEPARATOR; // \ for Windows and / for the rest
  5. $levels  = count(explode($slash, $newPath)) - 1;
  6. $baseDir = '/home/admin'; // Absolute path to document root
  7.  
  8. $path  = realpath($baseDir . $newPath); // Checks for a valid and existent path within the document root
  9.  
  10. if ( NULL !== $newPath ) {
  11.    if (dirname($path, $levels) !== $baseDir) die('Sorry I just died :P'); // Hack attempt
  12. }
  13.  
  14. if ( FALSE !== $path && is_dir($path) ) {
  15.  
  16.    $files          = new FileSystemIterator($path, FileSystemIterator::SKIP_DOTS);
  17.    $privateArray   = [ '.htaccess' => '', 'h4x0r stuff' => '', 'etc...' => '' ]; // List of excluded files and folders
  18.    $folder_list    = $file_list = '';
  19.  
  20.    if ( FALSE !== $files ) {
  21.  
  22.        if ( isset($newPath) && $newPath != '' ) {
  23.  
  24.            $dirName = dirname($newPath);
  25.            $backDir = $dirName == $slash ? '' : '?move=' . $dirName;
  26.  
  27.            echo '<a href="/test' . $backDir . '">Go Back</a><br />';
  28.  
  29.        }
  30.  
  31.        foreach ( $files as $file ) {
  32.  
  33.            $baseName = basename($file);
  34.  
  35.            if ( !isset($privateArray[$baseName]) ) {
  36.  
  37.                if ( is_dir($file) ) {
  38.  
  39.                    $dir = isset($newPath) ? '?move=' . $newPath . $slash . $baseName : '?move=' . $slash . $baseName;
  40.  
  41.                    $folder_list .= '<a href="/test' . $dir . '">' . $file . '</a><br />';
  42.  
  43.                }
  44.  
  45.                if ( is_file($file) ) {
  46.                    $file_list .= '<a href="#">' . $file . '</a><br />';
  47.                }
  48.  
  49.            }
  50.        }
  51.  
  52.        echo $folder_list, $file_list;
  53.  
  54.    }
  55. }

Ahora es más facil darle estilo a la lista.


Título: Re: Cambiar de directorio
Publicado por: Moand en 28 Mayo 2016, 15:51 pm
No se si a ti te ocurre la mismo, pero cuando bajo un nivel no me permite ir al nivel principal. Sin embargo, cuando bajo dos niveles si me deja ir al nivel anterior.

Si desde el navegador lo miro me aparece asi:

(http://i.imgur.com/uVgFzi9.png)

Si la parte del "Go back" la reemplazo por esto:

Código
  1. $back_dir = dirname($newPath) == $slash ? '' : dirname($newPath);
  2.      echo isset($newPath) ? ($newPath == '' ? '' : '<a href="?move=' . $back_dir . '">Go Back</a><br>') : '';

Si sube el nivel, pero da un error

(http://i.imgur.com/WboMz97.png)

Lo intentaría solucionar pero es que no entiendo muy bien lo de "levels". Creo que lo que hace es contar el numero de directorios que hay usando como separador \ o /  :huh:



Vale, creo que ya se por que es. Como estoy en Windows seguramente también cuenta la letra de mi unidad, es decir, en Linux empezaría a contar después de la raíz y en Windows desde la letra.

C:\nivel1\nivel2\nivel3 --> Aquí lo contaría como 4
/nivel1/nivel2/nivel3 --> Aquí lo contaría como 3


Título: Re: Cambiar de directorio
Publicado por: gAb1 en 28 Mayo 2016, 23:55 pm
Eso no tiene sentido, E:\ y / son lo mismo, ambos son root. \ y / son simplemente separadores, no directorios en si.

Lo que pasa es que el directorio base (o root) en Linux es siempre el mismo, pero en Windows depende de la partición en la que estás (esta será el directorio base). No sé si me explico.

Windows -> A:\, B:\, C:\, etc...

Linux -> /

El document root (o base) de apache es el directorio en el que puedes trabajar: Solo puedes leer y escribir dentro de el (desde la web, ya sea html o php), por eso realpath da error si te sales de el (salierte en este caso quiere decir subir un directorio, puedes bajar todo lo que quieras).

En tu caso sería -> E:\Programas\Xampp\htdocs
En mi caso sería -> /home/admin

Estás usando el viejo script. Haz una prueba y copia mi ultimo script tal cual y comprueba si te da error. Ya que es compatible con windows y linux y no debería de ocurrirte eso, ya que amí no me ocurre.


Título: Re: Cambiar de directorio
Publicado por: Moand en 29 Mayo 2016, 02:30 am
Yo lo único que hago es cambiar la ruta y quitar el "/test".

Código
  1. <?php
  2.  
  3. $newPath = $_GET['move'] ?? NULL;
  4. $slash   = DIRECTORY_SEPARATOR; // \ for Windows and / for the rest
  5. $levels  = count(explode($slash, $newPath)) - 1;
  6. $baseDir = 'E:\Programas\Xampp\htdocs'; // Absolute path to document root
  7.  
  8. $path  = realpath($baseDir . $newPath); // Checks for a valid and existent path within the document root
  9.  
  10. if ( NULL !== $newPath ) {
  11.    if (dirname($path, $levels) !== $baseDir) die('Sorry I just died :P'); // Hack attempt
  12. }
  13.  
  14. if ( FALSE !== $path && is_dir($path) ) {
  15.  
  16.    $files          = new FileSystemIterator($path, FileSystemIterator::SKIP_DOTS);
  17.    $privateArray   = [ '.htaccess' => '', 'h4x0r stuff' => '', 'etc...' => '' ]; // List of excluded files and folders
  18.    $folder_list    = $file_list = '';
  19.  
  20.    if ( FALSE !== $files ) {
  21.  
  22.        if ( isset($newPath) && $newPath != '' ) {
  23.  
  24.            $dirName = dirname($newPath);
  25.            $backDir = $dirName == $slash ? '' : '?move=' . $dirName;
  26.  
  27.            echo '<a href="' . $backDir . '">Go Back</a><br />';
  28.  
  29.        }
  30.  
  31.        foreach ( $files as $file ) {
  32.  
  33.            $baseName = basename($file);
  34.  
  35.            if ( !isset($privateArray[$baseName]) ) {
  36.  
  37.                if ( is_dir($file) ) {
  38.  
  39.                    $dir = isset($newPath) ? '?move=' . $newPath . $slash . $baseName : '?move=' . $slash . $baseName;
  40.  
  41.                    $folder_list .= '<a href="' . $dir . '">' . $file . '</a><br />';
  42.  
  43.                }
  44.  
  45.                if ( is_file($file) ) {
  46.                    $file_list .= '<a href="#">' . $file . '</a><br />';
  47.                }
  48.  
  49.            }
  50.        }
  51.  
  52.        echo $folder_list, $file_list;
  53.  
  54.    }
  55. }
  56.  
  57. ?>

Por lo demás esta todo igual. Y es verdad, no es por eso porque también lo acabo de probar en Ubuntu.


Título: Re: Cambiar de directorio
Publicado por: gAb1 en 29 Mayo 2016, 03:05 am
Pues necesitas una url a la que volver, /test no está por gusto  ;D

Me explico mejor: /test seria el document root, cuando estas en /test?move=\mi carpeta entonces entonces dirname($netPath); es \ y cuando $dirname == $slash, $backDir = '' y el href es "".

¿Que ocurre cuando un link tiene un href vacio? Que hace una petición a la misma página. Por eso tienes que poner tu archivo (que es el document root) en el href.

Si tu archivo es pru.php entonces href="/pru.php" y ese es el document root:

Cuando te encuentres en web.com/pru.php?move=\mi carpeta, el boton "Go back" será href="/pru.php" y podrás ir atras.

Lo que no entiendo es lo que has hecho para que te saliera: <a href> asi sin más xD a eso le falta ="". Eso quiere decir que cambiaste algo más...  :rolleyes:


Título: Re: Cambiar de directorio
Publicado por: Moand en 29 Mayo 2016, 13:22 pm
Vale, ya lo entiendo.   :)

Es que como tu tenias puesto /test me confundió porque creía que era para que te redirigiera allí. Y encima en el anterior lo quite y funcionaba sin eso.  :P

Cuando tienes puesto href="", el navegador lo muestra como href  sin nada xD

Muchas gracias por tu ayuda  ;D


Título: Re: Cambiar de directorio
Publicado por: gAb1 en 29 Mayo 2016, 20:14 pm
Perfecto, ya puedes marcar la pregunta como resuelta  ::)


Título: Re: Cambiar de directorio
Publicado por: Moand en 30 Mayo 2016, 19:46 pm
Así es, muchas gracias :D