PDA

Visualizza la versione completa : [PILLOLA] Elenco di pillole per la programmazione CGI e PERL


shishii
13-04-2003, 15:53
Ciao a tutti,

accogliendo un suggerimento del bravissimo Kintaro apro questo tread in evidenza nel quale si potranno inserire delle cosidette "pillole" cioè suggerimenti pratici di immediata applicazione.

Per evitare una crescita incontrollata del tread si raccomanda di non porre domande su queste pillole direttamente qui, ma di aprire un tread apposito che consentirà tutte le discussioni del caso.

Grazie a tutti.

shishii
13-04-2003, 19:56
Ciao,

uno dei problemi che spesso si pone all'istallatore di CGI è quello di avere delle informazioni sul server e sul suo settaggio. Ad esempio tra queste informazoni rientra sicuramente il path assoluto della propria directory o sito, con lo scriptino che segue è possibile averle subito, basta essere sicuri dell'indirizzo dell'interprete di PERL.
Copiate lo scriptino, salvatelo come "path.cgi" o "path.pl", uplodatelo in ASCII nella cgi-bin del server, dategli chmod 755 e richiamatelo con il browser:
http://www.tuosito.com/cgi-bin/path.cgi

visualizzerete le info che vi servono.

---------------------------
#!/usr/bin/perl

use strict;

print "Content-type: text/html\n\n";
print "<html><head><title>Dati del server</title><head><body>\n";

print "<h1 align=center>Dati del server</h1>

\n";

foreach my $key (keys %ENV) {
print "$key: $ENV{$key}
\n";
}

print "</body></html>\n\n";
exit;
-------------------------

Dopo avere salvato la pagina ricordatevi di cancellare lo script dal server per evitare che altri possano accedere alle info.

Ciao.

FreeManX
13-04-2003, 22:40
-Vi chiederete, ma cosa c'e' da ottimizzare in un if o in una condizione di terminamento di un ciclo?
Sembra banale, ma in alcune applicazioni anche il millesimo puo' essere importante.

Come ottimizzare le istruzioni decisionali (http://forum.html.it/forum/showthread.php?threadid=404380)

bye

Kintaro
14-04-2003, 17:31
Gestione file di configurazione (http://forum.html.it/forum/showthread.php?s=&threadid=435661) (sia CGI che sotto mod_perl)

FreeManX
22-05-2003, 16:38
Come installare uno script CGI.

Pensato per chi, e' la prima volta che approna nel mondo degli script CGI realizzati in perl, ecco la procedura corretta per installare e' far funzionare uno script CGI nel proprio sito.

Passo 1: Ovviamente dovete disporre di uno script da installare :D, prima di procedere leggete attentamente la guida dello script e settate i parametri necessari al corretto funzionamento, quando vi viene richiesto path assoluta del sito, potete fare riferimento alle righe di codice postate da shishii, poco piu' sopra, questa path e' contenuta nella variabile DOCUMENT_ROOT.
Inoltre controllare che lo script, per funzionare non necessiti di moduli aggiuntivi (tipo DBI per i database), se si ed avete la possibilita' di installarli (diritti di amministratore sul server) potete ho scaricarli da www.cpan.org e installarli a mano, oppure usare la il Cpan interattivo, (per eseguirlo sotto linux/unix: perl-MCPAN -eshell, sotto win32: ppm) che si occupa lui di installare e scaricare eventuali dipendenze.
C'e' da fare un altra distinzione importante, non tutti gli script sono universali, cioe' alcuni script funzionano correttamente solamente su server con sistema operativo Linux/Unix ed altri invece solo su sistemi Windows, percio' fai attenzione a procurarti una versione dello script, o compatibile con entrambi i sistemi operativi oppure dedicata al tuo sistema.

Passo 2: Ok lo script e' pronto per essere installato, aprite il vostro programma FTP, selezionate la modalita di upload ASCII (Nota questa modalita' e importantissima, per il non funzionamento dello script.).
In quale cartella copiare lo script? Generalmente, sulla maggior parte dei server esiste una cartella dedicata a questo tipo di file di nome cgi-bin in questa cartella deve essere scaricato lo script, seguendo se necessario la creazione di cartelle particolari, come riferito nella guida all'installazione dello script. (Nota, se non hai la cartella cgi-bin e' probabile che il tuo server ha la possibilita' di eseguire lo script da qualsiasi posizione, percio' non ti preoccupare creati una cartella tua (ad esempio mioscript) e scarica li il tuo script.

Passo 3: Adesso che hai copiato tutti i file sul server e' venuto il momento di settare i permessi. Il settaggio dei permessi e' necessario solamente se il tuo server ha sistema operativo Linux, altrimenti no.
Che cosa sono i permessi? Sono le regole di accesso al file, cioe' puoi dire che una data classe di utenza non ha acesso al file (per leggerlo, scriverlo o eseguirlo).
In linux/unix ogni file possiede 3 gruppi di permessi: il primo gruppo riguarda il proprietario del file, il secondo gruppo riguarda il gruppo di appartenenza del file, e il terzo sono tutti gli altri utenti. Ad ognuno di questi tre puoi settare i permessi di: lettura, scrittura e esecuzione.
Per settare tali permessi, trova la funzione nel suo client FTP (cerca nome: chmod, permission) e settali come segue:
1. per i file .cgi o .pl Lettura/Scrittura/Esecuzione al proprietario del file, Lettura/Esecuzione al gruppo e agli altri utenti.
2. per i file di testo (.txt, .dat, etc) fissa i permessi di Lettura/Scrittura per tutti e tre i gruppi.
- Comunque controlla sempre la guida di installazione delle script per vedere se necessita di qualche particolarita'.

Passo 4: Il tuo script e' pronto all'uso.


Mi sembra si non essermi dimenticato di niente & soprattuto di non averle sparate grosse :stordita: .

Buon divertimento.

shishii
25-05-2003, 10:25
Ciao,

questa pillola illustra la incredibile potenza del PERL nel settore dell'elaborazione di file di testo:

Supponiamo di avere uno o più file di testo, ad esempio log da svariati mega, e di volere eliminare in maniera sicura e veloce delle righe che contengono una certa stringa, con i metodi normali si deve aprire il file trovare le stringhe eliminarle e riscrivere o salvare il file, invece con PERL basta digitare dal prompt:

> perl -ne "print unless /stringa/" -i /path/nome_file

e come per magia vi ritroverete con il file pulito da tutte le righe che contengono "stringa".

Come funziona?
usa i potentissimi switch PERL.

-e : dice che ciò che segue va inteso come comandi perl da eseguire direttamente.

-n : dice che il codice all'interno di " " va eseguito come se fosse stato scritto:
while (<>) {codice}
a sua volta <> dice di usare il file la cui identificazione proviene dallo STDIN

-i : dice che il file indicato va aperto in lettura e scrittura e passato all'interprete.

Ciao.

daniele_dll
08-06-2003, 18:15
mmm interessante...xo un consiglio vi do :)

