перл кто нить помнит? =)
mm 19 июня, 2007 - 13:22
Такая задача скачать страничку и сохранить на диск.
Проблемы с сохранением на диск, когда в имени файла есть ?&; итп.
Первоначальный вариант
if (open(CONTENT,">$dir$file")){ print CONTENT $content; close CONTENT; }
когда имя файла вот такое то не удается сохранить =(((
$file = index.php?option=com_banners&task=click&bid=5;
Пробую из командной строки получается...
Пробую ручками поставить "\" перед специальными символами -- победа, сохраняется.
ПРобую регулярными выражениями поставить "\" так:
$file=~ s/([\&;\`'\\\|"~<>\$])/\\$1/g;
Не создает файл!!!
Доп инфо:
DB<6> print $file localhost/index.php?option=com_content\&\;task=view\&\;id=4\&Itemid=1 DB<7> x $file 0 'localhost/index.php?option=com_content\\&\\;task=view\\&\\;id=4\\&Itemid=1'
Есть предложенимя почему не создается:?
»
- Для комментирования войдите или зарегистрируйтесь
perl -e '$file =
perl -e '$file = "?;&file";open(FH,">", $file);print FH "\n";close FH' && ls \?*
?;&file
у меня вот всё нормально создается.
Так у меня
Так у меня почему то тоже работает =(
эмм, может chomp
эмм, может chomp забыли?)
chomp($dir,$file);
вообще это не
вообще это не совсем гуд такие файлы писать.
а если файл будет что-то вроде
$file="/../../../../etc/passwd"
?
бери MD5 сумму от $file и юзай ее как имя файла. либо base64
#md5
use Digest::MD5 qw(md5 md5_hex md5_base64);
$new_filename = md5_hex($file);
#base64
use MIME::Base64;
$new_filename = encode_base64($file);
и дальше пишем в $dir/$new_filename
Решено
Нашел ошибку..
День потерял на такой херне..
Проблема в том что пытался сохранить на винт с fat32 =((
Поэтому хорошие названия сохранялись а плохие нет =().
Хорошо хоть вспомнил что он у меня под fat32