Willkommen im #Neuland
Login wie bei quake.ingame.de zuvor, die Passwörter aus der alten Datenbank wurden aber gelöscht - einmal hier neu anfordern.
Wer seine E-Mail-Adresse nicht mehr hat oder kennt, bitte eine Nachricht mit Infos schicken o. im Discord melden.

PQ Discord Server: #planetquake                                                                                                                                         Spenden? Hier entlang!

[perl] was ist da falsch?

Forum für alles rund ums Coden und web.design - HTML, XHTML, XML, CSS, PHP, ASP, Zugriffsrechten, Mods uvm.
Antworten
csm

[perl] was ist da falsch?

Beitrag von csm »

[fp]do {

print " Location der httpd.conf: ";
$apache_httpdconf = <STDIN>;
chop $apache_httpdconf;

if ($apache_httpdconf !~ /".*?"httpd.conf/ || !-e "$apache_httpdconf") {
print "\n";
print " \033[31;1mhttpd.conf nicht gefunden!\033[0m\n";
print "\n";
print $apache_httpdconf;
}

} until ($apache_httpdconf =~ /".*?"httpd.conf/ && -e "$apache_httpdconf");[/fp]
kId3

Beitrag von kId3 »

die sprache, s.:

http://www.python.org/
palandir

Beitrag von palandir »

lol @ kId.

Der Code ist ja grausam...
Also du willst solange den Pfad zur httpd.conf von STDIN abfragen, bis der User das richtige eingegeben hat?

Code: Alles auswählen

my $httpdconf;
do {
    print "Location der httpd.conf: ";
    chomp($httpdconf = <STDIN>);
    unless (-e $httpdconf) {
        print "Nicht gefunden, bitte Eingabe wiederholen!\n";
        undef $httpdconf;
    }
} until (defined $httpdconf);
Ein Fehler bei dir lag übrigens schon mal in deinen Regex-Patterns. Ein "." steht für ein beliebiges Zeichen, wenn du einen Punkt meinst, musst du ihn escapen ("\.").
Und das ".*?" ist mir unerklärlich (total sinnlos?).

Und dass überprüft wird, ob die File auch "httpd.conf" heißt, finde ich nicht gut, evtl. heißt sie ja anders auf dem System. Der Test, ob die Datei existiert ("-e"), sollte ausreichen.
csm

Beitrag von csm »

Original erstellt von ibt.palandir
lol @ kId.

Der Code ist ja grausam...
Also du willst solange den Pfad zur httpd.conf von STDIN abfragen, bis der User das richtige eingegeben hat?

Code: Alles auswählen

my $httpdconf;
do {
    print "Location der httpd.conf: ";
    chomp(my $httpdconf = <STDIN>);
    unless (-e $httpdconf) {
        print "Nicht gefunden, bitte Eingabe wiederholen!\n";
        undef $httpdconf;
    }
} until (defined $httpdconf);
Ein Fehler bei dir lag übrigens schon mal in deinen Regex-Patterns. Ein "." steht für ein beliebiges Zeichen, wenn du einen Punkt meinst, musst du ihn escapen ("\.").
Und das ".*?" ist mir unerklärlich (total sinnlos?).

Und dass überprüft wird, ob die File auch "httpd.conf" heißt, finde ich nicht gut, evtl. heißt sie ja anders auf dem System. Der Test, ob die Datei existiert ("-e"), sollte ausreichen. [/b]
Hm, also wer die httpd.conf bei sich umbenennt, dem ist doch nicht mehr zu helfen ;) Aber OK, danke schonmal - gleich ma testen. Mache halt selten was mit Perl, daher meine geile Syntax :D
csm

Beitrag von csm »

So, ich meinte beim RegEx wohl ".*", aber ist ja egal. Dein Code funktioniert übrigens auch nicht. Man kommt aus dieser Schleife da nicht raus. Wenn ich was eingebe, wo er die Datei nicht finden kann, kommt die Meldung "Nochmal eingeben", aber wenn ich nen Ordner angebe, wo die Datei drin liegt, oder den Ordner/Dateinamen, dann erscheint die Meldung vom Anfang (Location der httpd.conf)...
palandir

Beitrag von palandir »

Stimmt, hätte es kurz testen sollen. Am besten mit "use strict;". ;)
Habe aus Versehen $httpdconf mit "my" noch mal lokal zum do-Block deklariert, somit hat das until es nicht mehr gefunden.
Hab's editiert oben.

@Regex:
Meintest du vielleicht ".+"? ".*" steht für beliebig viele Zeichen, auch keine, demnach wäre es unsinnig das überhaupt erst anzugeben in deinem Fall. ".+" steht für mindestens ein Zeichen, damit würdest du erzwingen dass vor dem "httpd.conf" noch etwas (der Pfad) steht.
Wie auch immer, /httpd\.conf$/ passt auf einen String mit "httpd.conf" am Ende, ist wohl genau das was du wolltest, allerdings habe ich's wie gesagt nicht eingebaut weil ich bezweifle dass es eine gute Idee wäre. ;)
csm