invece di scrivere qui effettivamente il testo della pillola mettetelo in trhead a parte senno 1 che cerca si dispera :D

qui mettete semplicemente la lista dei trhread delle pillole linkati :D

cmq interessanti :)

shishii
05-07-2003, 18:01
Ciao,

come sapete in alcuni casi se si cerca di scaricare un file avente un estensione associata a qualche applicazione esecutiva lo stesso viene aperto. Ciò a volte è più un problema che un vantaggio. Se si vuole forzare lato server il download di un file, indipendentemente dal settaggio del client, si può usare un particolare header http, come segue. Si fa presente che il codice seguente è funzionante ma solo indicativo in quanto *NON* contiene alcun meccanismo di sicurezza.
----------------------------------
#!/usr/bin/perl

use strict; # Ormai oggi è quasi obbligatorio.
use CGI; # semplifica la lettura dell'input

my $dir = "/var/www/html"; # directory che contiene i file da scaricare

my $q = new CGI;

my $file = $q->param('file'); # raccoglie il nome file

my $size = (-s "$dir/$file"); # ne calcola la dimensione

my $buf;

# segue l'header http necessario per impedire l'apertura
# del file
print "Content-type: octet/stream\n";
print "Content-length: $size\n";
print "Content-disposition: attachment; filename=$dir/$file\n\n";

open (FILE, "<$dir/$file");
# il file viene letto e poi scritto sullo STOUT
# differenziando i file binari da quelli ASCII
if (-B "$dir/$file") {
binmode FILE;
while (read FILE, $buf, 1024) {
print $buf;
}
} else {
while (<FILE>) {
print;
}
}
close FILE;

exit;
-----------------------------

basterà inserire nella pagina un link di questo tipo:

scarica (http://www.tuosito.com/cgi-bin/forza.pl?file=nome_file.estensione)

RICORDATEVI di implementare le necessarie sicurezze per evitare che un lamerazzo vi scarichi il file delle password.

Ciao.

FreeManX
27-08-2003, 21:49
Ciao,

una Tips veloce veloce:

Molti di voi avranno avuto a che fare con Internal Server Error (500) non esiste errore piu' anonimo di questo, infatti puo' essere generato da diverse cose.

Per ottenre piu' informazioni andate a leggere il file error di apache, che porta gli errori generati, questo file puo' essere posizionato in diverse directory e con nomi variabili in base alla distribuzione che usate, per conoscere il posto in cui si trova potete andare a leggere il file httpd.conf e trovare la riga:
ErrorLog _path_del_file_di_log_


Inoltre segnalo il modulo: CGI::Carp qw(:fatalsToBrowser) che visualizza gli errori in modo chiaro nel Browser.

bye bye

FreeManX
24-09-2003, 18:49
Operare con i file (Windows vs Unix/Linux)

Ciao,
cio che voglio affrontare in queste poche righe e mettere in evidenza una diffrenza nell'operare con i file tra Windows e Linux.

Windows purtroppo ci ha abituato a dare per scontato molte cose, tra cui questa: credo che la buona parte considera che un file aperto, non possa essere usato da altre applicazioni contemporaneamente?

Vero, sotto Windows, infatti all'atto di esecuzione di una open(...) in automatico windows lo segna in uso, impedendo l'accesso ad altri processi, finche non viene eseguita una close(...) oppure terminato lo script con una exit().

Cio' non accade sotto Unix/Linux, il compito bloccare l'accesso viene delegato al programmatore tramite l'invocazione di particolari funzioni.
Percui quando scrivete il vostro codice (sapendo che la destinazione e una macchina Linux/Unix) e' buona norma chiamare la funzione flock() per indicare al Sistema Operativo di segnare il file come in uso.

Blocca l'accesso al file: ovvio da usare subito dopo una open(...)

flock(FILEHANDLE, 2)

Libera l'accesso al file: da usare immediatamente prima di una close(...)

flock(FILEHANDLE, 8)

E possibile anche utilizzare il modulo: Fcntl ':flock' che importa delle costanti rappresentati i flags accettati da flock (nota: quel 2 o quel 8).
Per maggiori informazioni vi rimando alla pagina: http://www.perldoc.com/perl5.8.0/pod/func/flock.html


Autore: FreeMan

Buon divertimento e speriamo di non averle dette grosse! :fagiano:

Loading