tag:forum.selfhtml.org,2005:/self Counter in Perl. – SELFHTML-Forum 1999-05-12T13:22:00Z https://forum.selfhtml.org/self/1999/may/11/counter-in-perl/16945#m16945 Daniel 1999-05-11T16:17:00Z 1999-05-11T16:17:00Z Counter in Perl. <p>Hallo Leute!</p> <p>weil mein Counter (von Goweb) in letzter Zeit nicht gerade zuverlässig ist, habe ich mich entschlossen, ein Counter in PERL zu schreiben. Soweit so gut. Auf meinem Rechner (Win95) läuft es einwandfrei. Auf meiner Site (Apache unter Unix) läuft es leider nicht. Ich habe auch die nötigen Sachen angepaßt und die Zugriffsrechte auch (ich hab's mit 777 und 755 probiert).<br> Nachfolgend mein Source-Code. Der Counter wird korrekt angezeigt aber. Aber die Inkrementierung findet nicht statt und in der Protokoll-Datei steht auch nichts :o(</p> <p>Vielen Dank im voraus<br> Daniel</p> <p>PS: Verbesserungsvorschläge sind auch willkommen :o)</p> <p>#!/usr/bin/perl<br> $BASEDIR="/usr/www/htdocs/userid"; #natürlich habe ich meine userid hier angegeben *g*</p> <p>#eine Datei namens count.txt wird geöffnet und eingelesen. Dadrin ist der aktuelle Counterstand #abgespeichert.<br> @zeilen = ("");<br> open(COUNT, "<$BASEDIR/ml/count.txt");<br> while(<COUNT>)<br> {<br> push(@zeilen,$_);<br> }<br> close(COUNT);</p> <p>$counter = ++$zeilen[1]; #counter wird inkrementiert<br> @zeichen = split(//,$zeilen[1]); #Der Counterwert wird gesplittet (Counter besteht aus 4  Ziffern und wird in 4 Teilen geteilt)</p> <p>#Erzeugung von HTML-Code<br> $grafik[0] = "<img src=../ml/digits/$zeichen[0].gif>";<br> $grafik[1] = "<img src=../ml/digits/$zeichen[1].gif>";<br> $grafik[2] = "<img src=../ml/digits/$zeichen[2].gif>";<br> $grafik[3] = "<img src=../ml/digits/$zeichen[3].gif>";</p> <p>#Counter-Datei wird mit dem neuen Wert überschrieben.<br> open(COUNT2, ">$BASEDIR/ml/count.txt");<br> print COUNT2 $counter;<br> close(COUNT2);</p> <p>#ich will die Zugriffe mitprotokollieren, deshalb Ermittlung der Zeit.<br> $date=localtime(time);  <br> ($day, $month, $num, $time, $year) = split(/\s+/,$date);</p> <p>#Protokolldatei. Mitprotokolliert werden Besuchernr. - Datum und IP + Host.<br> open(STAT, ">>$BASEDIR/ml/zugriff.dat");<br> print STAT "$counter - $num. $month $time - $ENV{'HTTP_USER_AGENT'} - $ENV{'REMOTE_ADDR'} - $ENV{'REMOTE_HOST'}\n";<br> close(STAT);</p> <p>#jetzt wird die Datei mit dem Counter erzeugt (sie befindet sich in einem Frame)<br> print <<__END_OF_TEXT__;<br> Content-type: text/html</p> <p><head><br> <link rel=stylesheet type="text/css" href="../ml/style.css"><br> </head><br> <body bgcolor="#ADCDFF"><br> <center><br> <h3><br> Sie sind Besucher Nr.:<br> </h3><br> <br><br> $grafik[0]$grafik[1]$grafik[2]$grafik[3]<br> </center><br> </body></p> <p>__END_OF_TEXT__</p> https://forum.selfhtml.org/self/1999/may/11/counter-in-perl/16950#m16950 Frank Schönmann 1999-05-11T16:58:00Z 1999-05-11T16:58:00Z Counter in Perl. <p>hi!</p> <blockquote> <p>weil mein Counter (von Goweb) in letzter Zeit nicht gerade zuverlässig ist, habe ich mich<br> entschlossen, ein Counter in PERL zu schreiben. Soweit so gut. Auf meinem Rechner<br> (Win95) läuft es einwandfrei. Auf meiner Site (Apache unter Unix) läuft es leider nicht. Ich<br> habe auch die nötigen Sachen angepaßt und die Zugriffsrechte auch (ich hab's mit 777 und<br> 755 probiert).</p> </blockquote> <p>Warum glaubt jeder, mit 777 würde es funktionieren? Wenn der Server richtig konfiguriert ist, sollte es damit erst recht nicht funktionieren.</p> <p>Zum Source: ich habe nur mal schnell drübergeschaut, aber keinen Fehler gefunden. Allerdings ist das Skript teilweise wirklich _sehr_ umständlich geschrieben. Hat dein Skript denn überhaupt Zugriffsrechte auf die Datei, die es überschreiben will?</p> <p>bye, Frank!</p> https://forum.selfhtml.org/self/1999/may/11/counter-in-perl/16946#m16946 Cheatah 1999-05-11T17:59:00Z 1999-05-11T17:59:00Z Counter in Perl. <p>Hi,</p> <blockquote> <p>weil mein Counter (von Goweb) in letzter Zeit nicht gerade zuverlässig ist, habe ich mich entschlossen, ein Counter in PERL zu schreiben. Soweit so gut. Auf meinem Rechner (Win95) läuft es einwandfrei. Auf meiner Site (Apache unter Unix) läuft es leider nicht. Ich habe auch die nötigen Sachen angepaßt und die Zugriffsrechte auch (ich hab's mit 777 und 755 probiert).</p> </blockquote> <p>755 muß reichen. Ist der Server denn für CGI konfiguriert? Laufen andere CGIs, ist also z.B. das cgi-bin auch richtig ge-chmod-et?</p> <blockquote> <p>#!/usr/bin/perl</p> </blockquote> <p>Ich hoffe mal, das stimmt :-)</p> <blockquote> <p>@zeilen = ("");<br> open(COUNT, "<$BASEDIR/ml/count.txt");<br> while(<COUNT>)</p> </blockquote> <p>»»  {<br> »»  push(@zeilen,$_);<br> »»  }</p> <blockquote> <p>close(COUNT);</p> </blockquote> <p>open(COUNT,"<$BASEDIR/ml/count.txt");<br> $counter = <COUNT>;<br> close(COUNT);</p> <p>Du willst doch nur eine Zeile drinhaben, oder? ;-) Außerdem solltest Du auch hier auf die richtigen Rechte achten. Alle Dateien und Verzeichnisse müssen (glaube ich) mindestens 644 haben, das Verzeichnis evtl. auch 666.</p> <blockquote> <p>$counter = ++$zeilen[1]; #counter wird inkrementiert</p> </blockquote> <p>Die erste Zeile 1 der Datei wäre $zeilen[0]!</p> <blockquote> <p>@zeichen = split(//,$zeilen[1]); #Der Counterwert wird gesplittet (Counter besteht aus 4  Ziffern und wird in 4 Teilen geteilt)</p> <p>#Erzeugung von HTML-Code<br> $grafik[0] = "<img src=../ml/digits/$zeichen[0].gif>";<br> $grafik[1] = "<img src=../ml/digits/$zeichen[1].gif>";<br> $grafik[2] = "<img src=../ml/digits/$zeichen[2].gif>";<br> $grafik[3] = "<img src=../ml/digits/$zeichen[3].gif>";</p> </blockquote> <p>for ($i=0; $i<=3; $i++) { $grafik[$i] = "...$zeichen[$i].gif>"; }</p> <blockquote> <p>#Counter-Datei wird mit dem neuen Wert überschrieben.<br> open(COUNT2, ">$BASEDIR/ml/count.txt");<br> print COUNT2 $counter;<br> close(COUNT2);</p> </blockquote> <p>Du kannst ruhig COUNT wiederverwenden ;-)</p> <p>»»  <link rel=stylesheet type="text/css" href="../ml/style.css"></p> <p>Nimm lieber 'nen absoluten Pfad. Wenn Du den richtigen relativen findest, geht das natürlich auch :-)</p> <p>Einen richtigen Fehler konnte ich allerdings auch nicht finden. Hast Du die Datei im ASCII-Modus übertragen? Was sagt perl -c script.pl?</p> <p>Cheatah</p> https://forum.selfhtml.org/self/1999/may/11/counter-in-perl/16947#m16947 Jörk Behrends 1999-05-12T08:20:00Z 1999-05-12T08:20:00Z Counter in Perl. <p>Hallo auch!</p> <blockquote> <blockquote> <p>@zeilen = ("");<br> open(COUNT, "<$BASEDIR/ml/count.txt");<br> while(<COUNT>)<br> »»  {<br> »»  push(@zeilen,$_);<br> »»  }<br> close(COUNT);<br> »»<br> $counter = ++$zeilen[1]; #counter wird inkrementiert</p> </blockquote> <p>Die erste Zeile 1 der Datei wäre $zeilen[0]!</p> </blockquote> <p>In diesem Falle war es aber schon richtig!<br> Das Array wurde mit ("") initialisiert - hat also als Element 0 einen leeren String.<br> Die Zeilen der Datei werden per push hinten an das Array angefügt, so daß<br> die erste Zeile der Datei auch das Element Nummer 1 im Array ist. Man könnte<br> es hier so sehen, daß sich zwei Fehler gegenseitig aufgehoben haben ...</p> <p>Einen Fehler, der das generelle Versagen des Skriptes bedeutet konnte ich aber<br> auch nicht erkennen. Wie äußert sich denn der Fehler ???</p> <p>Jörk</p> https://forum.selfhtml.org/self/1999/may/11/counter-in-perl/16948#m16948 Daniel 1999-05-12T11:52:00Z 1999-05-12T11:52:00Z Counter in Perl. <blockquote> <p>Einen Fehler, der das generelle Versagen des Skriptes bedeutet konnte ich aber<br> auch nicht erkennen. Wie äußert sich denn der Fehler ???</p> <p>Jörk</p> </blockquote> <p>hi!</p> <p>also die Seite wird korrekt dargestellt (siehe http://www.marsline.de/cgi-marsline/counter.cgi )<br> nur der counter wird nicht inkrementiert und die Protokolldatei wird auch nicht beschrieben. Ich habe die Zugriffsrechte überprüft. Außerdem biete ich auf meiner Site die Möglichkeit Postkarten zu verschicken (dabei werden ebenfalls Dateien beschrieben) und es funktioniert einwandfrei! Das ist was ich nicht nachvollziehen kann :o(</p> <p>Daniel</p> https://forum.selfhtml.org/self/1999/may/11/counter-in-perl/16949#m16949 Jörk Behrends 1999-05-12T13:22:00Z 1999-05-12T13:22:00Z Counter in Perl. <p>Hi Daniel!</p> <blockquote> <p>also die Seite wird korrekt dargestellt (siehe http://www.marsline.de/cgi-marsline/counter.cgi )<br> nur der counter wird nicht inkrementiert und die Protokolldatei wird auch nicht beschrieben. Ich habe die Zugriffsrechte überprüft. Außerdem biete ich auf meiner Site die Möglichkeit Postkarten zu verschicken (dabei werden ebenfalls Dateien beschrieben) und es funktioniert einwandfrei! Das ist was ich nicht nachvollziehen kann :o(</p> </blockquote> <p>Klingt aber in diesem Fall wirklich sehr nach Zugriffsrechten ...<br> Beim Überprüfen der Rechte solltest Du auch beachten, daß die Skripte meißt von einem<br> anderen User ausgeführt werden, als Dein account. Dieser User muß dann natürlich<br> entsprechenden Zugrif sowohl auf die Dateien als auch auf das Verzeichnis haben.</p> <p>Könnt' ja helfen ...<br> Jörk</p>