Newsgroup: it.comp.lang.perl
Titolo: Chi mi aiuta ?

Ciao a tutti, č la prima volta che scrivo vista la mia scarsissima
competenza in materia.
Mi chiedevo se qualcuno saprebbe risolvere il mio problema: ho scaricato il
programma di un contatore di downloads che vorrei inserire nel mio sito, ma
il server mi dice "errore !".
Non so se ho messo bene le mani dove necessario... ecco il codice (la prima
riga dovrebbe essere giusta cosě):
#!/usr/bin/perl -wT
############################################################################
##
# Countdown                    Version 1.0
#
# Copyright 1998 Edward Preble 
in...@datatrendsoftware.com
#
# Created 11/30/98             Last Modified 12/01/98
#
# Datatrend Softeware          
http://www.datatrendsoftware.com/cgi.html
#
############################################################################
##
# This script will do the following:
#
# 1. Is activated by a link,
#
#    "
http://www.site.com/scripts/countdown.cgi?file.anything
"
#
# 2. Will add a count to "countdown.log", for the proper file.
#
# 3. Will auto-forward to "file.anything" for download.
#
# 4. The interface is seamless, no user prompts.
#
############################################################################
##
# COPYRIGHT NOTICE
#
# Copyright 1998 Edward Preble  All Rights Reserved.
#
#
#
# This script is free.  You may use and modify this script as you please.
#
# Do not remove this header, as it is the only thing that gives me credit
#
# for my work in writing this code. If you wish to sell this code, you
#
# must obtain permission from the authors first.
#
#
#
# Scripts provided by Datatrend Software are supplied "as-is". You agree
#
# to indemnify the author's from any liability that may arise from the use
#
# of this script. We will provide support for bugs and operation issues,
#
# but NOT for installation. Sorry for that, but it is just too time
#
# consuming and the volume of requests is truly staggering.
#
#
#
# Obtain permission before redistributing this software over the Internet or
#
# in any other medium. In all cases copyright and header must remain
intact.#
############################################################################
##
#
#
# You must modify the the location of PERL in the first line above to match
#
# the location on your server. Your system admin must help you with this.
#
# You must also modify the following variables to match your preferences.
#
# This is the counter log filename
$Counter = 'countdown.log';
# This is the demo file that will be downloaded
$DownloadFileDir = '
http://studenti.ing.uniroma1.it/~pirozzo/italia.zip
';
##########################################################
# No changes need to be made after these lines
##########################################################
$File = $ENV{'QUERY_STRING'};
$DownloadFile = "$DownloadFileDir/$File";
# Add hit to main counter
open (CNT,"+<$Counter") || &endIt;
flock (CNT,2); seek (CNT,0,0);
@infile = <CNT>;
# This will put the hits in order from max to min for each file added
$record = 0;  # Starting record in the log is always 0
$correctspot = 'N'; # Tells script if this record is the one that was hit
# Proceeds as long as the record number is less than the total
# number of records in the file and the correct record hasn't been found
yet.
while (($correctspot eq 'N') && ($record <= $#infile))
{ ($count,$filename,$eol) = split(/\|/,$infile[$record]);
  if ($filename eq $File)  #if this is the right record, hit it, trip
correctspot
    {$count++;
    $infile[$record] = join ("\|",$count,$filename,"\n");
    $correctspot = 'Y';
    }
  $record++;
}
if ($correctspot eq 'N')
{ $count = 1;
  $newrecord = join ("\|",$count,$File,"\n");
  push @infile, $newrecord;
}
@outfile = sort {($b =~ /(\d+)/)[0] <=> ($a =~ /(\d+)/)[0]} @infile;
seek (CNT,0,0);
print (CNT @outfile);
truncate (CNT,tell(CNT));
close (CNT);
print "Content-type: text/html\n";
print "Location: $DownloadFile\n\n";
sub endIt # exit on error
{ exit;
} # end endIt
Grazie !!!
Ciao
--== Pirozzo ==--
http://www.listen.to/RadioSegugio
  Il motore di ricerca delle frequenze FM
http://www.welcome.to/DuraLex
      Leggi fondamentali sul magico mondo
femminile
# Icq 39050880
news://it.fan.radio-deejay
news://it.fan.musica.queen
coming soon news://it.fan.radio.105 (aiutatemi a crearlo, scrivetemi !)

 riga dovrebbe essere giusta cosě):
Cmq i classici problemi sono dati da:
1- ftp dello script sul server in formato binario (ti aggiunge ^M alla fine
di ogni riga)
2- permessi dello script sul server (deve essere eseguibile: chmod 755)
queste sono le prime cose da verificare....
ciau
Mario Protto
ma...@net4u.it
www.net4u.it

...


$Counter = 'countdown.log';
Per una questione di permessi questo file va prima creato a mano. Se non
l'hai gia` fatto devi dare:
touch countdown.log
chmod 666 countdown.log
	Michele.
-- 
Michele Beltrame
mi...@io.com
http://www.io.com/~mick/

L'errore di cui il server si lamenta sembra abbastanza generico, non mi pare
che abbia dato alcun codice di errore...
Ho trovato nel codice (o si chiama listato ? o sorgente ?) un'espressione
che mi sembra sospetta :
($record <= $#infile)
è giusto che ci siano sia il dollaro che il cancelletto ? Tra l'altro poco
prima, nel testo, ho notato l'uso della variabile (stringa ?)
@infile
ho forse trovato l'errore ?
Grazie a chi mi sta aiutando. Scusate se non sono molto preciso, ma sono
veramente un dilettante !


@infile
Questo non e` un errore: $#infile torna l'indice dell'ultimo elemento
dell'array, cioe' il numero di elementi - 1.


Grazie mille per il suggerimento !
Farò un po' di esperimenti ma penso proprio che tu abbia individuato il
problema (questo spiegherebbe anche altri miei problemi).
In cosa consiste il comando "touch" (da casa uso WS_FTP LE con Windows 95 e
non Unix nè Linux) ? Il file countdown.log l'ho già creato e trasferito,
comunque.
Un'altra cosa: in che senso bisogna intendere l'istruzione
# This is the demo file that will be downloaded
?
In altre parole $DownloadFileDir è una directory o un file ? Il nome del
file da scaricare dovrebbe essere passato allo script come un parametro
chiamando lo script stesso con il link countdown.cgi?italia.zip (nel mio
caso). Giusto ? Quindi nel codice dello script il nome "italia.zip" non
dovrebbe proprio comparire, dico bene ?
Ciao
--== Pirozzo ==--
http://www.listen.to/RadioSegugio
  Il motore di ricerca delle frequenze FM
http://www.welcome.to/DuraLex
   Leggi fondamentali sul magico mondo
femminile
# Icq 39050880
news://it.fan.radio-deejay
news://it.fan.musica.queen
coming soon news://it.fan.radio.105 (aiutatemi a crearlo, scrivetemi !)
|># This is the counter log filename
|>$Counter = 'countdown.log';
|
|Per una questione di permessi questo file va prima creato a mano. Se non
|l'hai gia` fatto devi dare:
|
|touch countdown.log
|chmod 666 countdown.log
|


...
