En primer lugar la estructura de su código es horrible - no estoy seguro si eso era una cosa de copiar y pegar o qué. Pero tal como está, estás creando un enlace al directorio en lugar de volver a llamar al script. Pruebe esto:
<?php
$dirname = (isset($_GET['dir'])) ? $_GET['dir'] : '/drives/Storage/AppsOSs/';
if(!$dir = opendir($dirname))
{
die("Unable to open $dirname");
}
$file_list = "";
while(($file = readdir($dir)) !== false)
{
if(($file != '.') && ($file != '..'))
{
if(is_dir($dirname . $file))
{
$file_list .= "<a href=\"" . $_SERVER['PHP_SELF'] . "?dir=" . $dirname . $file . "\">" . $file . "</a><br/>";
}
else
{
$file_list .= "<a href=\"$dirname/$file\">$file</a><br/>";
}
}
}
closedir($dir);
?>
<p>
<?= $file_list; ?>
</p>
Es posible que deba modificarlo ligeramente para que funcione con su sistema. Sin embargo, la idea es: si se trata de un archivo, carga la ruta de archivo directamente en el navegador; si es un directorio, vuelva a llamar al script con el nuevo nombre de directorio. Se podría elaborar más con algo como esto:
<?php
$dirname = (isset($_GET['dir'])) ? $_GET['dir'] : '/drives/Storage/AppsOSs/';
if(!$dir = opendir($dirname))
{
die("Unable to open $dirname");
}
$dir_arr = array();
$file_arr = array();
while(($file = readdir($dir)) !== false)
{
if(($file != '.') && ($file != '..'))
{
if(is_dir($dirname . $file))
{
$dir_arr[] = "<a href=\"" . $_SERVER['PHP_SELF'] . "?dir=" . $dirname . $file . "\">" . $file . "</a>";
}
else
{
$file_arr[] = "<a href=\"$dirname/$file\">$file</a>";
}
}
}
closedir($dir);
$dir_list = implode("<br/>", $dir_arr);
$file_list = implode("<br/>", $file_arr);
?>
<p>
<?= "<h1>Directories</h1>" . $dir_list . "<h1>Files</h1>" . $file_list; ?>
</p>
Con esta configuración todos los directorios se enumeran en primer lugar - en lugar de mezclarse alfabéticamente como en el primer ejemplo.
Puede usar $ dirname como $ dirname = $ _GET ['dirname']; y $ file_list como $ file_list. = "$file
"; pero esto te llevaría a un nuevo nivel de problemas, como personas que intentan enviar comandos como "rm -rf *" a tu $ _GET y tal que necesitarías escapar y desinfectar todos los datos entrantes para que no te topes con problemas, pero probablemente exista una mejor solución – Prix
hmm, sí, prefiero no utilizar GET, trato de evitar eso en su mayor parte ... El problema es cuando hago clic en un directorio, en este momento está enlazando a la ruta directa, y como es un directorio, no un archivo, va al directorio apache. Lo que básicamente quiero hacer es hacer que solo apunte a una ruta directa si el elemento es un archivo (de esa manera se puede descargar) pero si es un directorio, realmente solo quiero recuperar los archivos/directorios dentro de eso y enumerarlos de forma similar a como lo hago ahora con mi script ... Honestamente, no soy el mejor con php, así que estoy teniendo un problema – jz3
Joe - no hay forma de evitar el uso de GET A menos que use POST - usted tiene que actualizar la secuencia de comandos con el nuevo directorio para recorrer y mostrar, o continuamente obtendrá el directorio predeterminado de Apache porque ya no apunta al script sino al directorio físico. –