Перейти к содержанию
Посмотреть в приложении

A better way to browse. Learn more.

Форум Академгородка, Новосибирск

A full-screen app on your home screen with push notifications, badges and more.

Чтобы установить это приложение на iOS и iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
Чтобы установить это приложение на Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Проблема с русскими имена файлов на unix-хостинге

Опубликовано

Такая проблемка, наверное известная, но в инете не нашел почему-то.

 

Заливаем на сайт через форму файл с русским именем, например, "Файл новый.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-кодирования ни на что не влияет.

Рекомендуемые сообщения

Опубликовано

Имя файла из адресной строки приходит на сервер в той же кодировке что и кодировка файла лежащего на сервере?

 

Опубликовано
  • Автор

> Имя файла из адресной строки приходит на сервер в той же кодировке что и кодировка файла лежащего на сервере?

 

Не знаю, честно говоря. Я описал все, что делаю - как таковых кодировок не касаюсь ни в одном месте, в этом и вопрос, где их надо "коснуться".

Опубликовано

Если вы переходите по ссылке расположенной на некой html странице, то на сервер имя файла поступит в кодировке текущей страницы.

Если вы собственноручно вбиваете ссылку на файл в адресную строку, то на сервер она поступит в кодировке текущей системной локали.

 

Опубликовано

В той которая указана на странице с формой загрузки файла на сервер.

Кстати, лучше не copy() делать, а move_uploaded_file()

Опубликовано
  • Автор

Насколько я понял Вашу схему, если файл заливается с некоторой страницы, для которой явно указана кодировка,

а потом на этой же странице ставится ссылка на этот файл, то все должно работать (т.к. кодировки совпадают).

 

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

 

Вот код страницы, код скрипта обработки "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>

Опубликовано

Попробуйте с кодировкой 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>

 

Опубликовано

я переписал файлменеджер у FCK едитора

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

и есть ещё один скрипт выдачи файла по идентификатору

 

в этом случае решаются все проблемы с кодировкой

Опубликовано

Konev,

1) посмотрите, как выглядит имя файла в файловой системе.

2) создайте папку, разрешенную к просмотру в браузере, создайте в ней файлы с именами в кириллице и сравните ссылки на них с Вашей ссылкой.

Опубликовано

1) не используйте русские имена файлов.

2) Кодировка на unix сервере скорее всего koi8-r. Запросы летят 99% в utf8.

mbstring / iconv в помощь.

  • 1 месяц спустя...
Опубликовано

лучше при заливке на сервер автоматически менять русское название, например, на транслит и заменять пробелы на подчеркивание, будет что-то типа noviy_fayl.doc.

 

 

 

 

--------------------------------------------

создание веб-сайтов и дизайн тут

  • 4 недели спустя...
Опубликовано
Данные посылаемые формой по умолчанию в utf-8 кодировке, поэтому лучшее решение - использовать латинские буквы и символы.

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

Аккаунт

Навигация

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.