Стоит такая вот задача: скачать файл с сайта через wget (потому что он позволяет узнать настоящее имя файла)
Что может быть проще, но, первая сложность, это адрес до файла
site.ru/export.html?hash=q1w2e3 (к сожалению не могу раскрывать настоящую ссылку, если только в личку)
Если открыть ссылку в браузере то сразу скачивается xls файл с русскими буквами в имени, допустим: "свободные_остатки.xls"
Натравливаем wget на ссылку, в ответ получаем в логе (откуда и можно узнать точное имя файла) = export.html?hash=q1w2e3
Ага понятно, нужен какой-то ключ, оказывается есть такой ключ --content-disposition и имя передается в этом теге в заголовках ответа, ура файл стал скачиваться и имя вроде верное НО, собственно пошел вопрос
Вот что в логах: \361\342\356\341\356\344\355\373\345_\356\361\362\340\362\352\350.xls
А вот что в папке: ëèãà_øèíû_ëåòî_ñâîáîäíûå_îñòàòêè.xls
PHP скрипт узнает что wget все скачал и выдирает из лога имя скачанного файла \361\342\356\341\356\344\355\373\345_\356\361\362\340\362\352\350.xls но при обращении по такому имени получаем бритву
Собственно задача, как же получить доступ к файлу по циферному имени, а еще лучше если получится сделать имя в utf-8 (хотя не принципиально, все равно потом имя файла будет изменено)
UPDATE
Нашел что строка, которая попадает в лог это windows-1251 в восьмеричном формате
$string = "\361\342\356\341\356\344\355\373\345_\356\361\362\340\362\352\350.xls";
function convertOctalToCharacter($octal) {
return chr(octdec($octal[1]));
}
echo iconv('windows-1251', 'utf-8', preg_replace_callback('/\\\\([0-7]{1,3})/', 'convertOctalToCharacter', $string));
Ура, имя у меня теперь в кодировке utf-8, ну теперь конечно можно просто скачать этот файл снова но уже через курл со своим именем, но это же костыль.
Сейчас попробую после конвертации в windows-1251 обратиться к файлу, в теории должно прокатить да...