PDA

View Full Version : [Perl] Problema a capire come stampare in browser


Matrixbob
13-05-2005, 13:09
Sto cercando di stampare a browser questo script:

#! D:\perl\bin\
##
## printenv -- demo CGI program which just prints its environment
##

print "Content-type: text/plain\n\n";
foreach $var (sort(keys(%ENV)))
{
$val = $ENV{$var};
$val =~ s|\n|\\n|g;
$val =~ s|"|\\"|g;
print "${var}=\"${val}\"\n";
}

è giusto questa sintassi:
#! D:\perl\bin\
per indicare al browser dove è l'interprete perl?!

Da shell funziona, porc! :doh: :muro:

Matrixbob
13-05-2005, 13:28
http://img188.echo.cx/img188/839/perler9yd.gif

Boh, forse apache non capisce a chi deve mandare qule codice ... :(

Matrixbob
13-05-2005, 13:58
Niente da fare quel "cornutaccio" di Apache continua a restituirmi il testo script invece che eseguirlo ... mi sento un po' disperso! :)

#! D:\Perl\bin\
##
## printenv -- demo CGI program which just prints its environment
##

print "Content-type: text/plain\n\n";
foreach $var (sort(keys(%ENV)))
{
$val = $ENV{$var};
$val =~ s|\n|\\n|g;
$val =~ s|"|\\"|g;
print "${var}=\"${val}\"\n";
}

kingv
13-05-2005, 14:18
ma hai configurato apache per eseguire i cgi nella directory dove hai messo lo script?

la prima riga poi dovrebbe contenere il path all'eseguibile perl, non quello di una directory

Matrixbob
13-05-2005, 15:00
ma hai configurato apache per eseguire i cgi nella directory dove hai messo lo script?
Quindi questa parte di confugurazione devo modificare?!

<Directory "C:/Programmi/Apache Group/Apache2/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>


la prima riga poi dovrebbe contenere il path all'eseguibile perl, non quello di una directory
Quindi devo aggiungere il nome dell'eseguibile, perl.exe ?!
Quindi così: #! D:\Perl\bin\perl.exe

Boh adesso provo.

Matrixbob
13-05-2005, 15:02
Ho settato così:

<Directory "D:/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

adesso apporto modifiche allo script e ti dico se tutto è ok. :)

Matrixbob
13-05-2005, 15:06
Meglio che un calcio nel sedere, ma mi da questo errore ora:

Forbidden
You don't have permission to access /cgi-bin/ on this server.
------------------------------------------------------------------
Apache/2.0.53 (Win32) PHP/5.0.4 Server at localhost Port 80

kingv
13-05-2005, 15:22
aggiungi

ScriptAlias /cgi-bin/ "D:/www/cgi-bin"

e chiama http://nome_server/cgi-bin/printenv.cgi

Matrixbob
13-05-2005, 15:41
aggiungi

ScriptAlias /cgi-bin/ "D:/www/cgi-bin"

Così nel httpd.conf a "caso"?! :) ok provo.

Ho salvato in questo modo:

ScriptAlias /cgi-bin/ "C:/Programmi/Apache Group/Apache2/cgi-bin/"
ScriptAlias /cgi-bin/ "D:/www/cgi-bin"

Qui non funzionava, provo a commentare quella precedente.

Matrixbob
13-05-2005, 15:50
Ho messo così:

#ScriptAlias /cgi-bin/ "C:/Programmi/Apache Group/Apache2/cgi-bin/"
ScriptAlias /cgi-bin/ "D:/www/cgi-bin"

ma non cambia niente.

La cartella è sempre vietata e il file è inesistente anche se c'è.

Mi sa che si sbaglia qualche path :) :)

kingv
13-05-2005, 15:50
prova a guardare che errore ti riporta nell'error_log quando la chiamata va male.
posta il messaggio.

Matrixbob
13-05-2005, 15:54
prova a guardare che errore ti riporta nell'error_log quando la chiamata va male.
posta il messaggio.
mmmmm ho aggiunto / al fondo della mia directory,
ovvero
ScriptAlias /cgi-bin/ "D:/www/cgi-bin/"
ed il risultato è stato questo:

