Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/06/2007, 17h51   #1
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Haute Savoie (Rhône Alpes)

Informations forums :
Inscription : septembre 2006
Messages : 128
Points : 36
Points : 36
Par défaut Listing de répertoires

Rebonjour à tous,

Je suis très bavard aujourd'hui !!

Je voudrais avoir la liste des répertoires
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
	$chemin = opendir("/dossier");
	$listfichier = array();
 
	$m=0;
	while(($encours = readdir($chemin)) !== FALSE)
	{
		if(is_dir($encours))
		{$listfichier[$m++] = "$encours";}
	}
 
	foreach($listfichier as $temp)
	{echo $temp."<BR>";}
 
	?>
Le problème est que le chemin n'est pas le bon :
Si je mets $chemin = opendir("."); il me liste bien mes répertoires, mais des que je mets $chemin = opendir("/nomdudossier") ca ne marche plus.

Quel est le problème?
WagaSeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 17h54   #2
Membre régulier
 
Étudiant
Inscription : juin 2006
Messages : 83
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2006
Messages : 83
Points : 84
Points : 84
Il te met quoi comme erreur ?

Sinon tu as essayé avec opendir("nomdudossier/"); plutot ?
Wharenn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 18h40   #3
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Dans la variable $encours vous ne récupérez que le nom du fichier (ou répertoire) et non son chemin complet, ce qui fait que le test is_dir est toujours faux (le fichier n'existant pas dans le répertoire courant). Il faudrait écrire cela différemment, par exemple :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
define('BASE', '/dossier'); // Sans / ou \ final
 
$chemin = opendir(BASE . DIRECTORY_SEPARATOR);
$listfichier = array();
 
while (($encours = readdir($chemin)) !== FALSE)
{
    if(is_dir(BASE . DIRECTORY_SEPARATOR . $encours))
    {
        $listfichier[] = $encours;
    }
}
closedir($chemin);
 
# ...
?>
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2007, 09h51   #4
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Haute Savoie (Rhône Alpes)

Informations forums :
Inscription : septembre 2006
Messages : 128
Points : 36
Points : 36
Ok, je vois mon erreur...

Je vais réessayer avec ta solution !!

et... peut etre à dans 5mn
WagaSeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2007, 11h45   #5
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Haute Savoie (Rhône Alpes)

Informations forums :
Inscription : septembre 2006
Messages : 128
Points : 36
Points : 36
Bon, j'ai essayé pleins de trucs et rien n'y fait, je n'y arrive pas !!

Voici le message d'erreur que je recois :
Citation:
/mesphotos
Warning: opendir(/mesphotos) [function.opendir]: failed to open dir: No such file or directory in /home/domaine/public/comptes/SB/pages/listing.php on line 4
Et voici le code que j'ai tapé, suite aux conseils de Julp :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
	define('BASE', '/mesphotos');
	echo BASE;
	$chemin = opendir(BASE);
	$listfichier = array();
 
	while(($encours = readdir($chemin)) !== FALSE)
	{
		if(is_dir(BASE . DIRECTORY_SEPARATOR . $encours))
		{$listfichier[] = "$encours";}
	}
 
closedir($chemin);
echo $temp."<BR>";
 
	?>
Pour info, mon arborescence est la suivante :

public
|
|->index.php
|
|->Rep[mesphotos]
|
|->Rep[pages]->listing.php(le code ci-dessus)
|

et l'index.php me fait un tout bete include :
Code :
1
2
3
4
5
6
7
8
9
10
	if(isset($_GET['page']))
	{
	$nompage=htmlentities($_GET['page'],ENT_QUOTES);
		switch($nompage)
		{
		case "X":
		include("./pages/listing.php");
		break;
		}
	}
Pour etre franc, j'aimerais vraiment comprendre mes erreurs, car je traine betement !!
pour votre aide !!!
WagaSeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2007, 12h00   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Le chemin est absolu ici, c'est pour cela. Je pense que vous devez utiliser :
Code :
define('BASE', './mesphotos');
Si j'ai bien compris votre utilisation et votre arborescence.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2007, 12h12   #7
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Haute Savoie (Rhône Alpes)

Informations forums :
Inscription : septembre 2006
Messages : 128
Points : 36
Points : 36


Ca y est, ca marche !!
Deux erreurs :

1/ Le . devant /mesphotos;
Mais je comprend pas bien, je croyais que :
c'est du relatif: ./monrepertoire
l'absolu : http://www.mondomaine/repertoir1
(je met le tag resolu mais si vous m'expliquez la différence je regarderai

2/erreur : A force de bidouiller, j'ai tout melangé et mon echo n'affichait que le chemin et pas la liste. J'ai donc rajouté un print_r pour voir, ET CA MARCHE !!!

beaucoup !!!
WagaSeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2007, 13h41   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par WagaSeb
1/ Le . devant /mesphotos;
Mais je comprend pas bien, je croyais que :
c'est du relatif: ./monrepertoire
l'absolu : http://www.mondomaine/repertoir1
Relatif, c'est à partir du répertoire courant : ./mesphotos (ou mesphotos tout court), ../.. (on remonte de deux répertoire donc ça doit vous donner /home/domaine/public/comptes/), ...
Absolu, c'est le chemin complet à partir de la racine : /home/domaine/public/comptes/SB/mesphotos

On peut passer d'un chemin relatif à absolu via la fonction realpath() et on peut obtenir le chemin absolu du répertoire courant via getcwd().
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2007, 21h46   #9
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Haute Savoie (Rhône Alpes)

Informations forums :
Inscription : septembre 2006
Messages : 128
Points : 36
Points : 36
Bonjour,

J'ai un soucis avec la fonction define :

Suite aux posts précédents, j'ai retapé mon script et tout allait bien. J'ai donc rajouté des petites fioritures et j'ai rajouté une liste déroulante qui m'affiche les répertoires. Ca, ca marche !

Le problème c'est que :
Citation:
define('BASE', '/mesphotos/'. $repertoire);
ne fonctionne pas : $repertoire, qui n'est pourtant pas vide, n'est pas pris en compte.

Quelqun peut me l'expliquer ?

Le code complet :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<p>Veuillez sélectionner le répertoire de photos à visualiser :</p>
<form method="post" action="index.php?page=photos">
Répertoire : <SELECT name="repertoire">
<?php
listrep();
?>
<br />
<input type="submit" name="ok" value="Valider !"/><br />
</form>
 
<p>Page actuellement en cours de modification !</p>
 
<?php
echo "Le post vaut : ".$_POST['repertoire'] . "<BR>";
if(isset($_POST['repertoire']))
{
	$repchoisi = htmlentities($_POST['repertoire'], ENT_QUOTES);
	echo '<table><tr><td id="icone"></td><td>Fichier</td><td>Poids</td></tr>';
 
	define('BASE', '/mesphotos/'. $repertoire);
 
echo 'Le chemin vaut ' . BASE;
	$chemin = opendir(BASE);
	$listfichier = array();
 
	while(($encours = readdir($chemin)) !== FALSE)
	{
		if(is_file(BASE . DIRECTORY_SEPARATOR . $encours))
		{$listfichier[] = "<tr><td id=\"icon\"></td><td><a id=\"puce\" href=\"mesphotos/laurence/$encours\">$encours</a></td></tr>";}
	}
//****************************************************************************
//	$listfichier_minuscule = array_map('strtolower', $listfichier);
//	array_multisort($listfichier_minuscule, SORT_ASC, SORT_STRING, $listfichier);
//****************************************************************************	
	closedir($chemin);
 
	$temp_ranger = array_map('strtolower', $listfichier);
	array_multisort($temp_ranger, SORT_ASC, SORT_STRING, $listfichier);
 
	foreach($temp_ranger as $tempfinal)
	{
	echo $tempfinal;
	}
}
else
	{echo "Choisissez un repertoire";}
	?>
	</table>
WagaSeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 01h09   #10
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 31
Détails du profil
Informations personnelles :
Localisation : France, Haute Vienne (Limousin)

Informations forums :
Inscription : mars 2003
Messages : 31
Points : 26
Points : 26
Je crois qu'il faudrait que tu utilise plutôt que qui n'est pas défini avant ($_POST['repertoire'] ne donne pas $repertoire si la directive register_globals est activée).

Ou alors c'est la variable
ALkyD est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 08h56   #11
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Haute Savoie (Rhône Alpes)

Informations forums :
Inscription : septembre 2006
Messages : 128
Points : 36
Points : 36
Alors j'ai fais le test : j'ai remplacé $repertoire par $_POST['repertoire'] et na ne change rien ...
Par contre, oui j'ai bien REGISTER_GLOBALS sur ON

Et concernant $repchoisi, je il prend bien la bonne valeur ...

Donc je vois pas trop ...

Si quelqu'un voit ...
WagaSeb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h36.


 
 
 
 
Partenaires

Hébergement Web