Опубликовано 14 июня, 200917 г. comment_6541711 Такая проблемка, наверное известная, но в инете не нашел почему-то. Заливаем на сайт через форму файл с русским именем, например, "Файл новый.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-кодирования ни на что не влияет. Жалоба
Опубликовано 14 июня, 200917 г. comment_6542835 Имя файла из адресной строки приходит на сервер в той же кодировке что и кодировка файла лежащего на сервере? Жалоба
Опубликовано 15 июня, 200917 г. Автор comment_6543850 > Имя файла из адресной строки приходит на сервер в той же кодировке что и кодировка файла лежащего на сервере? Не знаю, честно говоря. Я описал все, что делаю - как таковых кодировок не касаюсь ни в одном месте, в этом и вопрос, где их надо "коснуться". Жалоба
Опубликовано 15 июня, 200917 г. comment_6544221 Если вы переходите по ссылке расположенной на некой html странице, то на сервер имя файла поступит в кодировке текущей страницы. Если вы собственноручно вбиваете ссылку на файл в адресную строку, то на сервер она поступит в кодировке текущей системной локали. Жалоба
Опубликовано 15 июня, 200917 г. Автор comment_6545003 А как мне узнать, в какой кодировке имя файла на сервере? Жалоба
Опубликовано 15 июня, 200917 г. comment_6545780 В той которая указана на странице с формой загрузки файла на сервер. Кстати, лучше не copy() делать, а move_uploaded_file() Жалоба
Опубликовано 16 июня, 200917 г. Автор comment_6547472 Насколько я понял Вашу схему, если файл заливается с некоторой страницы, для которой явно указана кодировка, а потом на этой же странице ставится ссылка на этот файл, то все должно работать (т.к. кодировки совпадают). Это не так, не работает. Вот код страницы, код скрипта обработки "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> Жалоба
Опубликовано 16 июня, 200917 г. comment_6548597 Попробуйте с кодировкой 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> Жалоба
Опубликовано 17 июня, 200917 г. comment_6551224 я переписал файлменеджер у FCK едитора сейчас вся структура файлов ( т.е. папки и имена файлов ) хранятся в базе данных, а сами файлы лежат в одной папке. Имена у файлов совпадают с их идентификаторами в базе и есть ещё один скрипт выдачи файла по идентификатору в этом случае решаются все проблемы с кодировкой Жалоба
Опубликовано 20 июня, 200917 г. comment_6560925 Konev, 1) посмотрите, как выглядит имя файла в файловой системе. 2) создайте папку, разрешенную к просмотру в браузере, создайте в ней файлы с именами в кириллице и сравните ссылки на них с Вашей ссылкой. Жалоба
Опубликовано 27 июня, 200916 г. comment_6578229 1) не используйте русские имена файлов. 2) Кодировка на unix сервере скорее всего koi8-r. Запросы летят 99% в utf8. mbstring / iconv в помощь. Жалоба
Опубликовано 4 августа, 200916 г. comment_6671798 лучше при заливке на сервер автоматически менять русское название, например, на транслит и заменять пробелы на подчеркивание, будет что-то типа noviy_fayl.doc. -------------------------------------------- создание веб-сайтов и дизайн тут Жалоба
Опубликовано 1 сентября, 200916 г. comment_6741653 Данные посылаемые формой по умолчанию в utf-8 кодировке, поэтому лучшее решение - использовать латинские буквы и символы. Жалоба
Такая проблемка, наверное известная, но в инете не нашел почему-то.
Заливаем на сайт через форму файл с русским именем, например, "Файл новый.doc". Кладем его в нужное место с тем же именем стандартной командой (PHP):
Далее пытаемся обратиться к этому файлу по ссылке:
"http://host/dir/Файл новый.doc" - ничего не выходит, файл не находится.
В Винде (у меня на локале, во всяком случае) все работает.
При этом, что интересно, если на хостинге вызвать скрипт с таким вот содержанием, то в итоге удается получить нужный файл:
<?php header('Location: http://host/dir/Файл новый.doc'); ?>Видимо, проблема с кодировками, но где именно, представляю слабо.
В итоге вопрос - как сформировать прямой ерл на файл? (Или может при копировании исходно надо какое-то преобразование имени провести?)
P.S. Наличие/остутствие url-кодирования ни на что не влияет.