Скрипт не может подтвердить папки, даже если они существуют - PullRequest
0 голосов
/ 03 апреля 2012

У меня есть следующие папки:

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

1 Ответ

1 голос
/ 03 апреля 2012

Ваш повторяющийся фрагмент из четырех строк кода:

# 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});

Etcetera.Если вы не покажете нам точно код, который выполняете, ответы, которые вы получите, будут менее точными, чем если бы вы показали нам исполняемый код, который мы можем протестировать и проанализировать.

...