我正在调试一段代码,它使用Perl'-s'函数来获取某些文件的大小.
my $File1 = /myfolder/.../mysubfolder1/document.pdf
my $File2 = /myfolder/.../mysubfolder2/document.pdf
my $File3 = /myfolder/.../mysubfolder1/document2.pdf($File3实际上是/myfolder/.../mysubfolder2/document.pdfaka 的链接$File2)
有缺陷的代码是:
my $size = int((-s $File)/1024);
哪里$File被替换为$File1- $File3.
由于某些原因,我无法解释这不适用于每个文件.
为了$File1和$File3它的作品,但不适合$File2.我能理解,如果都$File2并$File3不会工作,这将意味着该文件/myfolder/.../mysubfolder2/document.pdf是某种损坏.我甚至在确定文件存在if (-e $File)|{之前添加了一个测试-s,但这三个文件确实存在.
还有一个更奇怪的事情:有一个.htaccess在/myfolder/.../mysubfolder1/,但没有.htaccess在/myfolder/.../mysubfolder2/.如果它是反向的,我会认为.htaccess会-s以某种方式阻止呼叫.
有什么想法吗?
为了解决注释的结束,.htaccess文件控制Web服务器请求对文件的访问.一旦用户请求执行有效的允许CGI /任何脚本的URL(我假设您的Perl代码在Web上下文中),那么该脚本绝对没有关于.htaccess的权限问题(除非您实际编写Perl代码以读取其内容)并明确地尊重他们).
唯一可以搞砸Perl文件的权限是操作系统中的文件系统权限.
要获取文件大小,您的Web用户需要:
对包含该文件的目录执行权限
可能是对包含该文件的目录的读权限(不确定文件大小是否存储在inode中?)
可能,读取文件自己的权限.
如果所有3个文件(2个好文件和1个坏文件)都在同一目录中,请检查文件的读取权限.
如果它们位于不同的目录中,请检查文件的读取权限和目录权限.