Lo de dirname() es porque antes estaba usando el separador de unix / y en windows es \ por lo tanto:
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
Aaalaaaaaa hahahaha (al menos no es tanto como lo que intenté hacer una vez... )
Mira esta manera parece más complicada?
Ahora es más facil darle estilo a la lista.
Código (php) [Seleccionar]
$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
Aaalaaaaaa hahahaha (al menos no es tanto como lo que intenté hacer una vez... )
Mira esta manera parece más complicada?
Código (php) [Seleccionar]
// IMPORTANT: Requires PHP >= 7
$newPath = $_GET['move'] ?? NULL;
$slash = DIRECTORY_SEPARATOR; // \ for Windows and / for the rest
$levels = count(explode($slash, $newPath)) - 1;
$baseDir = '/home/admin'; // Absolute path to document root
$path = realpath($baseDir . $newPath); // Checks for a valid and existent path within the document root
if ( NULL !== $newPath ) {
if (dirname($path, $levels) !== $baseDir) die('Sorry I just died :P'); // Hack attempt
}
if ( FALSE !== $path && is_dir($path) ) {
$files = new FileSystemIterator($path, FileSystemIterator::SKIP_DOTS);
$privateArray = [ '.htaccess' => '', 'h4x0r stuff' => '', 'etc...' => '' ]; // List of excluded files and folders
$folder_list = $file_list = '';
if ( FALSE !== $files ) {
if ( isset($newPath) && $newPath != '' ) {
$dirName = dirname($newPath);
$backDir = $dirName == $slash ? '' : '?move=' . $dirName;
echo '<a href="/test' . $backDir . '">Go Back</a><br />';
}
foreach ( $files as $file ) {
$baseName = basename($file);
if ( !isset($privateArray[$baseName]) ) {
if ( is_dir($file) ) {
$dir = isset($newPath) ? '?move=' . $newPath . $slash . $baseName : '?move=' . $slash . $baseName;
$folder_list .= '<a href="/test' . $dir . '">' . $file . '</a><br />';
}
if ( is_file($file) ) {
$file_list .= '<a href="#">' . $file . '</a><br />';
}
}
}
echo $folder_list, $file_list;
}
}
Ahora es más facil darle estilo a la lista.