За последние 24 часа нас посетили 20302 программиста и 1726 роботов. Сейчас ищут 2159 программистов ...

Загрузка файлов с русскими именами

Тема в разделе "Прочие вопросы по PHP", создана пользователем keymaster, 25 апр 2006.

  1. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    Apache + PHP4
    Нужно загружать файлы с русскими именами.
    С английскими всё замечательно, в БД пишется ID и URL файла,
    а русские грузиться не хотят.

    Как решить проблему?
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    keymaster
    а ты ссылки кодируй urlencode();

    <a href="/?filename='.urlencode('имя файла').'">ссылка номер один</a>
     
  3. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    Не совсем понял...
    Файл грузиться через <INPUT NAME="filename" TYPE="file">,
    но потом, если имя файла - русское, то
    $_FILES["myfile"]["name"] = "?????????????.txt"
    И сохраняться он не желает.
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    keymaster
    кодировка страницы какая?

    вот. все пашет. тренируйся.
    http://440hz.ru/trash/upload/

    PHP:
    1. <?
    2.  
    3. if(isset($_FILES['file'])) {
    4.     print('<pre>');
    5.     print_r($_FILES['file']);
    6. }
    7.  
    8. ?>
    9. <html>
    10. <body>
    11. <form method=POST ENCTYPE='multipart/form-data'>
    12. <input type=file name=file>&nbsp;<input type=submit value=" загрузить">
    13. </form>
    14. </body>
    15. </html>
     
  5. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    спасибо, разобрался в чем проблема.
    если не ставить
    <meta http-equiv="content-type" content="text/html; charset=windows-1251" />
    то не работает.
    если поставить - работает.
    Применительно к Opera.
     
  6. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    keymaster
    я б еще header выдавал для надежности.
     
  7. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    Не понял, а чем этот способ ненадёжен?
     
  8. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    keymaster
    а ты выдай header в одной кодировке, а мета тэг в другой и посмотри какой броузер какую кодировку подствит?
     
  9. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    сейчас гляну...
    появилась ещё проблема, но она по апачу больше:
    Код (Text):
    1. if (copy($myfile, $_SERVER['DOCUMENT_ROOT'].$myfile_name))
    2.         {
    3.           $fp = $_SERVER['DOCUMENT_ROOT'].$myfile_name;
    4.           print("Сохранен: : ".$fp."<br>");
    5.           ?>
    6.           <a href="<?php echo urlencode($myfile_name) ?>">скачать</a><?php
    7.     }
    Появляется ссылка, но при клике на ней вылетает "нет прав для доступа к этому файлу".
     
  10. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    keymaster
    ты посмотри куда он на самом деле записал. и попробуй руками его получить, а потом сравни ссылку ...

    я бы сделал для начала <a href="/'.что-то-типа-там.'">, т.юе. принудительно от корня, а то если у тебя а вдресной строке имя скрипта торчит, то он относительно его и запросит
     
  11. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    Что формирует скрипт:
    http://localhost:8080/%F2%E5%EA%F1%F2+%F4%E0%E9%EB.txt
    Ручной ввод:
    http://localhost:8080/текст%20файл.txt

    Фактически файл лежит в htdocs

    ссылки практически совпадают, но во втором случае - выводит текст файла,
    а в первом пишет You don't have permission to access текст+файл.txt on this server.
     
  12. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    keymaster
    гм ... т.е. руками он отдается а ссылкой нет?
     
  13. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    угу.
    очень интересно, что после того, как я убрал из формируемой скриптом ссылки
    urlencode, то все заработало.
    Причина феномена неизвестна.
     
  14. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    keymaster
    известна - броузер сам пытается перекодироать при вызове, но сие НЕ правильно. нужно самому.
     
  15. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    Так что делать-то в итоге? Оставить так (ибо работает) или это ещё не всё?
     
  16. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    keymaster
    добиться как правильно
     
  17. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    А что неправильно в работающем варианте?
     
  18. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    keymaster
    за тебя работу делает броузер. эо в корне не верно. ты ему уже должен формировать правильные ссылки.
     
  19. keymaster

    keymaster Активный пользователь

    С нами с:
    25 апр 2006
    Сообщения:
    83
    Симпатии:
    0
    Адрес:
    Подольск
    Тогда вопрос - как сформировать правильную ссылку?
    Я так и не понял, почему прошлый вариант (с использованием urlencode) не работает...