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

标签 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';

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

谁能想到问题出在哪里?!?!

关于 VARS 的额外信息

 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_list。你确定你不是故意的 使用:

check_dir($dir_list{temp_dir});

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

关于linux - 脚本无法确认文件夹,即使它们存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9987181/

相关文章:

c - Linux 上 accept() 的段错误

docker - 为什么容器外的目录层次结构的 docker cp 会因权限被拒绝而失败?

使用 WWW::Mechanize 更新 Facebook 状态

perl - 有可移植 Perl 吗?

perl - 为什么 Perl 会提示 "can' t 修改非左值子例程调用”?

ios - 在“设置”中更新相机权限后 UIViewController 关闭

linux - 为什么我的 apache 进程不能写入我的世界可写文件?

php - E : Package 'php-xmlrpc' has no installation candidate

linux - 先前命令执行的退出代码始终为 0——在远程 Shell 执行中 $?

php - 无法使用 php 执行命令行