2012-04-03 5 views
0

Ich habe die folgenden Ordner:Script versagt Ordner zu bestätigen, obwohl sie existieren

uploads 
orig 
temp 

und sie alle existieren in auf dem Server mit 777 Erlaubnis: http://i.imgur.com/cz3eS.png

und das Skript, das die Berechtigungen überprüft ist:

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

und alle Ordnerüberprüfungen geben einen Fehler zurück !!!!

kann jemand denken, was das Problem ist?!?!

EXTRA INFO ÜBER 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

Sie müssen eine Funktion schreiben. Die Vervielfältigung eines Codes ist sehr schlecht. – lollo

+0

Wo werden $ tmp_dir, $ upload_dir, $ orig_dir, $ img_dir initialisiert? Worauf sind sie eingestellt? Was ist das aktuelle Verzeichnis des Prozesses? Sind die Namen in den Variablen auf relative Pfade oder absolute Pfade eingestellt? In welchem ​​Basisverzeichnis befinden sich die Ordner? Wo ist das Analogon von $ img_dir? –

+0

Ich habe die Variablen zu der Frage hinzugefügt, aber nicht alle Pfade sind absolut! –

Antwort

1

Ihre vierzeilige wiederholt Codefragment:

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

in einem Unterprogramm sein sollte:

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

Dies setzt voraus, dass @tests ist zugänglich für check_dir(), natürlich. Es umschließt auch die -d in Klammern, die Fehlinterpretation des Arguments verhindern könnte.

Es ist interessant, dass Sie Liste:

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

, die nicht enthalten $img_dir wie im ursprünglichen Code aufgeführt. Dies sieht auch wie ein Initialisierer für einen Hash aus. Nehmen wir an, der Hash ist %dir_list. Sind Sie sicher, dass Sie nicht zu Verwendung meinte:

check_dir($dir_list{temp_dir}); 

Etcetera. Wenn Sie uns nicht genau den Code zeigen, den Sie ausführen, sind die Antworten, die Sie erhalten, weniger genau, als wenn Sie uns ausführbaren Code zeigen, den wir testen und analysieren können.

Verwandte Themen