Un explorateur PHP

marcdu77114 Messages postés 3 Date d'inscription mercredi 25 janvier 2012 Statut Membre Dernière intervention 26 janvier 2012 - 26 janv. 2012 à 14:53
marcdu77114 Messages postés 3 Date d'inscription mercredi 25 janvier 2012 Statut Membre Dernière intervention 26 janvier 2012 - 26 janv. 2012 à 21:48
Bonjour à tous !

Déjà, je m'excuse de poster ça ici, je ne savais pas ou le mettre, et comme je suis un débutant ...
Pour la petite histoire -dont tout le monde se fout- je suis depuis deux semaines au HTML , PHP, CSS et javascript. En général , j'apprends vite et par moi même, et le fait que je connaisse déjà le C++ aide.

Aujourd'hui j'ai un problème avec un explorateur de fichier. C'est un projet que je fais genre mini tp : améliorer un peu cela : http://www.phpsources.org/scripts61-PHP.htm qui est lui même une amélioration de celui ci, mais sans que ça soit précisé. http://cyberzoide.developpez.com/php4/file/
Le but est de créer une possibilité d'upload (pas encore fait), de suppression de fichier (non plus ^^) et de download (ne marche pas, et c'est mon problème à l'heure actuelle).

Vous allez me dire : "rien ne marche quoi ?" Je réponds : je ne suis là dessus que depuis hier matin, et il y avait pas mal d'erreurs de variables non déclarées et de compatibilité du code (il est assez vieux et certaines fonctions avait été dépréciées).

