Nano Hash - криптовалюты, майнинг, программирование

PHP 7 glob игнорирует файлы с диакритическими знаками в имени

Мне нужно работать с файлами, в имени которых есть символы с диакритическими знаками. К сожалению, похоже, что GLOB игнорирует эти файлы. Я создал этот короткий код для демонстрации:

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

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

Выход:

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

Мой каталог содержит 6 файлов - 2 с диакритическими знаками игнорируются.:

введите здесь описание изображения

То же самое и с file_exists, даже когда я использую перечисленные здесь подсказки - PHP file_exists с акцент возвращает false.

Одно из имен файлов:

1_1493385948_tn_22-Ještěd21.jpeg

Есть идеи, что не так?


  • не могли бы вы скопировать это имя файла в описание, моя первая попытка добиться такого же поведения не удалась (я использовал строку twô, и это сработало) 14.10.2017

Ответы:


1

Извините, недостаточно представителей, чтобы прокомментировать. Можете ли вы сказать мне, что вы получаете от:

var_dump( iconv_get_encoding() );

А как насчет:

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

Вы можете использовать:

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

Вместо глоба?

14.10.2017
  • Я получаю: массив (размер = 3) 'input_encoding' => строка 'UTF-8' (длина = 5) 'output_encoding' => строка 'UTF-8' (длина = 5) 'internal_encoding' => строка 'UTF- 8' (длина=5) 14.10.2017
  • Это то, что я получаю, а не проблема с кодировкой ... Обратите внимание, что расширение JPEG, в отличие от JPG, также отличается для имен файлов с акцентом ... Кстати, ваш код работает в моей системе. 14.10.2017
  • Поскольку я использую . для команды GLOB, разницы быть не должно. Я просто переименовал JPEG в JPG, и результат тот же... Вероятно, это как-то связано с кодовой страницей ОС - я использую 64-битную кодовую страницу Windows 10 1250. С другой стороны, для PHP это не имеет значения. 14.10.2017
  • Похоже, что имена файлов точно CP1250. С другой стороны, это не объясняет, почему glob их не находит. Результатом является массив (размер = 8) 0 => строка '.' (длина=1) 1 => строка '..' (длина=2) 2 => строка '162_P1030721 (копия).jpg' (длина=24) 3 => строка '162_tn_P1030721 (копия).jpg' (длина= 27) 4 =› строка '1_1493222210_P1030721.jpg' (длина=25) 5 =› строка '1_1493222210_tn_P1030721.jpg' (длина=28) 6 =› строка '1_1493385948_22-Jes�te�d21.jpg' (длина=30) 7 => строка '1_1493385948_tn_22-Jes�te�d21.jpg' (длина=33) 15.10.2017
  • И вот файлы, вам нужна функциональность glob regex? 15.10.2017
  • Можете ли вы использовать мое последнее дополнение к моему ответу? 15.10.2017
  • ЭРИК - извините, я не могу - мне нужно работать с файлами, например копировать, удалять ссылки. Поэтому мне нужен PHP для распознавания файлов. 16.10.2017
  • Для меня это не имеет особого смысла, ни для копирования, ни для удаления ссылки не требуется glob, чтобы найти ваш файл, особенно если scandir может найти ваш файл. 16.10.2017
  • Единственное, что я могу придумать, это проблема операционной системы, хотя она работает с моей локальной установкой win10 xampp и моей строкой сервера Ubuntu (36) 1_1493385948_tn_22-Ještěd21.jpeg 16.10.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..