Pb chemin de longueur superieure à 255 caractères [Résolu]

kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 8 nov. 2005 à 21:38 - Dernière réponse : psychosic 46 Messages postés lundi 24 janvier 2005Date d'inscription 11 novembre 2005 Dernière intervention
- 12 nov. 2005 à 16:47
Salut,



Je souhaite lister un répertoire (ou une unité) afin d'appliquer un
traitement à certains types de fichiers. Le script s'execute en CLI
sous windows.



Voici la fonction :

(origine : [code.aspx?id= 31179 http://www.phpcs.com/code.aspx?id=31179] épurée)



<?php

function recursive_readdir ($dir) {

$dir = rtrim ($dir, '/');

if (is_dir ($dir)) {

$dh = opendir ($dir);

} else {

echo "\nRep invalide : ".$dir;

exit;

}

while (($file = readdir ($dh)) !== false ) { // parcours du rep

if ($file !== "." && $file !== '..') {

$path =$dir."/".$file;

echo
"rep en cours : \n".$path."\nlongueur = ".strlen($dir)." car\n";

echo $path;

if (is_dir ($path)) { // cas sous-rep

recursive_readdir ($path); // appel recursif

} else {


echo $file."\n";


}

}

}

closedir ($dh);

echo "\nTermine\n";

}

?>

Exemple : J'execute "recursive_readdir ('C:');" depuis l'unité D:

C:\ contient des chemins du type C:\[chemin + nom de fichier + ext = 256 caracteres]



Dans ces conditions le script plante puisque la fonction prends le
chemin absolu, ce qui fait plus de 256 caractères (259 en l'occurence)



Comment puis je faire pour lister sans bug l'intégralité du chemin passé en paramètre ?

J'ai bien tenté des trucs avec chdir mais ca devient vite une usine à gaz.

Les fonctions récursives de PHPCS donnent le même résultat et je n'ai rien trouvé sur le web.



Merci d'avance,



Kohntark-



=31179
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 11 nov. 2005 à 11:38
3
Merci
Salut psychosic,



J'ai fait quelques tests et je ne vois pas bien où tu veux en venir.

Un moment je suis bien obligé de faire un "opendir([chemin complet non encodé])"

(opendir(base64_decode($path_enc); ??) et cela ne changera donc rien.

Peux tu préciser stp, peut être t'ai je mal compris ?



Sinon j'ai "pondu" un truc qui nécessite quelques retouches et tests supplémentaires mais qui fonctionne correctement.

Faute de temps je poste la source complète et non le simple listage de fichiers.



Il s'agit en fait de corriger en masse un "bug" excel :

Lors de l'ouverture d'un fichier .csv dont les premiers caractères
commencent par "ID", excel affiche le message "Format de fichier SYLK:
non valide" et n'ouvre pas le fichier (http://support.microsoft.com/kb/q215591/)

La solution, toute simple, consiste a ajouter un apostrophe au début du fichier.



En résumé j'utilise la fonction recursive_readdir
() normalement et effectue les corrections avec correction(). Par
contre, dès que le chemin atteind 255 caractères (avec la lettre
d'unité), je bascule en chemin relatif grâce à sup_max().



Merci kohntark 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de kohntark
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 8 nov. 2005 à 22:57
1
Merci
seriez vous en train de suggérer que
windows c'est de la m.... ? Je suis justement en train de découvrir
Mandrake ... mais pour le présent pb je n'ai pas le choix, c'est
windows.



Kohntark-
Commenter la réponse de kohntark
cs_Anthomicro 9440 Messages postés mardi 9 octobre 2001Date d'inscription 13 avril 2007 Dernière intervention - 8 nov. 2005 à 22:37
0
Merci
Salut,



à part utiliser un chemin relatif, je ne vois pas :-(

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Commenter la réponse de cs_Anthomicro
FhX 2368 Messages postés mercredi 13 octobre 2004Date d'inscription 18 avril 2015 Dernière intervention - 8 nov. 2005 à 22:51
0
Merci
Tu peux changer d'OS quoi :/
Commenter la réponse de FhX
cs_Anthomicro 9440 Messages postés mardi 9 octobre 2001Date d'inscription 13 avril 2007 Dernière intervention - 8 nov. 2005 à 23:00
0
Merci
FhX > MDR

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Commenter la réponse de cs_Anthomicro
FhX 2368 Messages postés mercredi 13 octobre 2004Date d'inscription 18 avril 2015 Dernière intervention - 8 nov. 2005 à 23:51
0
Merci
Non mais je rigole ! Meme sous Linux y'a la barrières de 255 caractères :)
Non si plus serieusement, tu peux passer sous 1012 caractères avec EXT2fs (qui n'est supporté que par Nux :) )

Mais alors comment, ca je sais plus :o
Commenter la réponse de FhX
psychosic 46 Messages postés lundi 24 janvier 2005Date d'inscription 11 novembre 2005 Dernière intervention - 9 nov. 2005 à 10:35
0
Merci
essaye de mettre ton fichier de listage de rep au plus profond de tes rep.



Comme ca tu prend déja le pb a l'inverse et peut etre que ca va tourner.
Commenter la réponse de psychosic
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 9 nov. 2005 à 17:32
0
Merci
Impossible, il faut que je puisse exécuter le script à partir d'une clé USB et analyser un autre volume du disque.

Je suis en train de bricoler un truc qui passe en chemin relatif dès
que nécessaire. Ce n'est pas très beau mais pour le moment ça
fonctionne.

... tout de même étrange cette limitation :-\
Commenter la réponse de kohntark
FhX 2368 Messages postés mercredi 13 octobre 2004Date d'inscription 18 avril 2015 Dernière intervention - 9 nov. 2005 à 20:45
0
Merci
Bah... un caractère = 1 octet.
255 caractères = 255 octets.

Jcrois que c'est dû à la taille du bus (256 bits), mais alors j'en suis pas du tout sur (et pourtant, j'ai fais ca en électronique...)

Ah voila, j'ai trouvé !

"nommage UTFx ou x est le nombre de bits
UTF8 -> 255 caractères -> compatible avec la plupart
des programmes utilisant l'ASCII.
futur: UTF16 ou UTF24-> 2^16 et 2^24 caractères ->
tous les alphabets du monde sont supportés
défaut: UTF16 double la taille des fichiers,
UTF24 la double !"

C'est le système Unicode qui veut ca :)
Commenter la réponse de FhX
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 10 nov. 2005 à 06:45
0
Merci
Salut FhX,



Unicode, Ascii etc .. détermine l'encodage des caractères me semble t
il ? A savoir le nombre de "symboles" pouvant être représentés
(a,b,c,...1, 2,?/§ ...)

Par exemple la lettre "é" ne peut pas être représentée en Ascii
pur (128 caractères : A-Z, a-z,1-9, caractères de contrôles, de
ponctuation et de calcul) mais cela ne définie pas la limite du nombre
de caractères pour un nom de fichier.

Cette limitation est liée, amha, au système de fichier des machines 32 bits.



Kohntark-
Commenter la réponse de kohntark
FhX 2368 Messages postés mercredi 13 octobre 2004Date d'inscription 18 avril 2015 Dernière intervention - 10 nov. 2005 à 14:00
0
Merci
" Cette limitation est liée, amha, au système de fichier des machines 32 bits."
Exact, jme suis mélangé quelque part.
Commenter la réponse de FhX
psychosic 46 Messages postés lundi 24 janvier 2005Date d'inscription 11 novembre 2005 Dernière intervention - 11 nov. 2005 à 00:37
0
Merci
essaye de mettre tout ton paramètres chemin de base 64 avec les
fonctions base64_encode comme ca ton chemin fera toujours 64 caractères.
Commenter la réponse de psychosic
psychosic 46 Messages postés lundi 24 janvier 2005Date d'inscription 11 novembre 2005 Dernière intervention - 12 nov. 2005 à 16:47
0
Merci
pas mal ton truc, je croyais que tu était limité dans ton paramètre d'url désolé.



Sinon ta source a l'air bien. Mets la en ligne comme ca on la garde bien au chaud ;)
Commenter la réponse de psychosic

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.