Рассмотрим следующий код:
print cwd . "\n";
$str= "../source"; # note the lower case 's'
chdir($str);
print cwd . "\n";
Если мой текущий каталог - c:\parentdir\Source
(обратите внимание на заглавную 'S'), результат будет:
c:/parentdir/Source
c:/parentdir/source
Это вызывает проблемы в моей подпрограмме, которая заботится о правильном регистре имен папок.$ str передается в мою подпрограмму, поэтому я не могу заранее знать, имеет ли она правильный регистр.Как определить правильное для регистра имя пути, соответствующего $str
?
Более подробно здесь:
- Я понимаю, что
../source
является патологическим примером, но этослужит для иллюстрации проблемы.Это происходит, даже если $str
запрашивает папку, отличную от текущей. - Я перепробовал множество вариантов, включая
rel2abs
, глобальный поиск по $str
и другие, но все они, похоже,вернуть "source
" вместо "Source
". - Я мог бы найти
$str/..
для всех каталогов, преобразовать их все в абсолютные пути и сравнить их с версией абсолютного пути $str
, ноэто похоже на взлом.Я надеялся на что-то более элегантное.