Avatar billede runem74 Nybegynder
05. november 2002 - 21:23 Der er 4 kommentarer og
1 løsning

aktivere perl cgi-script fra html

Hej,

Jeg har fundet nedstående perl-cgi counter.

I følge en besked som fulgte med skal jeg gøre følgende for at aktivere scriptet:

The script may be called in one of two ways
  <!--#exec cgi="/cgi-bin/counter/counter.cgi"-->
  <!--#include virtual="/cgi-bin/counter/counter.cgi"-->
Make sure the calling page ends in the .shtml extension.

Jeg har så lagt den ene af disse liner ind foran mit html kode og så ændret file taget for mit html dokument fra .htm til .shtml. Problemet er at det ikke virker. Er der nogen der har en ide?

Mange hilsner,

Rune

#!/usr/local/perl-5.8.0
#
# Copyright IMAX Scripts 2002 All Rights Reserved
#
# Visit IMAX at http://www.imaxscripts.com
#
# This program is copyrighted software. It may not be modified, distributed or sold
# without prior written consent from the copyright holder.
#
# Any use of this script is entirely at the risk of the user. No liability will be
# accepted by the author.
#

use Fcntl qw/:flock/;

$site_counter = 0; # Set to 1 for site counter or 0 for page counter

print "Content-type: text/html\n\n";

if ($site_counter) {
    site_counter();
}
else {
    page_counter();
}

sub site_counter {
    open( FILE, "+<count.txt" ) or die "Cannot open count.txt: $!\n";
    flock( FILE, LOCK_EX )
      or die "Cannot get exclusive file access to count.txt: $!\n";
    ($count) = <FILE>;
    $count++;
    seek FILE, 0, 0;
    truncate FILE, 0;
    print FILE $count;
    close(FILE);
    print $count;
    exit(0);
}

sub page_counter {
    open( FILE, "+<count.txt" ) or die "Cannot open count.txt: $!\n";
    flock( FILE, LOCK_EX )
      or die "Cannot get exclusive file access to count.txt: $!\n";
    while (<FILE>) {
        if (/^$ENV{DOCUMENT_URI}\|/) {
            ( $page, $count ) = split ( /\|/, $_ );
            $count++;
            $known_page = 1;
            $line = join ( "\|", $page, $count );
            push ( @data, "$line\n" );
            next;
        }
        push ( @data, $_ );
    }
    if ( !$known_page ) {
        push ( @data, "$ENV{DOCUMENT_URI}\|1\n" );
        $count = 1;
    }
    seek FILE, 0, 0;
    truncate FILE, 0;
    foreach $data (@data) {
        print FILE $data;
    }
    close(FILE);
    print $count;
    exit(0);
}
Avatar billede djernaes Nybegynder
05. november 2002 - 21:30 #1
Du skal have en server der understøtter SSI (Server Side Include) ... og den skal være konfigureret til at bruge det.

Hvis du har en Apache server, undersøg om .shtml er enabled:

AddType text/html .shtml
AddHandler server-parsed .shtml

Hvis ikke du bruger Apache, saa er det paa tide at starte :-)
http://httpd.apache.org/

Martin
Avatar billede runem74 Nybegynder
05. november 2002 - 22:06 #2
Serveren understøtter perl så jeg tror at det er fordi .shtml ikke er enabled.

Jeg har kontaktet administratoren for at få dette afklaret. Jeg går udfra at det ikke er muligt for mig at undersøge dette?

Mange tak,

Rune
Avatar billede mahler Nybegynder
05. november 2002 - 22:37 #3
Scriptet kræver to ting for at kunne fungere.

At du kan køre perl som cgi-scripts og at du har SSI slået til.

Prøv lige at kalde dit script med counteren direkte og se om det fungerer. Det kan du gøre inden du får svar på om SSI er slået til eller ej.

Hvis du ikke har slået SSI til (eller ikke kan), så kan du forholdsvist enkelt skrive scriptet om, så det laver en Javascript funktion, der udskriver dit count i stedet.

Det burde gøres noget i stil med (i dit HTML-dokument):
<script type="text/javascript"
  src="http://min_server/cgi-bin/counter/counter.cgi">
</script>
<script type=text/javascript>
printCount();
</script>

og så lade cgi-filen genere et output der ligner:

<html>
<script type="text/javascript>
function printCount () {
  document.write($data);
};
</script>
</html>

hvor $data er variablen fra scriptet i dit spørgsmål...
Avatar billede runem74 Nybegynder
06. november 2002 - 16:35 #4
Jeg har lige fået at vide at SSI ikke er slået til og at det heller ikke vil blive sluttet til. Jeg har forsøgt at bruge dit javascript. Jeg kunne ikke få det til at virke (jeg er heller ikke nogen haj til javascript):

<script type="text/javascript"
  src="http://www.bio.auc.dk/cgi-bin/counter.cgi">
</script>
<script type=text/javascript>
printCount();
</script>

<html>
<script type="text/javascript>
function printCount () {
  document.write($data);
};
</script>
</html>


<HTML>
<HEAD>
<TITLE>Test</TITLE>
</HEAD>
<BODY>
<FONT SIZE=2><P>Test page</P>
</BODY>
</HTML>

Mange hilsner,

Rune
Avatar billede mahler Nybegynder
06. november 2002 - 17:04 #5
Nu var det jo ikke meningen, at jeg ville lave det hele, men la' da gå....

Perl-scriptet:

#!/usr/local/bin/perl
#use CGI::Carp qw(fatalsToBrowser);
use Fcntl qw/:flock/;

$site_counter = 0; # Set to 1 for site counter or 0 for page counter
my $tmp = 1;

if ($site_counter) {
    $tmp = site_counter();
}
else {
    $tmp = page_counter();
}

print "Content-type: application/x-javascript\n\n";
print "function printCount(){\n";
print "  document.write($tmp);\n}\n";

sub site_counter {
    open( FILE, "+<count.txt" ) or die "Cannot open count.txt: $!\n";
    flock( FILE, LOCK_EX )
      or die "Cannot get exclusive file access to count.txt: $!\n";
    ($count) = <FILE>;
        print STDERR "Count from file: $count\n";
    $count++;
    seek FILE, 0, 0;
    truncate FILE, 0;
    print FILE $count;
    close(FILE);
    return $count;
}

sub page_counter {
    open( FILE, "+<count.txt" ) or die "Cannot open count.txt: $!\n";
    flock( FILE, LOCK_EX )
      or die "Cannot get exclusive file access to count.txt: $!\n";
    while (<FILE>) {
        if (/^$ENV{DOCUMENT_URI}\|/) {
            ( $page, $count ) = split ( /\|/, $_ );
            $count++;
            $known_page = 1;
            $line = join ( "\|", $page, $count );
            push ( @data, "$line\n" );
            next;
        }
        push ( @data, $_ );
    }
    if ( !$known_page ) {
        push ( @data, "$ENV{DOCUMENT_URI}\|1\n" );
        $count = 1;
    }
        print STDERR "Count from file: $count\n";
    seek FILE, 0, 0;
    truncate FILE, 0;
    foreach $data (@data) {
        print FILE $data;
    }
    close(FILE);
        print STDERR "Count from file: $count\n";
    return $count;
}

Hvis det giver fejl, så prøv at fjerne #'et fra linje 2.

HTML-dokumentet:

<html>
<head>
<script type="text/javascript" src="http://www.xcom.dk/count.cgi"> </script>
</head>
<body>
<script type=text/javascript>
printCount();
</script>
</body>
</html>

Husk at webserveren skal have adgang til en fil, der hedder count.txt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester