Hi,
Web-Server ist Apache/1.3.6 (Unix) mit mod_perl. Letztens bekam ich die Antwort, daß ich unsauber programmiert habe.
von mir, stimmt's? ;-)
Dann hab ich Dich sicher auch auf http://perl.apache.org/ hingewiesen. Dort steht, was Du beachten mußt.
Bin Perl-Anfänger und habe leider nichts verdächtiges gefunden.
Dann will ich mal sehen, ob ich etwas verdächtiges finde:
#!/usr/bin/perl
Aha.
#!/usr/bin/perl -w
use strict;
Dann findet Perl nämlich die verdächtigen Dinge für Dich.
require "cgi-lib.pl";
Das ist (hoffnungslos) veraltet.
use CGI ':standard'; # und Script natürlich darauf anpassen
@Zeilen = ("");
my @Zeilen; # es empfiehlt sich btw., kleine Variablennamen zu verwenden, also @zeilen. Nicht weil es syntaktisch besser wäre oder so, sondern es hat sich einfach eingebürgert. Macht Quelltexte lesbarer.
#Seitenkopf ausgeben
print header;
...
Was immer diese drei Punkte symbolisieren, wirst Du vermutlich in einem
print start_html;
Konstrukt durchführen. Siehe perldoc CGI.
if (open(INPUT, "<../files/".$in{'1'}.$in{'2'}.".txt")) {
open INPUT, '/absolute/path/to/files/'.param('1').param('2').'.txt' or die "Kann Datei nicht oeffnen: $!";
»» while(<INPUT>) {
push(@Zeilen,$_);
»» }
@Zeilen = <INPUT>;
»» close(INPUT);
Die Zeile bleibt :-)
if(open(OUTPUT,">../files/blk".$in{'1'}.$in{'2'}.".txt")==false) {
blk? So wie "block"? Ich glaube, Du möchtest
perldoc -f flock
perldoc perlopentut
lesen. Das open-Konstrukt bitte wie oben.
»» print OUTPUT "<p >$in{'NAME'} (<a href="mailto:$in{'eMail'}">$in{'eMail'}</a>) schrieb
$in{...} jeweils durch param(...) ersetzen.
»» for(@Zeilen) { print OUTPUT "$_\n" }
Moment, @Zeilen hast Du doch gerade aus einer Datei gelesen, oder? Tja, dann verdoppelst Du gerade die Zahl der Newlines :-)
»» close(OUTPUT);
close OUTPUT or die "Kann Datei nicht schliessen: $!"; # bei Schreibzugriffen immer!
»» print "<div align="center">\n";
»» print "</div>\n";
Naja, nicht alles muß man mit CGI.pm ausgeben. Könnte man aber :-)
print "</body></html>\n";
print end_html;
Tja, also, pauschal betrachtet... Gut, ich habe früher auch solche (und schlimmere) Scripts geschrieben, aber glaube mir - heute ärgere ich mich, wenn ich mal eins warten möchte :-)
Cheatah