Beitrag von csm »

Ich muss aber zwingend überprüfen, ob die Datei vorhanden ist, und ich habe noch keinen Apache gesehen, wo die config File nicht httpd.conf geheißen hat. Die Überprüfung (-e) nutzt mir wenig, weil der User dann eingeben kann, was er will (ordner oder file), und ich automatisch damit weiterarbeiten muss, obwohl es die httpd.conf gar nicht gibt...

edit: hab überprüfung nun (-f) gewählt. So muss der user auf jeden Fall eine Datei hintendran angeben :) THX
palandir

Beitrag von palandir »

Original erstellt von csm
Ich muss aber zwingend überprüfen, ob die Datei vorhanden ist, und ich habe noch keinen Apache gesehen, wo die config File nicht httpd.conf geheißen hat. Die Überprüfung (-e) nutzt mir wenig, weil der User dann eingeben kann, was er will (ordner oder file), und ich automatisch damit weiterarbeiten muss, obwohl es die httpd.conf gar nicht gibt...

edit: hab überprüfung nun (-f) gewählt. So muss der user auf jeden Fall eine Datei hintendran angeben :) THX
Naja, nimm halt mal an, dass der User eine Datei namens httpd.conf angibt die aber gar keine Apache-Config ist. ;)
Was machst du dann? So darauf verlassen kannst du dich nicht.
Das kannst du nur herausfinden indem du gut alles prüfst beim Parsen (was du ja bestimmt machst), oder, vielleicht noch besser: mit apachectl configtest <httpd.conf> kannst du testen, ob die Syntax in Ordnung ist -- das wäre sie nie, wenn die Datei keine gültige httpd.conf wäre. :)
Ein mögliches Problem dabei wäre, dass apachectl nur für root ausführbar sein könnte, ist aber normalerweise wohl nicht der Fall.
csm

Beitrag von csm »

Original erstellt von ibt.palandir


Naja, nimm halt mal an, dass der User eine Datei namens httpd.conf angibt die aber gar keine Apache-Config ist. ;)
Was machst du dann? So darauf verlassen kannst du dich nicht.
Das kannst du nur herausfinden indem du gut alles prüfst beim Parsen (was du ja bestimmt machst), oder, vielleicht noch besser: mit apachectl configtest <httpd.conf> kannst du testen, ob die Syntax in Ordnung ist -- das wäre sie nie, wenn die Datei keine gültige httpd.conf wäre. :)
Ein mögliches Problem dabei wäre, dass apachectl nur für root ausführbar sein könnte, ist aber normalerweise wohl nicht der Fall.
Naja, der User will ja was von uns installieren und wenn er falsche Angaben macht, ist das ja sein Problem ;) Ich schreib grad erstmal durch die Eingaben die Config-File und danach kommt dann das Installationsprogramm dran ;)
edgewalker

Beitrag von edgewalker »

kId: Python ist Dreck.
Original erstellt von ibt.palandir
Der Test, ob die Datei existiert ("-e"), sollte ausreichen.
Du willst, wie Cosmo schon gesagt hat, -f und nicht -e.
Original erstellt von csm
Hm, also wer die httpd.conf bei sich umbenennt, dem ist doch nicht mehr zu helfen ;)

[und später]

Naja, der User will ja was von uns installieren und wenn er falsche Angaben macht, ist das ja sein Problem ;)
Also wie jetzt? Entweder ist ihm nicht zu helfen oder es ist dir egal... :) Entscheide dich.

Im Sinne der Benutzerfreundlichkeit würde ich da übrigens noch etwas Code dranklatschen, der ein paar Standard-Pfade prüft und bei Erfolg den Pfad gleich vorschlägt.

Code: Alles auswählen

my $httpdconf;[br][br]my ( $httpdconf_default ) = ( grep( -f, qw[[br]	/etc/httpd/httpd.conf[br]	/etc/apache/httpd.conf[br]	/etc/apache2/httpd.conf[br]	/var/www/conf/httpd.conf[br]	/usr/local/httpd/conf/httpd.conf[br]	/usr/local/apache/conf/httpd.conf[br]	/usr/local/apache2/conf/httpd.conf[br]	/usr/local/etc/httpd/conf/httpd.conf[br]] ), '' );[br][br]{[br]	print "Pfad zu httpd.conf [$httpdconf_default]: ";[br]	chomp( my $httpdconf = <STDIN> );[br][br]	$httpdconf = $httpdconf_default if not $httpdconf;[br][br]	last if -f $httpdconf;[br][br]	print "$httpdconf existiert nicht oder ist keine Datei.\n";[br]	redo;[br]}
Der Benutzer sollte niemals nach Dingen gefragt werden, die der Computer selbst herausfinden kann.
palandir

Beitrag von palandir »

Original erstellt von edgewalker
Im Sinne der Benutzerfreundlichkeit würde ich da übrigens noch etwas Code dranklatschen, der ein paar Standard-Pfade prüft und bei Erfolg den Pfad gleich vorschlägt.
Ja, das ist besser.
Antworten