Page 1 sur 1

[RESOLU]variable $j non reconnu à une seul place

Posté : 19 avr. 2014, 14:08
par olivier91
Bonjour,
je me remets au PHP après plusieurs années d'arrêt (en gros depuis 2006)
je m'inscris dans ce forum à titre débutant le temps de me remettre à niveau.
Et j'ai déjà besoin d'un petit coup de main.

Voici un morceau de code qui fonctionne à un détail près que je n'arrive pas à solutionner
	for ($j = 1; $j <= $nombredefichiers; $j++) { // 
	 
		$fichier = $dir.'\\'.$files[4];  // je souhaite remplacer le chiffre quatre par $j sans succès

		echo "AAAAAAA  $fichier et (( j = $j )) " ;
		$fp = fopen($fichier, "r");   // Ouverture du fichier source 
		if (!$fp) die("Impossible d'ouvrir le fichier XML source");
		else echo 'ok B  ';
		
		traitementdufichier($files[$j],$fichier_cible,$fp,$fichiercible);
		$nomdufichier = "$files[$j] \n";
		//echo "<br>for ==> $files[$j] --> $nomdufichier";
		
		fwrite($fichiercible,$nomdufichier); // insert le nom du fichier dans fichiercible
		$nomdufichier = "";
		
		fclose($fp); // Fichier source
	}    // fin du for
Problème : cette boucle fonctionne parfaitement; uniquement si je mets un chiffre (exemple ci-dessus 4) alors que je souhaite mettre $j qui fonctionne partout ailleurs.
Dès que je remplace le chiffre par $j alors je me retrouve avec une erreur suivante
AAAAAAA G:\BAS_PD1\1\data\bpmd\.. et (( j = 1 ))
Warning: fopen(G:\BAS_PD1\1\data\bpmd\..): failed to open stream: Permission denied in C:\xampp\htdocs\dicovoices\essai5a.php on line 74
Impossible d'ouvrir le fichier XML source
où ai-je fait mon erreur ?

Re: variable $j non reconnu à une seul place sans logique ?

Posté : 19 avr. 2014, 16:41
par Aureusms
Soyons fou, que donnerai :
$fichier = (string) $dir.'\\'.$files[$j]; 

Re: variable $j non reconnu à une seul place sans logique ?

Posté : 19 avr. 2014, 17:04
par olivier91
exactement la même erreur.

j'ai élagué mon code pour en déduire mon erreur sans succès :

function liredossier($dir){
    $dh  = opendir($dir);
	while (false !== ($filename = readdir($dh))) {
		$files[] = $filename;
	}					// Liste les noms des fichiers d'un dossier $dir
	sort($files);          	// et les mets dans un tableau $files
	//print_r($files);
	
	//echo "<br><br><br> $files[3] <br><br>";
	return $files;
}

$dir = "G:\\BAS_PD1\\1\\data\\bpmd"; 
$files=liredossier($dir); // $files est un tableau contenant les noms de fichiers dans $dir
$nombredefichiers = count($files) - 1 ; // compte le nombre de fichier
echo "<br><br>===> $files[3] sur $nombredefichiers <br><br>";

	
	for ($j = 1; $j <= $nombredefichiers; $j++) { // 
	    $fichier = (string) $dir.'\\'.$files[$j];                               // Problème ici $j
		//$fichier = $dir.'\\'.$files[$j];
		echo "AAAAAAA  $fichier et (( j = $j )) " ;

		$fp = fopen($fichier, "r");   // Ouverture du fichier source 
		if (!$fp) die("Impossible d'ouvrir le fichier $fichier");
		
		fclose($fp); // Fichier source
	}	// fin du for
	

Re: variable $j non reconnu à une seul place sans logique ?

Posté : 19 avr. 2014, 19:19
par olivier91
j'ai trouvé mon erreur :
		if($j<2){ $j = "2"; }  // les 2 premières éléments du tableau sont les 
					      // parents . et .. du dossier en cours

	    $fichier = (string) $dir.'\\'.$files[$j];

Juste pour information sur la situation du jour.

J'ai ajouté cette condition pour éviter les deux premiers éléments du tableau qui corresponde aux fichiers parents . et .. Que l'on trouve dans chaque dossier.
c'est visible sous Linux et sous ms--dos mais à force d'être sous un environnement graphique, on oublie ce type d'information.

Merci à ceux qui ont essayé de m'aider même en ayant lu mon post seulement

Re: [RESOLU]variable $j non reconnu à une seul place

Posté : 21 avr. 2014, 19:21
par Aureusms
oui bien joué.. Je ne l'avais pas vu celle là.
Quite à enlever . et .. fais plutôt un boucle à partir de 2 ou enlève . et .. de la liste.

Re: [RESOLU]variable $j non reconnu à une seul place

Posté : 23 avr. 2014, 10:28
par olivier91
bien vu
merci
à bientôt probablement toujours au rayon débutant pour moi :D

Re: [RESOLU]variable $j non reconnu à une seul place

Posté : 23 avr. 2014, 13:08
par Aureusms
On début puis après on conseille (c'est mon cas)