Программирование => Perl => Тема начата: movs от 25 Марта 2004, 17:05:53
Название: загрузка файлов на сервер
Отправлено: movs от 25 Марта 2004, 17:05:53
Есть такой скриптик. Локально на IIS под виндой все работает, а вот при загрузке к провайдеру на может открыть локальный файл (затыкается на строке: open ( SRC, $imagename) || die print("Cannot Open File $imagename"); Где я наглючил?
sub upload { ($imagename)=@_; $imagename=~m/^.*(\\\\|\\/)(.*)/; $imagename =~tr/бвчздецъйклмнопртуфхжигюыэящшьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС?/АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё/; my $name = $2; open ( SRC, $imagename) || die print("Cannot Open File $imagename");; binmode (SRC) || die print("Cannot Bin Open File"); @imgdata=; close(SRC); open(DST,">$name") || die print("Cannot BinOpen File"); binmode(DST); foreach $istring (@imgdata) { print DST $istring; } close(DST); print" uploaded: $name "; }
Название: загрузка файлов на сервер
Отправлено: NeoNox от 25 Марта 2004, 17:32:29
Это хорошо что ты имена файлов в кирилице задаеш. Только неплохо было бы узнать как понимает это сервер. самое быстрое решение - имена файлов в латинице. Иначе копай в сторону locale
Название: загрузка файлов на сервер
Отправлено: movs от 25 Марта 2004, 17:51:45
На самом деле это для того, чтобы можно было загружать файлы из папки Мои Документы. Я пробовал чисто латинские файлы, строчку с перикодировкой вообще убирал - та же фигня. А что может быть с локалью? :(
Название: загрузка файлов на сервер
Отправлено: NeoNox от 25 Марта 2004, 18:11:05
замени open ( SRC, $imagename) || die print("Cannot Open File $imagename");; на open ( SRC, $imagename) || die print("Cannot Open File $imagename: $!");
Название: загрузка файлов на сервер
Отправлено: movs от 26 Марта 2004, 11:20:49
No such file or directory.
Еще одна тема. если написать open ( SRC, ">$imagename") то оно создает пустой файл на сервере в текущем каталоге с именем "С:\\mydir\\myfile.jpg"
Название: загрузка файлов на сервер
Отправлено: movs от 26 Марта 2004, 15:53:04
И вообще на chdir "c:" оно говорит No such file or directory
Название: загрузка файлов на сервер
Отправлено: NeoNox от 26 Марта 2004, 20:23:55
chdir "c:/" скрипт покажи
Название: загрузка файлов на сервер
Отправлено: movs от 29 Марта 2004, 10:20:59
chdir c:/ No such file or directory
Текст скрипта: (это типа новости для сайта, см ветку todo=doadd)
open (DST,">$name") || die print "Cannt open dst file: $!"; binmode(DST); flock(DST, 2); chdir ("C:/") || die print "cannt chdir $!"; while ($bytesread=read($imagename,$buffer,1024)) { print DST $buffer; } close(DST); close $imagename;
print" uploaded: $name "; }
Название: загрузка файлов на сервер
Отправлено: NeoNox от 29 Марта 2004, 11:36:19
1. используй use strict; в скрипте 2. в блоке if($image ne ""){ chdir("$imagedir"); &upload($image); $image=~m/^.*(\\\\|\\/)(.*)/; $image = $2; chdir(".."); } что делает $image=~m/^.*(\\\\|\\/)(.*)/; $image = $2; ? может это нужно было сделать перед вызовом upload($image) ? 3. для определения текущего местоположения в каталогах используй модуль: use Cwd; print cwd; 4. расставь метки и делай printна каждый чих программы. 5. chdir \'c:/\' No such file or directory Надеюсь это у тебя в виндовс?
Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp.
C:\\Documents and Settings>perl -de0 Default die handler restored.
Loading DB routines from perl5db.pl version 1.07 Editor support available.
Enter h or `h h\' for help, or `perldoc perldebug\' for more help.
main::(-e:1): 0 DB<1> use Cwd
DB<2> print cwd C:/Documents and Settings DB<3> chdir \'c:/\'
DB<4> print cwd c:/
Название: загрузка файлов на сервер
Отправлено: movs от 31 Марта 2004, 10:33:13
Забавно. Так не работает: open ( SRC, $imagename) || die print("Cannot Open File $imagename");; binmode (SRC) || die print("Cannot Bin Open File"); @imgdata=; close(SRC); open(DST,">$name") || die print("Cannot Open File $!"); binmode(DST); foreach $istring (@imgdata) { print DST $istring; } close(DST);
Так тоже не работает: while ($bytesread=read($imagename,$buffer,1024)) { print DST $buffer; }
А вот так почему-то работает open (DST,">$name") || die print "Cannt open dst file: $!"; binmode(DST) || die print "cannt binmode DST"; print DST while (<$imagename>); close(DST);
Теперь мне интересно ПОЧЕМУ? :)
PS. не print cwd а вот так: $path=getcwd(); print path; Все равно помогло, спасибо.
Название: загрузка файлов на сервер
Отправлено: NeoNox от 31 Марта 2004, 11:18:55