2017-10-14 14 views
0

Je dois travailler avec des fichiers ayant des caractères accentués dans leur nom. Malheureusement, il semble que GLOB ignore ces fichiers. J'ai créé ce code court pour la démonstration:PHP 7 glob ignore les fichiers avec des caractères accentués dans le nom

$files = glob(dirname(__FILE__) . "/data/tracks/167/*.*"); 

foreach($files as $file) { 
    var_dump($file); 
    var_dump(file_exists($file)); 
} 

sortie est:

D:\data\zdroje\Kombinovane\MotoQuest\Web\admin\pokus.php:13:string 'D:\data\zdroje\Kombinovane\MotoQuest\Web\admin/data/tracks/167/162_P1030721 (kopie).jpg' (length=87) 
D:\data\zdroje\Kombinovane\MotoQuest\Web\admin\pokus.php:14:boolean true 
D:\data\zdroje\Kombinovane\MotoQuest\Web\admin\pokus.php:13:string 'D:\data\zdroje\Kombinovane\MotoQuest\Web\admin/data/tracks/167/162_tn_P1030721 (kopie).jpg' (length=90) 
D:\data\zdroje\Kombinovane\MotoQuest\Web\admin\pokus.php:14:boolean true 
D:\data\zdroje\Kombinovane\MotoQuest\Web\admin\pokus.php:13:string 'D:\data\zdroje\Kombinovane\MotoQuest\Web\admin/data/tracks/167/1_1493222210_P1030721.jpg' (length=88) 
D:\data\zdroje\Kombinovane\MotoQuest\Web\admin\pokus.php:14:boolean true 
D:\data\zdroje\Kombinovane\MotoQuest\Web\admin\pokus.php:13:string 'D:\data\zdroje\Kombinovane\MotoQuest\Web\admin/data/tracks/167/1_1493222210_tn_P1030721.jpg' (length=91) 
D:\data\zdroje\Kombinovane\MotoQuest\Web\admin\pokus.php:14:boolean true 

Mon répertoire contient 6 fichiers - 2 avec les caractères accentués sont ignorés .:

enter image description here

La même chose est avec file_exists, même, quand j'utilise des conseils énumérés ici - PHP file_exists with accent returns false.

L'un des noms de fichiers est:

1_1493385948_tn_22-Ještěd21.jpeg

Toute idée, ce qui ne va pas?

+0

pouvez-vous copier ce nom de fichier dans la description, ma première tentative d'obtenir le même comportement a échoué (j'ai utilisé le str twô et cela a fonctionné) – sics

+0

Nom de fichier ajouté. Merci. – user3523426

Répondre

0

Excuses, pas assez rep pour commenter. Pouvez-vous me dire ce que vous obtenez de:

var_dump(iconv_get_encoding()); 

Et que diriez-vous:

$files = scandir(dirname(__FILE__) . "/data/tracks/167/"); 
var_dump($files); 

Peut-on utiliser:

<?php 
$files = array_filter( 
    scandir(dirname(__FILE__)), function($file_or_folder) { 
     return !is_dir(dirname(__FILE__) . $file_or_folder); 
    } 
); 
var_dump($files); 
?> 

Au lieu de glob?

+0

Je reçois: array (size = 3) 'input_encoding' => chaîne 'UTF-8' (longueur = 5) 'output_encoding' => chaîne 'UTF-8' (longueur = 5) 'internal_encoding' => string 'UTF-8' (length = 5) – user3523426

+0

C'est ce que je reçois aussi, donc pas un problème d'encodage ... Veuillez noter que l'extension JPEG par opposition à JPG est également différente pour les noms de fichiers accentués ... BTW votre code fonctionne sur mon système. – Erik

+0

Comme j'utilise *. * Pour la commande GLOB, il ne devrait pas y avoir de différence. Je viens de renommer JPEG en JPG et le résultat est le même ... Probablement que ça a quelque chose à voir avec la page de code OS - J'utilise Windows 10 64bit code page 1250. D'autre part, ça ne devrait pas avoir d'importance pour PHP. – user3523426