Puoi usare explode('/', $path), così ottieni tutte le parti del percorso, rimuovi l'ultimo elemento e unisci tutti gli elementi.
Codice PHP:
<?php
$path = (isset($_GET['path']) && is_dir($_GET['path'])) ? $_GET['path'] : 'upload';
$parent = explode('/', $path);
$len = count($parent);
if($len > 1) {
unset($parent[$len - 1]); // rimuove l'ultimo elemento
}
$parent = implode('/', $parent);
$all = glob($path . '/*'); // tutti files e cartelle
$img = array('gif', 'png', 'jpg'); // lista dei tipi di formato per immagine
$doc = array('doc', 'xls', 'docx', 'pdf', 'ppt', 'pptx', 'xlsx'); // lista dei tipi di formato per documenti
?>
<table width="200" border="1">
<tr>
<td><?php echo $path; ?></td>
</tr>
</table>
<br /><br />
<table width="200" border="1">
<?php
if($parent != $path) {
echo '<tr><td><a href="?path=' . $parent . '">Parent</a></td></tr>';
}
foreach($all as $file) {
$ext = end(explode('.', $file));
$name = str_replace($path . '/', '', $file);
$line = false;
if(is_dir($file)) {//se è una cartella
$line = '<img src="immagini/cartella.png" height="15" width="15"/> <a href="?path=' . $path . '/' . $name . '">' . $name . '</a>';
} else if(in_array($ext, $img)) {//se è un immagine
$line = '<img src="immagini/immagine.png" height="15" width="15"/> ' . $name;
} else if(in_array($ext, $doc)) {//se è un documento
$line = '<img src="immagini/immagine.png" height="15" width="15"/> ' . $name;
}
if($line) {
echo '<tr><td>' . $line . '</td></tr>';
}
}
?>
</table>
Così, dovrebbe funzionare.