Форум

/ домой \ \ темы /



Тема: Глюк-с

01/12/2006 13:41 slalom:
вот скрипт, который должен выдавать на экран каждый раз случайную картинку из определенной папки (в данном случае banner). так вот - на APACHE данный скрипт работает, а вот у Вас - нет. Выдает какие-то обрезки от файлов (размер к примеру 4Кб, а скрипт выдает только 100-200 байт - по разному каждый раз) :-(
Операционка Windows 2000 ADV Server, файловая система NTFS, права админа

#!/usr/bin/perl

$path="../banner/";
opendir THISDIR, $path or die "Can`t read directory: $!";
@allfiles = readdir THISDIR;
closedir THISDIR;

$cnt=$#allfiles;
$cnt=$cnt-"2";
$i = int(rand $cnt) + 3;

($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blksize,$blocks) = stat($path.$allfiles[$i]);
#print "Pragma: no-cache\nCache-Control: no-cache\nContent-Type: image/gif\nContent-Disposition: attachment; filename=".$allfiles[$i]."\nAccept-Ranges: bytes\nContent-Length: ".$size."\n\n";
print "HTTP/1.1 200 OK\nContent-Type: image/gif\nAccept-Ranges: bytes\nContent-Length: ".$size."\n\n";
open (F, "<".$path.$allfiles[$i]);
@txt=<F>;
close(F);
print @txt;
02/12/2006 02:18 Max:
1. HTTP/1.1 200 OK\n не нужно.
2. В Windows-е (а для совместимомсти можно везде) при чтении и записи бинарных файлов вызывать binmode -- необходимо.
3. Читать бинарный файл построково-списковой операцией, ну это даже коментировать сложно...
Используйте sysread, syswrite и скалярный контекст...

Вообще чтобы как-то заработало достаточно выполнить второй пункт.
Все это не имеет ни какого отношения к серверу.

02/12/2006 19:23 slalom:
www.slalom.si.net.ua/cgi-bin/bann.cgi
все замечательно работает на Linux + Apache
попробовал BINMODE, SYSREAD - выдает файл нужного размера, но с частью левого содержимого (т.е. начало оригинальное, а конец - непонятно откуда взят)
02/12/2006 19:24 slalom:
вот новый код:
#!/usr/bin/perl

$path="../banner/";
opendir THISDIR, $path or die "Can`t read directory: $!";
@allfiles = readdir THISDIR;
closedir THISDIR;

$cnt=$#allfiles;
$cnt=$cnt-"2";
$i = int(rand $cnt) + 3;

($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blksize,$blocks) = stat($path.$allfiles[$i]);
print "Content-Type: image/gif\nAccept-Ranges: bytes\nContent-Length: ".$size."\n\n";
open (F, "<".$path.$allfiles[$i]);
binmode F;
sysread (F, $txt, $size);
close(F);
print $txt;
03/12/2006 03:10 Max:
Вместо print $txt;
syswrite (STDOUT, $txt, $size);


Пользователь: Пароль: Новый пользователь:   Запомнить пароль: