Создание файла с именем, содержащим символы национальных алфавитов (utf-8)

Онегин

Новичок
Создание файла с именем, содержащем символы национальных алфавитов (utf-8)

Здравствуйте. Прошу теоретической помощи, как более разумно создавать файлы на сервере через скрипт?

Цель: если админ сайта создает через web-интерфейс файл с именем содержащим символы национального алфавита, чтобы потом он и пользователи сайта, имели возможность работать с файлом, с оригинальным именем.

Делаю следующим образом. Создаю файл в кодировке utf-8 с содержимым:

PHP:
setlocale(LC_ALL, 'ru_RU.utf8'); // На всякий случай. Хотя по мануалу на ф-цию fopen() вроде влияния не оказывает.
$file_name = 'проверка';
if(!file_exists($file_name))
{     
  $fp=fopen($file_name,"w");     
  fclose($fp); 
}
При создании файла, его имя бьется, я так понимаю имя файла сохраняется в кодировке cp1251.
Но, операционная система поддерживает ведь utf-8, я же могу создать файл вручную, имя которого будет содержать хоть китайские иероглифы. Почему я не могу сделать тоже самое через скрипт ?!

Если оригинальное имя хранить в базе данных, то очень смущает отдавать файл через скрипт. Нагрузка на сервер?
Задача ведь довольно простая и наверняка популярная, интересует как бы правильный подход :)

P.S. Юзаю поиск, тем много, ответа пока не нашёл.
 

mity

Новичок
Как вариант написать внешнею программу которую будет запускать ваш скрипт, а она уже будет создавать правильные имена файлов.

Если Вы хотите чтобы ваш сайт не был привязан к определённому хостингу и операционной системе, то лучше всего конвертировать имена в base64 и отдавать файлы скриптом. Проблемы возникают только на больших файлах, размером больше чем выделяется памяти на php. В этом случае при скачке файла его размер будет неизвестен до окончания скачки.

Может быть с появлением в php 6 боле менее полноценной поддержки unicode создавать файлы с национальными символами будет можно непосредственно из php.
 

dimagolov

Новичок
Проблемы возникают только на больших файлах, размером больше чем выделяется памяти на php. В этом случае при скачке файла его размер будет неизвестен до окончания скачки.
Зачем писать бред? Кто тебе запрещает узнавать размер файла из ФС и отдавать его блоками? Но лучше отдавать не скриптом, а каким-то xsendfile, там должна быть возможность отдавать имя файла вне зависимости от того, что отдается реально.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
mity
проблема с файлами больших размеров называется "утечки памяти"
пиши аккуратно, считывай файл частями, и никаких проблем
я обрабатываю скриптами файлы на сотни мегабайт
 
Сверху