Forum Clubic

Test dossier ou fichier?

Bonjours, j’ai un mini projet a realiser en php, pour mes études.
La consigne est disponible ici: Porte document multi utilisateur

Comme vous pouvez le voir, il faut gérer les droits.
En ce moment, je suis en train de realiser une fonction listing qui sera chargé d’afficher le repertoire qu’on lui passe en paramétre.
Voici l’algorithme:

fonction listing(repertoire)
début
	si dossier courant = dossier de l'utilisateur
		parcourir le dossier avec une boucle while
			
			si le fichier lu est un dossier
				afficher le nom du dossier avec un lien pour voir son contenu (role de la page changedir.php)
			
			sinon
				afficher le nom du fichier + un lien pour telecharger celui ci
			fin si
		
		fin tant que
		
	sinon
		parcourir le dossier avec une boucle while
		
			si le fichier lu est un dossier
				afficher le nom du dossier avec un lien pour voir son contenu
			sinon
				afficher le nom du fichier + lien SI le droit est: public
			fin si
		fin tant que
	fin si
fin

Je pense que celui ci est bon.
Mon probléme est que je ne sais pas comment tester si le fichier lu est un fichier ou un dossier, la fonction isdir ne marche pas (inutile de me dire “ajoute tel ou tel bibliothéque”, en local ca marchera, mais quand le miniprojet sera fini, il sera sur le serveur de l’iut, auquel je ne pourrais pas ajouter de librairie)

voici le code du fichier listing.php:

function listing($repertoire){
echo '<br>le repertoire est:<br>'.$repertoire.'<br><br>';
	chdir($repertoire);
	$dh  = opendir($repertoire);
	$tab=parse_ini_file("droits.ini",true);
	
	//ici on va récupérer le nom du récpertoire courant, soit repertoires, soit le dossier d'un utilisateur
	if ($_SESSION['repwanted']=='repertoires/')
		$current='repertoires';
	else{
		$bibi=explode("/",$_SESSION['repwanted']);
		$current=$bibi[1];
	}
	
	
	
	echo '<table><tr><td><b>Nom</b></td><td><b>Description</b></td></tr>';
	//si l'utilisateur est dans son repertoire
	
	if ($_SESSION['nom']==$current){
		while ($filename = readdir($dh)) {
			if ($filename!='.' && $filename!='..' && $tab){
			
				if (isdir($filename)){
					echo '<tr><td><a href="/changedir.php?'.$current.'/'.$filename.'">'.$filename.'</a></td><td>'.$tab['descriptions'][$filename].'<td></td></tr>';
				}
				else{
					echo '<tr><td><a href="'.$repertoire.'/'.$filename.'">'.$filename.'</a></td><td>'.$tab['descriptions'][$filename].'<td></td></tr>';
				}
			}
		}
	}
	
	//sinon, on va devoir afficher que les fichiers ayant le droit public

}

Et aussi, quelques spécifications sur l’organisation de mon projet:
-a la racine du site, il y a un dossier nommé “repertoires” qui contient les dossiers des compte utilsateurs.
Par exemple, les fichiers de l’utilisateur bibi se trouverons dans repertoires/bibi/

-le dossier a afficher est stocké dans $_SESSION[‘repwanted’], par exmple: repertoires/ ou repertoires/pierre

-la page changedir.php?dir=… se charge de mettre a jour $_SESSION[‘repwanted’] avec le paramétre contenu dans $_GET[‘dir’] et fait une redirection sur index.php

-index.php appel la fonction listing pour afficher le contenu du repertoire $_SESSION[‘repwanted’]

j’ai pas tout lu, manque de temps, mais si is_dir marche pas, essaies avec filetype pour analyser me fichier :neutre:

Merci beaucoup !!!
Rah la honte, la vielle erreur:

c’est pas isdir c’est is_dir

la fonction isdir existe avec une bibliothéque spéciale fr.php.net…

en plus j’avais aidé quelqu’un y’a quelques temps, sur le topic programmation revivera, dans son cas c’était pour tester l’existence d’un dossier, c’est pour ca que je n’ai pa retrouvé cette fonction, ca me titillé…

Par contre, maintenant que ca marche, j’ai un autre pti problée, il fait bien la modifcation des liens entre fichiers et dossiers, mais pour les dossiers, il fait par exemple ceci:

http://localhost/changedir.php?repertoires/bibi

Pas cool les slash dans $_GET, vous avez pas une idée?
Edité le 09/06/2007 à 20:40

Parlant toujours sans avoir tout lu, juste ton dernier message, si tu veux supprimer le dernier caractère / d’une variable tu peux lui appliquer des masques, ou tout simplement ce qui suit (c’est pas très beau m’enfin :/)

$mavar=substr($mavar,0,(strrpos($mavar,'/')-1));

Ceci devrait te supprimer tout ce qui suit le dernier caractère “/” (caractère compris) d’une chaine.

Si c’est simplement le dernier caractère que tu veux faire sauter, fait ainsi :

$mavar=substr($mavar,0,(strlen($mavar)-1));

Edité le 09/06/2007 à 21:08

Si mes souvenirs sont bons, je crois que c’était moi :stuck_out_tongue:

Pour ta question, je n’ai pas tout compris, mais ce que tu veux faire c’est quoi ? remplacer le dernier slash par un égal ?
Edité le 09/06/2007 à 21:17

Ah oui, c’était toi, le monde clubic est petit !
en fait, voici le code de changedir.php:

<?php
session_start();
$_SESSION['repwanted']='repertoires/'.$_GET['dir'];
header('Location:/index.php');
?>

admettons que je sois actuellement dans le dossier de l’utilisateur bibi:
/repertoires/bibi

le dossier bibi contient un sous dossier bibi2, qui lui méme contient un sous dossier bibi3:

bibi2 auras donc un lien du type: “http://racine_du_site/changedir.php?dir=bibi/bibi2”

OK, je suis maintenant dans le dossier bibi2
je clic sur bibi3 qui a un lien sur “http://racine_du_site/changedir.php?dir=bibi/bibi2/bibi3”

En fait, chaque dossier affiché aura un lien sur la page changedir.php avec comme paramétre GET:
dossier courant / nom du dossier

Et j’avoue que je galére un peu perdu, je ne vois pas trop comment faire
Edité le 09/06/2007 à 21:59

et donc tu trouves que le slash en paramètre c’est moche. Dans ce cas pourquoi ne pas faire un coup de strtr pour remplacer le slash par un tiret (par exemple) dans ta variable d’url ? ensuite, lors du traitement dans ton code, tu n’aurais qu’à faire le chemin inverse, remplacer le tiret par un slash. Cela évite de mettre des slashes en paramètre d’url. Après la seule chose à laquelle tu dois faire gaffe, c’est de ne pas avoir de dossier avec un tiret dans son nom, ou il serait remplacé par un slash dans ton traitement…

Si ce n’est pas ce que tu veux faire, c’est que j’ai toujours pas compris :smiley:

Ah tiens, j’avais oublié de répondre.
Pour remplacer les / par un autre caractére, j’y avais pensais, mais dans ce cas, j’aurais était obligé d’interdire ce caractére pour la création de sous dossiers…

En fait, j’ai fait plus simple, j’ai stocké le repertoire actuel dans $_SESSION, du coup, je n’avais qu’un seul paramétre a transmettre, je recolle le tout dans changedir.php et voila.

Le projet était a rendre pour le 14, alors voici ce que j’ai rendu, pour ceux que ca inétresse:
finalclap.free.fr…

voila voila, merci a tous pour votre aide (sur les autres topics que j’ai crée pour ce mini projet aussi)