Linux 脚本无法确认文件夹,即使它们存在

Linux 脚本无法确认文件夹,即使它们存在,linux,perl,permissions,cgi,Linux,Perl,Permissions,Cgi,我有以下文件夹: uploads orig temp 它们都存在于服务器上,具有777权限: 检查权限的脚本是: # 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 @

我有以下文件夹:

uploads
orig
temp
它们都存在于服务器上,具有777权限:

检查权限的脚本是:

   # 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',

您的四行重复代码片段:

# 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\u list
。你确定你不是故意的吗 使用:


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

您需要编写一个函数。代码复制非常糟糕。
$tmp\u dir
$upload\u dir
$orig\u dir
$img\u dir
在哪里初始化?他们打算干什么?进程的当前目录是什么?变量中的名称是设置为相对路径还是绝对路径?文件夹所在的基本目录是什么。
$img_dir
的类似物在哪里?我已经在问题中添加了变量,但不是所有路径都是绝对的@lollo有一个函数可以测试所有东西,老实说,上面的代码只是其中的一部分!这段代码已经在我的其他服务器上运行过,所以对我来说非常混乱,我不确定这是代码还是apache设置!!如果您对可能导致此问题的配置有任何建议,我将不胜感激。也许包装一个参数会有所帮助
-d
需要一个表达式作为其参数,因此perl可能首先计算
?:
运算符,然后将结果传递给-d函数<代码>推送@tests,-d($temp\u dir)?'临时目录存在:确定’:“临时目录存在:错误”
check_dir($dir_list{temp_dir});