Форум Академгородка, Новосибирск > Проблема с русскими имена файлов на unix-хостинге
Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с русскими имена файлов на unix-хостинге
Форум Академгородка, Новосибирск > Компьютеры и сети > Программирование > WEB-программирование
Konev
Такая проблемка, наверное известная, но в инете не нашел почему-то.

Заливаем на сайт через форму файл с русским именем, например, "Файл новый.doc". Кладем его в нужное место с тем же именем стандартной командой (PHP):
Код
copy($_FILES['file']['tmp_name'], 'dir/'.$_FILES['file']['name']);


Далее пытаемся обратиться к этому файлу по ссылке:
"http://host/dir/Файл новый.doc" - ничего не выходит, файл не находится.

В Винде (у меня на локале, во всяком случае) все работает.

При этом, что интересно, если на хостинге вызвать скрипт с таким вот содержанием, то в итоге удается получить нужный файл:
Код
<?php
header('Location: http://host/dir/Файл новый.doc');
?>


Видимо, проблема с кодировками, но где именно, представляю слабо.

В итоге вопрос - как сформировать прямой ерл на файл? (Или может при копировании исходно надо какое-то преобразование имени провести?)

P.S. Наличие/остутствие url-кодирования ни на что не влияет.
milfoil
Имя файла из адресной строки приходит на сервер в той же кодировке что и кодировка файла лежащего на сервере?
Konev
> Имя файла из адресной строки приходит на сервер в той же кодировке что и кодировка файла лежащего на сервере?

Не знаю, честно говоря. Я описал все, что делаю - как таковых кодировок не касаюсь ни в одном месте, в этом и вопрос, где их надо "коснуться".
milfoil
Если вы переходите по ссылке расположенной на некой html странице, то на сервер имя файла поступит в кодировке текущей страницы.
Если вы собственноручно вбиваете ссылку на файл в адресную строку, то на сервер она поступит в кодировке текущей системной локали.
Konev
А как мне узнать, в какой кодировке имя файла на сервере?
milfoil
В той которая указана на странице с формой загрузки файла на сервер.
Кстати, лучше не copy() делать, а move_uploaded_file()
Konev
Насколько я понял Вашу схему, если файл заливается с некоторой страницы, для которой явно указана кодировка,
а потом на этой же странице ставится ссылка на этот файл, то все должно работать (т.к. кодировки совпадают).

Это не так, не работает.

Вот код страницы, код скрипта обработки "upload.php" приводил выше:
Код
<html>
  <head>
     <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  </head>
  <body>
    <form action="upload.php" method="post" enctype="multipart/form-data">
       <input type="file" name="file">
       <br />
       <input type="submit" name="submit">
    </form>
    <br />
    <a href="http://host/dir/Файл новый.doc">Скачать</a>
   </body>
</html>
milfoil
Попробуйте с кодировкой utf-8, работает:
Код
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="field1"><input type="submit">
</form>
<?php
    if(isset($_FILES["field1"]["name"]))
    {
        move_uploaded_file($_FILES['field1']['tmp_name'], getcwd()."/".$_FILES["field1"]["name"]);
        echo "<a href=\"./".$_FILES["field1"]["name"]."\">качать</a>";
    }
?>
</body>
</html>

pechenushka
я переписал файлменеджер у FCK едитора
сейчас вся структура файлов ( т.е. папки и имена файлов ) хранятся в базе данных, а сами файлы лежат в одной папке. Имена у файлов совпадают с их идентификаторами в базе
и есть ещё один скрипт выдачи файла по идентификатору

в этом случае решаются все проблемы с кодировкой
atonator
Konev,
1) посмотрите, как выглядит имя файла в файловой системе.
2) создайте папку, разрешенную к просмотру в браузере, создайте в ней файлы с именами в кириллице и сравните ссылки на них с Вашей ссылкой.
Zebooka
1) не используйте русские имена файлов.
2) Кодировка на unix сервере скорее всего koi8-r. Запросы летят 99% в utf8.
mbstring / iconv в помощь.
vasya888
лучше при заливке на сервер автоматически менять русское название, например, на транслит и заменять пробелы на подчеркивание, будет что-то типа noviy_fayl.doc.




--------------------------------------------
создание веб-сайтов и дизайн тут
i_Homyak
Данные посылаемые формой по умолчанию в utf-8 кодировке, поэтому лучшее решение - использовать латинские буквы и символы.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2024 IPS, Inc.