Newsgroup: it.comp.lang.perl
Titolo: il solito premature ends of script headers.....

salve a tutti,
spero di non essere of topic ma mi pare che questo gruppo sia il più adatto.
Se ritenete che sia OT fatemelo sapere.
Ho installato su una macchina di prova un programma di contabilità che si
chiama sql-ledger. è scritto in perl e lavora con un db postgres.
Per questo motivo ho installato una macchina linux con tutto l'armamentario
necessario:
redhat 7.2
apache 1.3.26
postgres 7.2
dbi e dbd
perl 5.6
il programma sql ledger si installa correttamente ma all'avvio dello script
perl che lo amministra ottengo il classico errore 500 con il log che mi dice
"premature end of....."
Ho pensato subito ad un errore di permessi (invece è tutto ok)
Ho avviato lo script da console:
perl -c 
login.pl
e mi restituisce syntax ok
apache è ok come tutti i settings di httpd.conf ecc...per eseguire gli
script perl al di fuori di /cgi-bin
mi attacco a postgres normalmente con PHP e quindi nemmeno li' sta l'errore
Poichè non riuscivo a venirne a capo (sono un niubbo del perl ma qualcosa di
server ci capisco) mi sono fatto il classco "hello world" e ho scoperto che
*qualsiasi* script perl mi da' questo errore.
Guardando qua e la sugli ng ho scoperto che gli script in perl devono essere
caricati in ascii , qui chiedo il Vostro aiuto...non ho trasferito i files
utilizzando un FTP server ma facendo copia incolla della cartella tramite
samba precedentemente scompattata usando windows XP.
Se il problema derivasse da questo (script in binario?) c'è un modo per
ri-trasformare i files sul server linux in ascii mode?
oppure....e mai successo a Voi qualcosa del genere?
ciao e grazie in anticipo se qualche anima pia vorrà aiutarmi
max

Sei un po' OT, perché il NG più adatto è it.comp.www.cgi :-)
Comunque il tuo problema è stato trattato una volta in più qualche settimana
fa proprio su quel NG.
Cerca un topic "error mesage" proprio scritto sbagliato così :-)
e un po' prima avevo scritto qualcosa al riguardo al modo di uploadare i
files secondo i vari OS. Comunque ti consiglio di consultare direttamente
tutti i topics degli ultimi 2 o 3 mesi, che tanto non sono molti e sono in
qualche modo tutti collegati al tuo problema.
ciao
--
perl -MLWP::Simple -e "getprint(' 
http://perl.4pro.net
 ')"

 ciao
ciao e buona fine......
max

allora controlla i permessi e se il file ha CR LF di windows, che fa
incazzare perl che non ti immagini :-)
miglior pricipio...


EHI!!!! aspetta un po':
sicuro che questa funzioni?
 #!usr/bin/perl
e non sia magari scritta cosě:
 #!/usr/bin/perl
:-)


  #!/usr/bin/perl
ho solo sbagliato a scrivere, nello script č
#!/usr/bin/perl
ma da' errore lo stesso

<cut all>
non so se possa servire:
mod_perl/1.24_01 è installato sulla mia macchina
ciao

