file_exists sur fichier avec espaces

Eléphant du PHP | 60 Messages

23 déc. 2011, 19:13

Bonjour,

je me retrouve avec des fichiers qui contiennent des espaces sur un serveur Linux ... bon je sais que ce n'est pas bien mais malheureusement, et bien il va falloir que je fasse avec ...
il faudrait que je fasse un test >> si "fichier existe".
Mais file_exists () déconne à cause des espaces et @fopen () aussi
Puisque Linux semble gérer les espaces par des "\ " alors, pour mettre le nom du fichier au format attendu, j'ai tenté un str_replace(" ","\ ",$nom_fichier) mais curieusement ça ne fonctionne qu'à moitié ...
sur le 1er espace, impeccable et le " " est remplacé par "\ " mais sur l'espace suivant le "\ " espéré se retrouve doublé et ca donne "\ \ " et puis à nouveau sur le 3ème, ça fonctionne bien.

ABE CX-243 (KIT U9618)
devient >> ABE\ CX-243\ \ (KIT\ U9618)

Une petite idée plz ?
par avance merci.

Eléphant du PHP | 267 Messages

23 déc. 2011, 20:08

salut,

tout d'abord, dans ton str_replace, mets plutôt des simples quotes que des doubles c'est-à-dire :
écris str_replace(' ','\ ',$nom_fichier) au lieu de str_replace(" ","\ ",$nom_fichier)
car les doubles quotes sont utilisées quand il y a des caractères spéciaux échappés par le symbole \
exemple : "\t" est interprété par PHP comme une chaîne d'un seul caractère : le caractère tabulation
alors que '\t' est interprété par PHP comme une chaîne de 2 caractères : \ suivi de la lettre t
ceci dit, dans str_replace(" ","\ ",$nom_fichier), l'espace après le \ n'est pas un caractère spécial donc PHP interprète bien "\ " comme une chaîne de 2 caractères

Ensuite, en ce qui concerne la fonction str_replace($search, $replace, $subject), elle peut parfois avoir un comportement bizarre si $search est une sous-chaîne de $replace, ce qui est le cas ici
Par conséquent, remplace str_replace(" ","\ ",$nom_fichier) par :
implode('\ ', explode(' ', $nom_fichier))

@+
dix2

Eléphant du PHP | 60 Messages

23 déc. 2011, 21:35

tout d'abord, merci pour ta réponse.
Alors j'avais déjà essayé quotes et guillemets mais ça ne changeait rien.
Là j'ai testé ta soluce avec implode et incroyable, ça me donne exactement la même chose avec 2x "\ " sur le 2ème espace.
Ensuite j'ai voulu vérifier si après être arrivé à régler ce problème de 2 x "\ " ça allait au moins fonctionner, alors j'ai testé le file_exists en écrivant en dur le nom du fichier "façon linux" avec ces "\ " et là, grosse déception, ça ne donne rien non plus donc finalement je suppose que ce n'est pas comme ça que le serveur gère les espaces. J'essaye de voir comment faire un dir pour voir exactement ce que ces fichiers avec espaces sont gérés mais ça n'a pas l'air simple ça non plus :(

Eléphant du PHP | 60 Messages

23 déc. 2011, 21:59

Bon la misère ...
J'ai trop honte ... en fait il y avait vraiment 2 espaces et effectivement si les espaces s’enchaînent, file_exists délire mais si il n'y a qu'une seul espace à la fois il fonctionne très bien ... j'ai pas eu de bol faut dire, je suis tombé sur le seul fichier à la C.. comme ça.
Merci encore pour ton aide en tout cas et désolé pour le dérangement ...

Eléphant du PHP | 267 Messages

23 déc. 2011, 22:05

J't'en prie
Bonnes fêtes de fin d'année
@+
dix2

Eléphant du PHP | 60 Messages

23 déc. 2011, 22:17

idem joyeux noël :)