Forum Webscript.Ru
Программирование => Perl => Тема начата: 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);
}
-
perldoc -f read
read FILEHANDLE,SCALAR,LENGTH
Attempts to read LENGTH characters of data into
variable SCALAR from the specified FILEHANDLE.
-
я прочитал перлдок, спасибо
но пример кода то хрестоматийный, должно все работать.
неправильна вот эта строка получается?
($chunk=read($file, $data, 1024))
а как правильно, если именно так написано в книге?
-
if (@file[$j]) # проверка существования файла
Это сильно оптимистическая проверка файла.
if (-e @file[$j])
for ($j=1; $j<31; $j++) # счетчик
Сильно оптимистический счетчик.
$file[0] пропускаем?
кода то хрестоматийный
Это вас обманули. Поищите по этому форуму.
-
у меня вроде все счетчики с 1 просто
искал ведь, :( еще поищу
спасибо за заботу, NeoNox
-
A.Perez:
у меня вроде все счетчики с 1 просто
А массив вы тоже игнорируя первый элемент заполнили?
Выведите на print значения всех переменных и увидите почему у вас этот кусок не работает.
-
А массив вы тоже игнорируя первый элемент заполнили?
ну да
-
if (-e @file[$j])
вот эта проверка не проходит. данная переменная содержит имя файла без пути к нему. Мжет в этом дело?
книжка то плюшевая у меня похоже.
for (my $i=0; $i<30; $i++)
{
my $myfile="url$i";
@file[$i]=param($myfile); # получаем имена файлов из параметров
@info[$i]=uploadInfo($myfile); # это для проверки миме
}
-
паскопал статью
http://www.webscript.ru/stories/01/03/12/7989628
-
У каждого, конечно, свои подходы, но почему бы вместо не использовать:
open(FILE, \'\') or die \'\';
binmode(FILE);
while( ) {
$data .= $_;
}
close(FILE);
В $data будет весь ваш файл :) Делайте что хотите :) И никакого read не надо...
-
if (@file[$j]) # проверка существования файла
Насколько мне память не изменяет адресация к элементу массива идёт как $file[$j] тогда будет правельнее
if( -e $file[$j] )
Хотя... могу заблуждаться... *думает: может путаю с указателями... потому как с массивами на прямую давно не работаю... $file->[$j]*
-
классная тема. счас попробую. спасибо
-
open(FILE, \'\') or die \'\';
binmode(FILE);
while( ) {
$data .= $_;
}
close(FILE);
cgi как работает с этим если файл на локальном компьютере?
-
ну блин... я-то думал, что файл уже загружен...
Тогда его сначала загрузить надо :) об этом, кстати, есть хорошая статья тута (http://www.webscript.ru/stories/05/04/07/1411418). Очень хорошая статья. Там и написано как коректно получать параметры и файлы по http :) Или ещё можно средствами модуля CGI это делать... но не советую :)