За последние 24 часа нас посетили 18172 программиста и 1590 роботов. Сейчас ищут 1190 программистов ...

php, FreeBSD и sms-замок: проблема с кодировкой

Тема в разделе "PHP для новичков", создана пользователем Валерия, 15 дек 2007.

  1. Валерия

    Валерия Активный пользователь

    С нами с:
    14 ноя 2007
    Сообщения:
    50
    Симпатии:
    0
    При скачивании архива с FreeBSD-сервера через sms-замок, происходит перекодировка архива в UNIX кодировку повреждением архива. Исходная кодировка windows. Как с этим бороться ?
    Код sms-замка:
    PHP:
    1.  
    2. <?php
    3. /* Нужно так же сказать, что для подобных проектов обяззательно нужно включить опцию
    4.  * «Автораспознавание ссылок», при этом обратившись к одному из номеров журнала,
    5.  * пользователь не сможет обратится к другому по тому же паролю (при первом обращении
    6.  * пароль получает привязку к адресу).
    7.  */
    8.  
    9. // каталог, где лежат выпуски журнала (не доступен через web)
    10. $MAGAZINE_DIR = '/usr/home/test/files';
    11.  
    12. // префикс имени файла на вашем сервере
    13. $S_PREFIX = '';
    14.  
    15. // префикс имени файла отдаваемый пользователю
    16. // (в большинстве случаев можно оставлять такое же как и $S_PREFIX)
    17. $U_PREFIX = '';
    18.  
    19. // расширения файлов (можно оставить пустым)
    20. $FILE_EXTENSION = 'rar';
    21.  
    22. // тип содержимого (для zip -- application/zip, для exe -- application/octet-stream)
    23. // [url=http://www.iana.org/assignments/media-types/application/]http://www.iana.org/assignments/media-t ... plication/[/url]
    24. $CONTENT_TYPE = 'application/rar';
    25.  
    26. // номер выпуска журнала
    27. // (так же вместо номера журнала можно использовать имя файла,
    28. // если цель проекта раздавать просто различные файлы не подходящие
    29. // под общую схему)
    30. $number = $_GET['number'];
    31.  
    32. // полное имя файла, включая путь
    33. $fext = (strlen($FILE_EXTENSION) > 0) ? '.'.$FILE_EXTENSION : '';
    34. $shortname = $S_PREFIX.$number.$fext;
    35. $filename = $MAGAZINE_DIR.'/'.$shortname;
    36.  
    37. // посылаем заголовки для браузера
    38. header('Content-type: '.$CONTENT_TYPE);
    39. header('Content-Disposition: attachment; filename="'.$U_PREFIX.$number.$fext.'"');
    40. header('Content-Length: '.filesize($filename));
    41.  
    42.   // передаём содержимое файла
    43.   readfile($filename);
    44. ?>
    45.  
     
  2. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Валерия
    Видимо, имеет место быть Русский Опачъ... нужно что-то добавить в .htaccess чтобы он не трогал кодировку у отдаваемых файлов. К сожалению, заклинания не помню :(
     
  3. Штаны

    Штаны Guest

    Если Апач, то в .htaccess нужно:
    <FILES *.rar>
    CharsetDisable On
    </FILES>
    А можно еще и серверу указать, в какой кодировке загружаемый файл (опять же в .htaccess): CharsetSourceEnc windows-1251
     
  4. Валерия

    Валерия Активный пользователь

    С нами с:
    14 ноя 2007
    Сообщения:
    50
    Симпатии:
    0
    Штаны,
    куда именно это прописать, .htaccess в какой папке ? Ну я вставила в .htaccess в /usr/home/test/files, где лежат архивы, но ничего не изменилось :(
    Сам сайт находится в /usr/home/web/www.
    Кстати, если скачать просто через фтп, то никаких проблем нет.
     
  5. Штаны

    Штаны Guest

    Пропиши в .htaccess который находится по адресу $_SERVER[‘SCRIPT_FILENAME’]
    У тебя это скорее всего будет /usr/home/web/www + дальше до папки в которой лежит этот скрипт.
     
  6. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Валерия
    Ага, это вроде оно.
    Только убери <FILES *.rar> и </FILES>. Иначе эта директива не будет работать для PHP скриптов.
    И звездочек там не должно быть, это не Windows :D
     
  7. Штаны

    Штаны Guest

    Чё это не должно? Звездочки работают и наFreeBSD.

    А вообще, лучше не так сделай, как я тебе до этого советовал. А вот так: пропиши в .htaccess который находится там где и php скрипт вот это:
    Код (Text):
    1.  
    2. <FILES *.rar>
    3. AddDefaultCharset Windows-1251
    4. </FILES>
    Этим ты укажешь серверу, что файлы *.rar нужно отдавать в кодировке Windows-1251. Эта штука будет работать при отдаче файлов *.rar этим скриптом и скриптами которые находятся с ним рядом, т.е. на которые действует твой .htaccess
     
  8. Валерия

    Валерия Активный пользователь

    С нами с:
    14 ноя 2007
    Сообщения:
    50
    Симпатии:
    0
    Все перепробовала, НЕ РАБОТАЕТ !!! О_О Уже и не знаю, что делать (
     
  9. Штаны

    Штаны Guest

    Плохо дело :(
    Тогда дополни 23-ю строчку указанием кодировки файла:
    PHP:
    1.  
    2. $CONTENT_TYPE = 'application/rar; charset=windows-1251';
    3.  
     
  10. alexei

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

    С нами с:
    25 июл 2006
    Сообщения:
    46
    Симпатии:
    0
    Адрес:
    Россия, Нижневартовск
    В скрипте где посылаете заголовки добавьте:
    PHP:
    1.  
    2. header('Content-Transfer-Encoding: binary');
    3.  
     
  11. Валерия

    Валерия Активный пользователь

    С нами с:
    14 ноя 2007
    Сообщения:
    50
    Симпатии:
    0
    Спасибо, так все заработало !