Forum Webscript.Ru

Программирование => Perl => Тема начата: A.Perez от 27 Марта 2006, 11:38:58

Название: Загрузка файлов на сервер
Отправлено: A.Perez от 27 Марта 2006, 11:38:58
Задача в загрузке 30 или меньше файлов на сервер по хттп,

почему то, файлы создаются на сервере, но не записываются,
где то в приведенном куске ошибка, но я не знаю что копать.
помогите ожалуйста.



for ($j=1; $j<31; $j++) # счетчик
{

if (@file[$j]) # проверка существования файла
{
$file="@file[$j]";
open(UPLOAD, ">/home/apache/hosts/рщые/virtual/temp/$year/$mon/$mday/$file")  || Error();
    my ($data, $length, $chunk);

print $file;

    while ($chunk=read($file, $data, 1024))
{
print "adssdadsadsasd";
print $data;
print UPLOAD $data;

        $length+=$chunk;
     if ($length>$limit) {
     print"превышен лимит загрузки";
       exit;}

close(UPLOAD);

}
Название: Загрузка файлов на сервер
Отправлено: NeoNox от 27 Марта 2006, 12:09:06
perldoc -f read
Цитировать
read FILEHANDLE,SCALAR,LENGTH
               Attempts to read LENGTH characters of data into
               variable SCALAR from the specified FILEHANDLE.
Название: Загрузка файлов на сервер
Отправлено: A.Perez от 27 Марта 2006, 12:22:20
я прочитал перлдок, спасибо

но пример кода то хрестоматийный, должно все работать.
неправильна вот эта строка получается?

($chunk=read($file, $data, 1024))
а как правильно, если именно так написано в книге?
Название: Загрузка файлов на сервер
Отправлено: NeoNox от 27 Марта 2006, 12:45:18
if (@file[$j]) # проверка существования файла

Это сильно оптимистическая проверка файла.
if (-e @file[$j])

for ($j=1; $j<31; $j++) # счетчик
Сильно оптимистический счетчик.
$file[0] пропускаем?

Цитировать

кода то хрестоматийный

Это вас обманули. Поищите по этому форуму.
Название: Загрузка файлов на сервер
Отправлено: A.Perez от 27 Марта 2006, 12:52:17
у меня вроде все счетчики с 1 просто

искал ведь, :( еще поищу

спасибо за заботу, NeoNox
Название: Загрузка файлов на сервер
Отправлено: NeoNox от 27 Марта 2006, 12:59:21
Цитировать
A.Perez:
у меня вроде все счетчики с 1 просто

А массив вы тоже игнорируя первый элемент заполнили?

Выведите на print значения всех переменных и увидите почему у вас этот кусок не работает.
Название: Загрузка файлов на сервер
Отправлено: A.Perez от 27 Марта 2006, 13:02:27
Цитировать
А массив вы тоже игнорируя первый элемент заполнили?


ну да
Название: Загрузка файлов на сервер
Отправлено: A.Perez от 27 Марта 2006, 13:08:13
if (-e @file[$j])

вот эта проверка не проходит. данная переменная содержит имя файла без пути к нему. Мжет в этом дело?
книжка то плюшевая у меня похоже.


for (my $i=0; $i<30; $i++)
    {
    my $myfile="url$i";
        @file[$i]=param($myfile); # получаем имена файлов из параметров
        @info[$i]=uploadInfo($myfile);  # это для проверки миме
    }
Название: Загрузка файлов на сервер
Отправлено: A.Perez от 27 Марта 2006, 13:21:08
паскопал статью
http://www.webscript.ru/stories/01/03/12/7989628
Название: Загрузка файлов на сервер
Отправлено: Алан от 27 Марта 2006, 13:32:37
У каждого, конечно, свои подходы, но почему бы вместо не использовать:

open(FILE, \'\') or die \'\';
binmode(FILE);
while( ) {
$data .= $_;
}
close(FILE);

В $data будет весь ваш файл :) Делайте что хотите :) И никакого read не надо...
Название: Загрузка файлов на сервер
Отправлено: Алан от 27 Марта 2006, 13:35:22
if (@file[$j]) # проверка существования файла

Насколько мне память не изменяет адресация к элементу массива идёт как $file[$j] тогда будет правельнее

if( -e $file[$j] )

Хотя... могу заблуждаться... *думает: может путаю с указателями... потому как с массивами на прямую давно не работаю... $file->[$j]*
Название: Загрузка файлов на сервер
Отправлено: A.Perez от 27 Марта 2006, 13:35:36
классная тема. счас попробую. спасибо
Название: Загрузка файлов на сервер
Отправлено: A.Perez от 27 Марта 2006, 13:38:46
Цитировать
open(FILE, \'\') or die \'\';
binmode(FILE);
while( ) {
$data .= $_;
}
close(FILE);


cgi как работает с этим если файл на локальном компьютере?
Название: Загрузка файлов на сервер
Отправлено: Алан от 27 Марта 2006, 16:48:17
ну блин... я-то думал, что файл уже загружен...
Тогда его сначала загрузить надо :) об этом, кстати, есть хорошая статья тута (http://www.webscript.ru/stories/05/04/07/1411418). Очень хорошая статья. Там и написано как коректно получать параметры и файлы по http :) Или ещё можно средствами модуля CGI это делать... но не советую :)