mah... se hai già controllato:
1. che il file sia unix e non win (LF e non CR LF)
2. che la shebang sia corretta (e magari punti proprio a perl ;-)
3. che i permessi siano ok (755)
4. che il server possa eseguire scripts dalla dir in cui hai il tuo script
(e che non ci sia qualche opzione che lo impeisce in un .htaccess)
non mi viene in mente che altro controllare. Hai già guardato l'error log
(ammesso che tu ne abbia l'accesso?)...


 (ammesso che tu ne abbia l'accesso?)...
dall'avvio di apache
[Wed Jan  1 23:35:32 2003] [notice] Apache/1.3.26 (Unix)  (Red-Hat/Linux)
mod_ssl/2.8.4 OpenSSL/0.9.6b DAV/1.0.2 PHP/4.0.6 mod_perl/1.24_01
configured -- resuming normal operations
[Wed Jan  1 23:35:32 2003] [notice] suEXEC mechanism enabled (wrapper:
/usr/sbin/suexec)
Da qui in poi ho chiamato lo script dal browser
[Wed Jan  1 23:35:32 2003] [error] (2)No such file or directory: exec of
/var/www/html/sql-ledger/
login.pl
 failed
[Wed Jan  1 23:35:32 2003] [error] [client 192.168.yyy.xxx] Premature end of
script headers: /var/www/html/sql-ledger/
login.pl
Penso che il perl non faccia per me........:-(

 script headers: /var/www/html/sql-ledger/
login.pl
prova di nuovo con lo script che ti ho scritto sopra
-- 
$_=q,6;-16;-1;-8;0;7;-13;-12;-9;-3;13#4A75737420616E6F74686572,,($_,$b)=
split?#?;@b=split?;?;map{$c.=$_,$d.=chr$b[$e++]+ord}split??,pack'H24',$b
;chop$d,print$c.chr(32).$d

 $q->end_html;                  # end the HTML
bastava anche solo il suo :-)
    #!usr/bin/perl
    use CGI::Carp qw(fatalsToBrowser);
    print "Content-type:text/html\n\n";
    print "ok";
ciao Andrea (non hai ancora aggiunto la virgola alla firma eh? :-)


 ciao Andrea (non hai ancora aggiunto la virgola alla firma eh? :-)
ho controllato ed hai ragione tu... grazie del ripetuto avviso.
Cmq il mio è un japh orribile, non ho molta fantasia ecc, lo toglierò.


 chiama sql-ledger. è scritto in perl e lavora con un db postgres.
cari ragazzi che mi avete aiutato, volevo farVi sapere che ce l'ho fatta ad
installare il programma di contabilità. Il problema risiede nel CR/LF quindi
Vi scrivo le cose da fare e le cose da non fare per una corretta esecuzione
dei PL secondo me, sperando che questo riassunto sia utile anche per quanche
altro.
Partendo dal presupposto che utenti/permessi/settings di apache siano ok,
1) mai creare un file pl da windows e copiarlo su una share di linux unix in
quanto rimangono i terminatori di riga in stile windows, nemmeno crearlo su
un'unità di rete ... da' errore
2) Anche la creazione di files sotto linux sembra essere una operazione così
lineare in quanto da' errore. L'unico file che non mi ha dato problemi
nell'esecuzione è un .pl creato sotto kdevelop 2.0 che quindi crea i files
in modalità 100% UNIX e perl friendly
3) se scompattate direttamente dalla Vostra linux box, usate ark che vi
permette di settare la conversione CR -> LF tra le opzioni. Io gli ho detto
di mantenere la modalità UNIX e finalmente sono riuscito a fare funzionare
tutto
Da ultimo....vedrò di installare un server FTP che mi permetterebbe di
"sanare" tutti questi problemi :-)
Ringrazio ancora Andrea e Domizio e auguro a tutti Voi un ottimo 2003
ciao
max

 un'unità di rete ... da' errore
Se lavori in ambienti misti e il server è UNIX, allora magari potresti
considerare l'uso di un buon text editor Win32 che permetta sia l'edit
diretto di file formato unix, sia l'upload e l'edit di files remoti (che
spesso è MOLTO comodo). Primo fra tutti è UltraEdit che permette anche di
configurarti tools esterni per verificare la sintassi, o far girare uno
script catturandone l'output, ecc. ecc..
Per evitare il problemino nel quale sei incappato tu, personalmente
preferisco sempre lavorare su files UNIX anche in ambiente Win.


 "sanare" tutti questi problemi :-)
Ovvero un qualsiasi server ftp se, lato client, si imposta un 
trasferimento in modalita' ASCII con controllo del carriag return.
dal man di ftp per linux:
(elenco comandi)
- ascii       Set the file transfer type to network ASCII.  This is the 
default type.
- cr          Toggle carriage return stripping during ascii type file 
retrieval.  Records are denoted by a carriage return/linefeed sequence 
during ascii type file transfer.  When cr is on (the default), carriage 
returns are stripped from this sequence to conform with the UNIX single 
linefeed record delimiter. Records on non-UNIX remote systems may 
contain single line-feeds; when an ascii type transfer is made, these 
linefeeds  may be distinguished from a record delimiter only when cr is 
off.
Dall'RFC 959(STD0009) "file transfer protocol"
ASCII TYPE
            This is the default type and must be accepted by all FTP
            implementations.  It is intended primarily for the transfer
            of text files, except when both hosts would find the EBCDIC
            type more convenient.
            The sender converts the data from an internal character
            representation to the standard 8-bit NVT-ASCII
            representation (see the Telnet specification).  The receiver
            will convert the data from the standard form to his own
            internal form.
            In accordance with the NVT standard, the <CRLF> sequence
            should be used where necessary to denote the end of a line
            of text.  (See the discussion of file structure at the end
            of the Section on Data Representation and Storage.)
            Using the standard NVT-ASCII representation means that data
            must be interpreted as 8-bit bytes.
Quindi viene usata una rappresentazione standard per evitare problemi di 
incompatibilita' tra formati di sistemi differenti.
-- 
Saluti,
Giancarlo