Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Mgate.Ru
Зарегистрирован: 26.11.2008 Сообщения: 3
|
Добавлено: Ср Ноя 26 2008 17:28 Заголовок сообщения: Скрипт отдачи файлов. Отдача файла из папки выше корня. Perl |
|
|
Приветствую Уважаемые!
Подскажите кто может сталкивался.
Есть папка с файлами, она лежит выше корня веб папки, таким образом через прямой линк файлы не забрать.
Маленький скрипт на Perl, который их отдает через application/octet-stream:
Код: |
#!c:\perl\bin\perl
#############################################
$DIR_ARH = "f:/photo/";
$real_name = "dsc06060.jpg"; #реальный файл выше корня
$file_name = "dsc06060_b.jpg"; #имя файла при сохранении
print "Content-type: application/octet-stream \n";
print "Content-Disposition: attachment; filename=$file_name \n\n";
open (INX, "$DIR_ARH/$real_name") or die "cant open file!";
binmode (INX);
print <INX>;
close(INX);
exit;
#############################################
|
Так вот засада в следующем, если скрипт работает под *nix нет проблем предлагается сохранить файл и он сохраняется.
Но вот когда он работает под win, то после сохранения этого файла, файл оказывается битым.
Путем сраврения содержимого исходного файла и нового, выяснилось, что в новый файл дописывается 0D перед 0A в конце каждой строки.
Похоже что binmode не работает, и не говорит Perlу что файл нужно бинаром читать, а продолжает его читать текстом и портит.
Как от этого избавиться и победить это под win? |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Bad Lamer
Зарегистрирован: 23.09.2004 Сообщения: 61
|
Добавлено: Сб Ноя 29 2008 14:22 Заголовок сообщения: |
|
|
Попробуйте добавить binmode STDOUT; после binmode (INX);
Код: |
#!c:\perl\bin\perl
#############################################
$DIR_ARH = "f:/photo/";
$real_name = "dsc06060.jpg"; #реальный файл выше корня
$file_name = "dsc06060_b.jpg"; #имя файла при сохранении
print "Content-type: application/octet-stream \n";
print "Content-Disposition: attachment; filename=$file_name \n\n";
open (INX, "$DIR_ARH/$real_name") or die "cant open file!";
binmode (INX);
binmode STDOUT;
print <INX>;
close(INX);
exit;
|
|
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Mgate.Ru
Зарегистрирован: 26.11.2008 Сообщения: 3
|
Добавлено: Вс Ноя 30 2008 17:18 Заголовок сообщения: |
|
|
блин, бился головой две недели, никто не мог дать ответ, даже на родном форуме перла молчат!
СПАСИБО!
Куда выслать пива? |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Bad Lamer
Зарегистрирован: 23.09.2004 Сообщения: 61
|
Добавлено: Вс Ноя 30 2008 18:57 Заголовок сообщения: |
|
|
![Smile](images/smiles/icon_smile.gif) |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
|