LINUX.ORG.RU

загрузка файлов...


0

0

Я думаю многие cgi-программисты сталкивались с задачей загрузки файлов пользователей на сервер через веб-форму.
У меня такая возникла проблема... В загруженном бинарном файле все байты имеющие hex-код 00, заменяются на код 20 - т.е. символ пробела. И я совершенно без понятия в чём трабла... Такое явление возникает если передавать файл с виндового клиента (любой браузер). Из под Линуха переданный файл таких проблем не имеет, но в нём происходит какая-то другая фигня - такое ощущение что происходит перевод файла из одной кодировки в другую, как текстового файла, т.е. все байты имеющие код больше 128 меняют своё значение на другое. Подозреваю, что идёт перекодировка из koi8-r в win-1251.
Отсюда я сделал вывод, что по какому-то странному обстоятельству толи на стороне клиента, толи сам Апаче воспринимает эти файлы как текстовые и передаёт их в соотвествующем виде, проводя преобразования.
Как лечить, помогите.
Сервер: Mandrake 8.0, Russian Apache, кодировка всех html-документов на диске win-1251, отправляется в той же кодировке.
Веб-форма такая:
<form METHOD="POST" ENCTYPE="multipart/form-data">
<input TYPE="file" NAME="uf">
<input type="submit" name="go">
</form>
Скриптик простейший:
#!/usr/bin/perl
use CGI qw(:all);
if (param){
$filename=param('uf');
while (<$filename>) {$file.=$_;}
open(FILE,">/home/tmp/uploadfile") || die "can't open";
print FILE $file;
close(FILE);
}
Пробовал и без использования модуля CGI, сохранял целиком запрос от клиента, но уже сам запрос искажён этим преобразанием...

anonymous

Ответ на: комментарий от DOBRO

Как я понимаю Юнихам по барабану binmode или нет, это имеет значение только на виндовых серверах. Тем не менее я пробовал делать binmode. Результат тот же - хреновый.
Я склонясь к тому, что что-то не так в настройках Апача. Вот только не могу понять что...

anonymous
()

ЙЙЙЙЙЕЕЕЕЕЕЕЕЕЕЕССССССССССС!!!!!!!!!!!!!!
Как я и думал это Апаче виноват...
Всё ему перекодировать хочется, собаке...
Прописал в конфе такую фишку:
<Directory /var/www/cgi-bin/upload>
CharsetDisable on
</Directory>
И выложил в /var/www/cgi-bin/upload свой скриптец.
Соотвественно теперь Апаче перекодировками для документов из этой директории заниматься перестал и файлы стали приходить целыми и не вредимыми.
"Век живи - век е..сь"...

anonymous
()

Да, Юнихам по барабану, если с Юниха на Юних качаешь. Другое дело, когда с виндов на Юних. Я, например, делал binmode(STDIN), без подключения CGI.pm. Работает.

Попробовал убрать binmode -> такая же хрень получается, как у тебя.

DOBRO
()

Да, Юнихам по барабану, если с Юниха на Юних качаешь.
Другое дело, когда с виндов на Юних.
Я, например, делал binmode(STDIN), без подключения CGI.pm.
Работает.

Попробовал убрать binmode -> такая же хрень получается, как у тебя.

DOBRO
()

Да, Юнихам по барабану, если с Юниха на Юних качаешь.
Другое дело, когда с виндов на Юних.
Я, например, делал binmode(STDIN), без подключения CGI.pm.
Работает.

Попробовал убрать binmode -> такая же хрень получается, как у тебя.

DOBRO
()

Заметьте - это только в Русском Апаче такая фигня. В нормальном Апаче все нормально. Давно известный факт.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.