System-Befehle funktionieren nicht - Besser Lösung??
Aqua
- perl
Hallo!
Ein Perl-Script soll das Directory ./bleh/foobar erstellen,
do.pl hineinkopieren, das ganze Directory rekursiv auch chmod 777
setzen, und ./bleh/foobar/file.txt erstellen, und diesem file.txt
dann den chmod 755 geben.
Leider passiert _nichts_!
NICHT einmal das Direcory "foobar" entsteht
Das Directory "bleh" ist chmod 777
Was mache ich falsch,
wie geht es richtig zu machen?
Kann man sowas schöner lösen?
Ich habe das Gefühl diese Systembefehle sind unschön,
geht das mehr mit Perl Befehlen?
Oder spricht nichts gegen die Systembefehle?
Wie macht man das mehr Perl'ig?
Danke!
Aqua
#!/usr/bin/perl
print "Content-type: text/html\n\n";
use CGI;
use strict;
my $cgi = CGI->new();
print "<html><head><title></title></head><body>";
exec("mkdir ./bleh/foobar");
exec("cp ./do.pl ./bleh/foobar");
exec("chmod -R 777 ./bleh/foobar");
exec("touch ./bleh/foobar/file.txt");
exec("chmod 755 ./bleh/foobar/file.txt");
print "DONE!<br><br>\n";
print "./ enthält:<br><br>\n\n";
print exec("ls");
print "</body></html>";
#!/usr/bin/perl
Du solltest dir auch die Warnungen anzeigen lassen.
print "Content-type: text/html\n\n";
use CGI;
use strict;
my $cgi = CGI->new();
Warum bindest du das über 200KB grosse CGI Modul ein und verwendest es dann nicht?
print $cgi->header(), $cgi->start_html();
print "<html><head><title></title></head><body>";
exec("mkdir ./bleh/foobar");
exec("cp ./do.pl ./bleh/foobar");
exec("chmod -R 777 ./bleh/foobar");
exec("touch ./bleh/foobar/file.txt");
exec("chmod 755 ./bleh/foobar/file.txt");
Dafür gibt es Perlbefehle (du kennst perldoc?) und Module.
Struppi.
Benutz statt exec() mal lieber system()
übrigens, für das erstellen eines verzeichnisses und die rechteänderung würde ich keinesfalls system() oder exec() benutzen, nimm stattdessen lieber die perl eigene syntax. Für das kopieren hat perl leider nix im Programm, aber da würde ich Dir File::Copy empfehlen.
mkdir "./bleh/foobar";
system("cp ./do.pl ./bleh/foobar");
chmod 777, "./bleh/foobar";
system("touch ./bleh/foobar/file.txt");
chmod 755, "./bleh/foobar/file.txt";
Wie gesagt, für das kopieren empfehle ich aber File::Copy, Doku gibts auf cpan.
Solltest Du wegen Verzeichniserstellung ein Rechteproblem haben hast Du 'ne Info im error_log vom apache.
Grundsätzlich bin ich kein Fan von exec() oder system() denn dadurch wird das Script plattformabhängig!