J'en viens donc au download : vous remarquerez que ça n'est pas prévu à la base dans le tp. j'ai seulement affiché le nom du fichier en lien, pour que ça marche.
Et effectivement, ça marche : je m'explique, mais vous allez avoir du mal à comprendre.
Le fichier php que j'appelle test3.php est dans un dossier nommé "Explorateur".
Dans ce même dossier, il y a un répertoire pour les images, un pour le css et le javascript. (vous pouvez avoir ces fichiers à http://www.phpsources.org/scripts61-PHP.htm ).
Dans le dossier Explorateur, j'ai créé un dossier, que je voulais explorer : DOSSIER-A-OUVRIR. J'ai colé dedans une partie de mon répertoire musical (en l'occurence les dossier Artistes en A et Artistes en B ainsi que leur contenu).
L'explorateur va au delà de mes espérances, puisqu'on peut ouvrir les dossiers Artistes en A et artistes en B ainsi que leurs sous dossiers (Nom d'artiste) dans l'arborescence, et voir le fichiers contenus (principalement du mp3), sous forme de LIEN dans la partie de droite. Le problème, c'est que quand je clique sur un lien : j'ai le droit à un joli : "The requested URL /Explorateur/Dis Moi.mp3 was not found on this server."
Autrement dis, si je met mes musiques dans le dossier "Explorateur" et à leur place, dans les dossiers, ça marche très bien, mais si je fais ça, je vais devoir mettre le double de musique.
Ce qui ne vas pas est que le lien "pointe" vers Explorateur/nom_du_fichier.extension_du_fichier,
alors qu'il faudrait qu'il pointe vers
Explorateur/DOSSIER-A-OUVRIR/....chemin vers le fichier.../nom_du_fichier.extension_du_fichier

alors voilà, je vous met mon fichier source, je vous indique la ligne ou il a le lien vers le fichier, et j'attend plus qu'avec hate votre réponse.

<?php
/******************************************************************************/
/*                                                                            */
/*                       __        ____                                       */
/*                 ___  / /  ___  / __/__  __ _____________ ___               */
/*                / _ \/ _ \/ _ \_\ \/ _ \/ // / __/ __/ -_|_-<               */
/*               / .__/_//_/ .__/___/\___/\_,_/_/  \__/\__/___/               */
/*              /_/       /_/                                                 */
/*                                                                            */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Titre          : Liste répertoires et sous-répertoires                     */
/*                                                                            */
/* URL            : http://www.phpsources.org/scripts61-PHP.htm               */
/* Auteur         : Mathieu                                                   */
/* Date édition   : 01 Sept 2004                                              */
/*                                                                            */
/******************************************************************************/
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

<html> 

<head> 

<meta http-equiv= "Content-Type" content="text/html;charset=iso-8859-1"> 

<style type="text/css"> 
* {font-size: 14pt;}
a:link, a:hover, a:active, a:visited {color: #0000FF;}
</style> 
</head> 

 

<?php 
$order = isset($_GET['order']) ? $_GET['order'] : '';
$order0 = isset($_GET['order0']) ? $_GET['order0'] : '';
$dir = isset($_GET['dir']) ? $_GET['dir'] : '';
$asc = isset($_GET['asc']) ? $_GET['asc'] : '';


//définir ou est le dossier racine
$BASE = 'DOSSIER-A-OUVRIR';


/* infos à extraire */ 
function addScheme($entry,$base,$type) 
{
$tab['name'] = $entry;
$tab['type'] = filetype($base.'/'.$entry);
$tab['date'] = filemtime($base.'/'.$entry);
$tab['size'] = filesize($base.'/'.$entry);
$tab['perms'] = fileperms($base.'/'.$entry);
$tab['access'] = fileatime($base.'/'.$entry);
$t = explode('.', $entry);
$tab['ext'] = $t[count($t)-1];
return $tab;
}


/* liste des dossiers */ 
function list_dir($base, $cur, $level=0) 
{
global $BASE, $order, $asc;
if ($dir = opendir($base)) 
{
$tab = array();
while($entry = readdir($dir)) 
{
if(is_dir($base.'/'.$entry) && !in_array($entry, array('.','..'))) 
{
$tab[] = addScheme($entry, $base, 'dir');
}
}
/* tri */ 
usort($tab,'cmp_name');

foreach($tab as $elem) 
{
$entry = $elem['name'];
/* chemin relatif à la racine */ 
$file = $base.'/'.$entry;
if(is_dir($file) && !in_array($entry, array(".",".."))) 
{
for($i=1;$i<=(4*$level);$i++) /* marge gauche */
  {
echo " ";
  }
  
  /* l'entrée est-elle le dossier courant */ 
if($file == $cur) 
{echo " $entry
\n";}
else 
{echo " $entry
\n";}

/* l'entrée est-elle dans la branche dont le dossier courant est la feuille */ 
if(mb_ereg($file.'/',$cur.'/')) 
{list_dir($file, $cur, $level+1);}
}
}
closedir($dir);
}
}


/* liste des fichiers */ 
function list_file($cur) 
{
global $order, $asc, $order0;
if ($dir = opendir($cur)) 
{
/* tableaux */ 
$tab_dir = array();
$tab_file = array();

/* extraction */ 
while($file = readdir($dir)) 
{
if(is_dir($cur.'/'.$file)) 
{
if(!in_array($file, array('.','..'))) 
{
$tab_dir[] = addScheme($file, $cur, 'dir');
}
}else 
{
$tab_file[] = addScheme($file, $cur, 'file');
}
}

/* tri */ 
usort($tab_dir,'cmp_'.$order);
usort($tab_file,'cmp_'.$order);

/* affichage */ 
echo '';//déclaration de la talbe
echo '----

 '.(($order=='name')?(($asc=='a')?'/\\ ':'\\/ '):'').
"Nom  |,
".(($order == 'size')?(($asc=='a')?'/\\ ':'\\/ '):'').
"Taille |,
 ".(($order=='date')?(($asc=='a')?'/\\ ':'\\/ '):'').
"Dernière modification  |" .
",
".(($order == 'type')?(($asc=='a')?'/\\ ':'\\/ '):'').
"Type |,
 ".(($order=='ext')?(($asc=='a')?'/\\ ':'\\/ '):'').
"Extention  |,
".(($order == 'perms')?(($asc=='a')?'/\\ ':'\\/ '):'').
"Permissions |,
 ".(($order=='access')?(($asc=='a')?'/\\ ':'\\/ '):'').
"Dernier accès  |\";
foreach($tab_dir as $elem)
{//affichage des détails pour les dossiers
echo
'----

 '.$elem['name'].',
,
,
,
'.date("d/m/Y H:i:s", $elem['date']).',
,
'.assocType($elem['type']).',
,
,
,
'.$elem['perms'].',
,
'.date("d/m/Y", $elem['access']).',
';

}
foreach($tab_file as $elem)
{//affichage des détails pour les fichiers, le lien est dans le premier echo
'----, '.$elem['name'].'</td>
,
'.formatSize($elem['size']).',
,
'.date("d/m/Y H:i:s", $elem['date']).',
,
'.assocType($elem['type']).',
,
'.assocExt($elem['ext']).',
,
'.$elem['perms'].',
,
'.date("d/m/Y", $elem['access']).',
';
}
echo "
";
closedir($dir);
}//fin de if
}//fin de fonciton


/* formatage de la taille */ 
function formatSize($s) 
{
/* unités */ 
$u  = array('octets','Ko','Mo','Go','To');

/* initialisation du compteur de passages dans la boucle */ 
$i = 0;

/* initialisation du nombre à afficher */ 
$m = 0;

/* division par 1024 */ 
while($s >= 1) 
{
$m = $s;
$s /= 1024;
$i++;
}
if(!$i) 
{$i=1;}

$d = explode('.',$m);

/* s'il y a des décimales */ 
if($d != $m) 
{
$m = number_format($m, 2, ',', ' ');
}
return $m.' '.$u[$i-1];
}


/* formatage du type */ 
function assocType($type) 
{
  /* tableau de conversion */ 
  $t = array( 
'fifo' => 'file', 
'char' => 'fichier spécial en mode caractère', 
'dir' => 'dossier', 
'block' => 'fichier spécial en mode bloc', 
'link' => 'lien symbolique', 
'file' => 'fichier', 
'unknown' => 'inconnu' 
);
  return $t[$type];
}


/* description de l'extention */ 
function assocExt($ext) 
{
$e = array( 
'' => "inconnu", 
'doc' => "Microsoft Word", 
'xls' => "Microsoft Excel", 
'ppt' => "Microsoft Power Point", 
'pdf' => "Adobe Acrobat", 
'zip' => "Archive WinZip", 
'txt' => "Document texte", 
'gif' => "Image GIF", 
'jpg' => "Image JPEG", 
'png' => "Image PNG", 
'php' => "Script PHP", 
'php3' => "Script PHP", 
'htm' => "Page web", 
'html' => "Page web", 
'css' => "Feuille de style", 
'js' => "JavaScript",
'avi'=>"Film en AVI"
);
if(in_array($ext, array_keys($e))) 
{
return $e[$ext];
}
else 
{
return $e[''];
}
}


function cmp_name($a,$b) 
{
    global $asc;
    if ($a['name'] == $b['name']) 
{return ;}
    if($asc == 'a') 
{
        return ($a['name'] < $b['name']) ? -1 : 1;
    }
else 
{
        return ($a['name'] > $b['name']) ? -1 : 1;
    }
}


function cmp_size($a,$b) {
    global $asc;
    if ($a['size'] == $b['size']) 
{return cmp_name($a,$b);}
    if($asc == 'a') 
{
        return ($a['size'] < $b['size']) ? -1 : 1;
    }
else 
{
        return ($a['size'] > $b['size']) ? -1 : 1;
    }
}

function cmp_date($a,$b) {
    global $asc;
    if ($a['date'] == $b['date']) 
{return cmp_name($a,$b);}
    if($asc == 'a') 
{
        return ($a['date'] < $b['date']) ? -1 : 1;
    }
else 
{
        return ($a['date'] > $b['date']) ? -1 : 1;
    }
}



function cmp_access($a,$b) {
    global $asc;
    if ($a['access'] == $b['access']) 
{return cmp_name($a,$b);}
    if($asc == 'a') 
{
        return ($a['access'] < $b['access']) ? -1 : 1;
    }
else 
{
        return ($a['access'] > $b['access']) ? -1 : 1;
    }
}



function cmp_perms($a,$b) 
{
    global $asc;
    if ($a['perms'] == $b['perms']) 
{return cmp_name($a,$b);}
    if($asc == 'a') 
{
        return ($a['perms'] < $b['perms']) ? -1 : 1;
    }
else 
{
        return ($a['perms'] > $b['perms']) ? -1 : 1;
    }
}




function cmp_type($a,$b) 
{
    global $asc;
    if ($a['type'] == $b['type']) 
{return cmp_name($a,$b);}
    if($asc == 'a') 
{
        return ($a['type'] < $b['type']) ? -1 : 1;
    }
else 
{
        return ($a['type'] > $b['type']) ? -1 : 1;
    }
}



function cmp_ext($a,$b) 
{
    global $asc;
    if ($a['ext'] == $b['ext']) 
{return cmp_name($a,$b);}
    if($asc == 'a') 
{
        return ($a['ext'] < $b['ext']) ? -1 : 1;
    }
else 
{
        return ($a['ext'] > $b['ext']) ? -1 : 1;
    }
}
?> 


<!-- ET SIIIIII !!!! IL Y A QUAND MEME DU VRAI HTML DANS CETTE PAGE --> 

<!-- ET OUIIIIIII !!!! C'EST TOUT POUR CETTE PAGE ^^ -->

<!-- liste des répertoires
et des sous-répertoires -->
<?php
if(!in_array($order, array('name','date','size','perms','ext','access','type')))
{
$order = 'name';
}
if(($order == $order0) && ($asc != 'b'))
{
$asc = 'b';
}
else
{
$asc = 'a';
}
/* lien sur la racine */
if(!$dir)
{
echo " /

\n";
}
else
{
echo " /
\n";
}
list_dir($BASE, rawurldecode($dir), 1);
?>,
<!-- liste des fichiers -->
<?php

/* répertoire initial à lister */
if(!$dir)
{
$dir = $BASE;
}
list_file(rawurldecode($dir));
?>
 

2 réponses

marcdu77114 Messages postés 3 Date d'inscription mercredi 25 janvier 2012 Statut Membre Dernière intervention 26 janvier 2012
26 janv. 2012 à 15:04
Je me rend compte qu'en fait , ma question est juste : comment, dans mon cas, afficher le chemin entre le dossier Explorateur et le fichier.

Enfin je sais pas si ça s'appelle un chemin quand on est sur internet, mais bon ... c'est pas plutot une histoire de lien relatif ou absolu ? j'ai lu ça quelque part je vais retourner lire.M

Mais nulle part ils me diront comment faire évoluer ce lien, c'est pour ça que je me tourne vers vous.

Merci d'avance de votre précieuse aide
0
marcdu77114 Messages postés 3 Date d'inscription mercredi 25 janvier 2012 Statut Membre Dernière intervention 26 janvier 2012
26 janv. 2012 à 21:48
0
Rejoignez-nous