COMSPEC="C:\WINDOWS\system32\cmd.exe"
DOCUMENT_ROOT="D:/www"
GATEWAY_INTERFACE="CGI/1.1"
HTTP_ACCEPT="image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*"
HTTP_ACCEPT_ENCODING="gzip, deflate"
HTTP_ACCEPT_LANGUAGE="it"
HTTP_CONNECTION="Keep-Alive"
HTTP_HOST="localhost"
HTTP_USER_AGENT="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
PATH="C:\Perl\bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Programmi\ATI Technologies\ATI Control Panel;C:\Programmi\MySQL\MySQL Server 4.1\bin"
PATHEXT=".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH"
QUERY_STRING=""
REMOTE_ADDR="127.0.0.1"
REMOTE_PORT="3217"
REQUEST_METHOD="GET"
REQUEST_URI="/cgi-bin/printenv.cgi"
SCRIPT_FILENAME="D:/www/cgi-bin/printenv.cgi"
SCRIPT_NAME="/cgi-bin/printenv.cgi"
SERVER_ADDR="127.0.0.1"
SERVER_ADMIN="[email protected]"
SERVER_NAME="localhost"
SERVER_PORT="80"
SERVER_PROTOCOL="HTTP/1.1"
SERVER_SIGNATURE="<address>Apache/2.0.53 (Win32) PHP/5.0.4 Server at localhost Port 80</address>\n"
SERVER_SOFTWARE="Apache/2.0.53 (Win32) PHP/5.0.4"
SYSTEMROOT="C:\WINDOWS"
WINDIR="C:\WINDOWS"

Penso sia corretto per tale script, vero?! :D
Sei stato un mito.

Matrixbob
13-05-2005, 15:56
Se hai sotto mano uno script + complicato passa pure. :)
Altrimenti ravano in Internet, chissa quali cagxxe si trovano.

(speriamo non malaware)

Matrixbob
13-05-2005, 16:01
Confermo con questo piccolo script che funziona:

#! D:\perl\bin\Perl.exe
print "Content-type: text/html\n\n";
print "Hello World";

kingv
13-05-2005, 16:02
mmmmm ho aggiunto / al fondo della mia directory,
Penso sia corretto per tale script, vero?! :D


l'output è corretto ;)

non ho altri script sottomano ma sulla rete ne trovi quanti ne vuoi.

Matrixbob
13-05-2005, 16:16
Ammazza che schizzinoso che è sto Apache!!!!

Ho installato questa versione di Perl:
ActivePerl-5.8.6.811-MSWin32-x86-122208.msi

è quella giusta o sono tutte uguali?!

kingv
13-05-2005, 16:29
Ammazza che schizzinoso che è sto Apache!!!!

Ho installato questa versione di Perl:
ActivePerl-5.8.6.811-MSWin32-x86-122208.msi

è quella giusta o sono tutte uguali?!

io ho sempre visto ActivePerl su windows, non ho idea se ne esistano altre.
dovrebbe andare bene

cionci
13-05-2005, 18:29
Non è meglio usare il mod_perl ?

kingv
13-05-2005, 19:29
Non è meglio usare il mod_perl ?


mod_perl è un approccio diverso e molto più potente di CGI.

se devi creare un sito dinamico e vuoi farlo in perl sicuramente il gap iniziale per imparare a usarlo è ricompensato dal tempo che risparmi dopo.

Se devi fare una paginetta su un web server che ti mostri qualche statistica o cose simili non vale la pena, conoscendo il linguaggio e qualche rudimento di html scrivere un CGI è molto più banale.

Matrixbob
13-05-2005, 19:54
mod_perl è un approccio diverso e molto più potente di CGI.

se devi creare un sito dinamico e vuoi farlo in perl sicuramente il gap iniziale per imparare a usarlo è ricompensato dal tempo che risparmi dopo.

Se devi fare una paginetta su un web server che ti mostri qualche statistica o cose simili non vale la pena, conoscendo il linguaggio e qualche rudimento di html scrivere un CGI è molto più banale.
Infatti l'idea era proprio quella piuttosto di perdersi nelle cazzebubole dei CGI predirrò lo studio di php/jsp e servlet che sono un po' paragonabili alle CGI tutto sommato, ma con le potenzialità java.