Это код, который я использую, чтобы получить правильный регистр для заданного имени файла:
function get_cased_filename($filename)
{
$globbable = addcslashes($filename, '?*[]\\');
$globbable = preg_replace_callback('/[a-zA-Z]/', 'get_bracket_upper_lower', $globbable);
$files = glob($globbable);
if (count($files)==1)
{
return $files[0];
}
return false;
}
function get_bracket_upper_lower($m)
{
return '['.strtolower($m[0]).strtoupper($m[0]).']';
}
Глобус должен соответствовать только одному файлу, но если он используется в файловой системе с учетом регистра, он может соответствовать большему числу- требуемое поведение зависит от вас - например, вернуть [0]
в любом случае или бросить E_NOTICE
или что-то еще.
Возможно, вы найдете это полезным: $mydir = get_cased_filename(dirname(__FILE__));
Работает для моего CLI PHP 5.3.6 на Mac 10.6.8.
Я использую его для работы с коллегами, которые не замечают, что «Имя файла» и «Имя файла» различаются.(Этим людям также интересно, почему имена файлов, которые содержат «>» или «?», Не работают при копировании с Mac на сервер Windows, но я отвлекся ...)