/ домой \ | \ темы / |
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); |