即使脚本存在,脚本也无法确认文件夹

时间:2012-04-03 04:36:47

标签: linux perl permissions cgi

我有以下文件夹:

uploads
orig
temp

并且它们都存在于具有777权限的服务器上:http://i.imgur.com/cz3eS.png

和检查权限的脚本是:

   # temp dir
   push @tests, -d $temp_dir ? 'temp dir exist: OK' : 'temp dir exist: ERROR';
   push @tests, mkdir("$temp_dir/test") ? 'temp dir mkdir: OK' : 'temp dir mkdir: ERROR';
   push @tests, rmdir("$temp_dir/test") ? 'temp dir rmdir: OK' : 'temp dir rmdir: ERROR';
   # upload dir
   push @tests, -d $upload_dir ? 'upload dir exist: OK' : 'upload dir exist: ERROR';
   push @tests, mkdir("$upload_dir/test") ? 'upload dir mkdir: OK' : 'upload dir mkdir: ERROR';
   push @tests, rmdir("$upload_dir/test") ? 'upload dir rmdir: OK' : 'upload dir rmdir: ERROR';
   # orig dir
   push @tests, -d $orig_dir ? 'orig dir exist: OK' : 'orig dir exist: ERROR';
   push @tests, mkdir("$orig_dir/test") ? 'orig dir mkdir: OK' : 'orig dir mkdir: ERROR';
   push @tests, rmdir("$orig_dir/test") ? 'orig dir rmdir: OK' : 'orig dir rmdir: ERROR';
   # htdocs dir
   push @tests, -d $img_dir ? 'img dir exist: OK' : 'img dir exist: ERROR';
   push @tests, mkdir("$img_dir/test") ? 'img dir mkdir: OK' : 'img dir mkdir: ERROR';
   push @tests, rmdir("$img_dir/test") ? 'img dir rmdir: OK' : 'img dir rmdir: ERROR';

并且所有文件夹检查都会返回错误!!!!

谁能想到问题是什么?!?!

关于VAR的额外信息

 temp_dir => '/var/www/cgi-bin/temp',
 upload_dir => '/var/www/cgi-bin/uploads',
 cgi_dir => '/var/www/cgi-bin',
 htdocs_dir => '/var/www/htdocs',
 htdocs_tmp_dir => '/var/www/htdocs/tmp',

1 个答案:

答案 0 :(得分:1)

你的四行重复代码片段:

# temp dir
push @tests, -d $temp_dir ? 'temp dir exist: OK' : 'temp dir exist: ERROR';
push @tests, mkdir("$temp_dir/test") ? 'temp dir mkdir: OK' : 'temp dir mkdir: ERROR';
push @tests, rmdir("$temp_dir/test") ? 'temp dir rmdir: OK' : 'temp dir rmdir: ERROR';

应该在子程序中:

sub check_dir()
{
    my($dir) = @_;
    push @tests, (-d $dir)          ? "$dir exist: OK'      : "$dir exist: ERROR $!";
    push @tests, mkdir("$dir/test") ? "$dir/test mkdir: OK" : "$dir/test mkdir: ERROR $!";
    push @tests, rmdir("$dir/test") ? "$dir/test rmdir: OK" : "$dir/test rmdir: ERROR $!";
}

check_dir($temp_dir):
check_dir($upload_dir);
check_dir($orig_dir);
check_dir($img_dir);

这假定@tests可以check_dir()访问,当然。它还将-d包含在括号中,这可能会阻止对参数的误解。

有趣的是你列出:

temp_dir => '/var/www/cgi-bin/temp',
upload_dir => '/var/www/cgi-bin/uploads',
cgi_dir => '/var/www/cgi-bin',
htdocs_dir => '/var/www/htdocs',
htdocs_tmp_dir => '/var/www/htdocs/tmp',

不包含原始代码中列出的$img_dir。这看起来像是哈希的初始化器。我们假设哈希是%dir_list。你确定你不是故意的吗? 使用方法:

check_dir($dir_list{temp_dir});

等等。如果您没有准确地向我们展示您正在执行的代码,那么您获得的答案将不如向我们展示我们可以测试和分析的可执行代码那样准确。