[RESOLU] encodage et parcours de dossier

Eléphant du PHP | 229 Messages

05 janv. 2013, 19:15

Bonjour,

le code :
	scandir($dir);
Me renvoi des noms de fichier avec un encodage qui ne me convient pas quelle fonction puis je utiliser ?
L'encodage est il différent selon les OS ?

D'avance merci.

Et bonne année :)

Eléphant du PHP | 229 Messages

05 janv. 2013, 19:17

echo utf8_encode($var['8']);
m'a sauvé.

Bon week end.

Eléphant du PHP | 229 Messages

06 janv. 2013, 02:24

Bonjour,

Tout fonctionne pour le mieux, le script PHP (code ici) liste et ouvre les dossiers.
Tout ? non !

Une poignée d"irréductibles dossiers contenant des accents refuse de s'ouvrir sous le prétexte suivant:

Warning: scandir(courscnam/NFA007-Méthodes/) [function.scandir]: failed to open dir: No such file or directory in D:\wamp\www\predev\bao\listingcours_ssdossier.php on line 7

D'avance merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 janv. 2013, 15:12

salut,


php n’est pas trop prévu pour l'utf-8 à la base, donc si ton système de fichiers contient des caractères "spéciaux" tu risque d'être emmerdé (qui l'OS soit en ISO ou en utf-8).

as tu essayé d'autre solution, comme la classe directoryIterator ?

ou le opendir + while (enfin équivalent scandir indiqué dans la doc) ?

si tu as la main sur l'arborescence système fait en sorte que cela ne puisse pas arriver ;) (suppression des caractères spéciaux à la création des répertoires, script de normalisation etc ;) ).


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 229 Messages

06 janv. 2013, 18:14

la classe directoryIterator n'a pas encore était envisagé mais figure dans mon cours. Je vais m'y coller.

Merci pour le conseil de normalisation des noms de dossier. Mais j'aime pas devoir faire ça sur 20 dossiers :) Ou alors avec un script, faudra tester.

Encore merci. Je teste ca apres.

Eléphant du PHP | 229 Messages

06 janv. 2013, 19:21

Quelque soit la méthode le problème c'est que les dossier ne sont pas recoonnu comme des dossier et retourne FALSE quand je les teste avec is_dir().

Mon code :
$dir='bao/';

function parcour($dir){
$var=scandir($dir);
echo $dir,"<br>";

$j=count($var);

echo $j,"<BR>";
$i=0;


	for($i=2;$i<$j;$i++){

		$new_dir=$dir.$var[$i];
			if(is_dir($new_dir)){
				echo "-D-<br>";
				parcour($new_dir);
			}
			if(is_file($new_dir)){
				echo "-F-<br>";
				parcour($new_dir);
			}
			else{echo "$new_dir n'est pas 1 dossier<br>"; }
	}

}

parcour($dir);
?>
Et il me retourne que certain dossier n'en sont pas :)

il m'affiche ça :

http://www.pm3.fr/page.php

bao/
7
-D-
bao/courscnam
17
bao/courscnamMVA003-Outils mathematiques (combinatoire, probabilites) n'est pas 1 dossier
bao/courscnamMVA004-Mathematiques (automates, codes ...) n'est pas 1 dossier
bao/courscnamNFA001-Algorithmique et programmation avec Java (notions de base) n'est pas 1 dossier
bao/courscnamNFA002-Algorithmique programmation avec Java (concepts objet) n'est pas 1 dossier
bao/courscnamNFA003-Principes et fonctionnement des systemes d'exploitation n'est pas 1 dossier
bao/courscnamNFA005-Algorithmique et programmation avec Java (travaux pratiques) n'est pas 1 dossier
bao/courscnamNFA006-Structures de données n'est pas 1 dossier
bao/courscnamNFA007-Méthodes pour l'informatisation n'est pas 1 dossier
bao/courscnamNFA008-Bases de données n'est pas 1 dossier
bao/courscnamNFA009-Principes des réseaux informatiques n'est pas 1 dossier
bao/courscnamNFA010-Graphes et optimisation n'est pas 1 dossier
bao/courscnamNFA016-Architecture web et developpement cote client n'est pas 1 dossier
bao/courscnamNFA017- Dev sites dynamiques et developpement cote serveur n'est pas 1 dossier
bao/courscnamNFA018-Gestion de projet informatique n'est pas 1 dossier
bao/courscnamNFA021-Projet WEB n'est pas 1 dossier
bao/courscnam n'est pas 1 dossier
-F-
bao/courscnam.php
1
-F-
bao/listingcours.php
1
-F-
bao/listingcours_ssdossier.php
1
-F-
bao/traitement_list.php
1

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 janv. 2013, 20:43

les "c'est pas un dossier" c'est des fichiers ?


tu as oublié un else dans ton affaire :)
<?php
 for($i=2;$i<$j;$i++){
                $new_dir=$dir.$var[$i];
                        if(is_dir($new_dir)){
                                echo "-D-<br>";
                                parcour($new_dir);
                        }
                        elseif(is_file($new_dir)){
                                echo "-F-<br>";
                                parcour($new_dir);
                        }
                        else{
                              echo "$new_dir n'est pas 1 dossier<br>"; 
                       }
        }
car ton entrée est un dossier ou un fichier ou autre chose ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 229 Messages

06 janv. 2013, 21:25

De plus les dossiers répondent false quand je les teste avec is_dir().

Autre exmple ce code :
<?php
$dir='bao/';
 
$var=scandir($dir);
 
foreach($var as $elem)
{
echo "->",$elem,"<br>";
if(is_dir($elem)==true){
	$var2=scandir($elem);
	var_dump($var2);
}
	
}
?>
https://gist.github.com/4469138

donne çà :
http://www.pm3.fr/page.php*

Alors que qu'ils devrait tous etre developper comme le ->.

Je ne comprend pas.
Ceux sont tous des dossiers les NFA et MVA, pour info