[linux] cgi-bin - perl

Pagina: 1
Acties:
  • 181 views sinds 30-01-2008
  • Reageer

  • Haranaka
  • Registratie: September 2000
  • Laatst online: 07-06 23:13
Ik wil op mijn apache webservertje een perl cgi scripje draaien maar het lukt me niet :(

Ik heb het allersimpeltje scripje gemaakt:
hallo.cgi
code:
1
2
#!/usr/bin/perl
print 'Hallo';

Als ik het script wil uitvoeren (http://mijnip/cgi-bin/hallo.cgi)
Dan krijg ik:
Internal Server Error

Uit de error_log van apache:
[Tue Mar 26 12:38:15 2002] [error] (13)Permission denied: exec of /var/www/cgi-bin/hello.cgi failed
[Tue Mar 26 12:38:15 2002] [error] [client 192.168.1.2] Premature end of script headers: /var/www/cgi-bin/hello.cgi

Het script staat in /var/www/cgi-bin/ dus daar is niets aan de hand. Wel heb mijn webdir verandert in apache maar dat moet toch niets uitmaken voor het cgi-bin toch? aangezien hij zegt dat hij het script niet kan uitvoeren in /var/www/cgi-bin.

In mijn httpd.conf staat oa:

loadmodule cgi_module
addmodule mod_cgi.c
scripalias /cgi-bin/ "/var/www/cgi-bin/"
<directory "/var/www/cgi-bin/">
Options ExecCGI

Ook dit lijkt me allemaal goed, maar waarom lukt me het niet :?

Iemand die het licht voor me aan wil doen??

Owja en ik heb httpd gerestart.

edit:

En perl werkt trouwens wel gewoon:
perl ./hallo.cgi
Geen probleem.

...


  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 23:41

odysseus

Debian GNU/Linux Sid

Op dinsdag 26 maart 2002 13:18 schreef Haranaka het volgende:
edit:

En perl werkt trouwens wel gewoon:
perl ./hallo.cgi
Geen probleem.
Wat geeft 'ls -l /mijn/bestand' terug? Met 'perl ./hallo.cgi' krijg je namelijk ook uitvoer als dat bestand niet executable is, terwijl het dat wel moet zijn.

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Verwijderd

code:
1
2
3
4
5
6
7
#!/usr/bin/perl

use CGI;
my test = new CGI;

print test->header("text/html");
print "koeien roeleren";

try that :)

Verwijderd

denk eraan dat jouw webserver onder een andere username/group draait en dus niet dezelfde permissies heeft voor jouw cgi script. als je zeker wilt zijn dat het werkt, doe je een

chmod 755 scriptnaam.cgi

dan moet het zeker werken

bovendien moet er een
code:
1
print "Content-type: text/html\n\n";

in het script, voordat er output naar STDOUT wordt gestuurd (kortom, voor de print statements), anders weet apache niet wat voor output je script geeft.

  • Haranaka
  • Registratie: September 2000
  • Laatst online: 07-06 23:13
Sorry, maar het is nog steeds niet gelukt :(

het bestand is een exetable (chmod 755) en hij draait onder user/group apache.

hello.cgi:
code:
1
2
3
#!usr/bin/perl
print "Content-type: text/html\n\n";
print "Hallo";

ls -l hallo.cgi:
-rwxr-xr-x 1 apache apache 76 Mar 26 13:10 ./hallo.cgi


Iemand nog een idee?

...


  • Niek
  • Registratie: Februari 2001
  • Laatst online: 14-07 11:42

Niek

f.k.a. The_Surfer

Misschien is perl ergens anders geinstalleerd dan /usr/bin/perl. Doe eens whereis perl, misschien dat het /usr/local/bin/perl is oid.

À vaincre sans péril, on triomphe sans gloire - Pierre Corneille


  • Haranaka
  • Registratie: September 2000
  • Laatst online: 07-06 23:13
Hij staat wel in /usr/bin/perl

...


Verwijderd

heb je t perl-programma wel de permissies gegeven om uitgevoerd te worden door apache ?!?!

  • bigben04
  • Registratie: December 2001
  • Laatst online: 05-08 22:33
Ik zie je in beide posts hallo.cgi en hello.cgi door elkaar gebruiken; het is waarschijnlijk heel dom gedacht maar misschien kan je ff kijken of je daar geen fout mee hebt gemaakt? Of je misschien hello.cgi probeert uit te voeren terwijl je hallo.cgi moet hebben?

  • Haranaka
  • Registratie: September 2000
  • Laatst online: 07-06 23:13
Op woensdag 27 maart 2002 12:19 schreef Reflex het volgende:
heb je t perl-programma wel de permissies gegeven om uitgevoerd te worden door apache ?!?!
Hmnm, dat zou misschien kunnen, hoe kijk ik of dat zo is? Zo nee, wat/waar doe ik dat dan. In mijn httpd.conf neem ik aan :?

edit:

in mijn httpd.conf staat het volgende over perl:
[code]<IfDefine HAVE_PERL>
loadmodule perl_module modules/libperl.so
</IfDefine >
...
<IfDefine HAVE_PERL>
Addmodule mod_perl.c
</IfDefine >
...
#
# If the perl module is installed, this will allow execution of mod_perl
# to compile your scripts to subroutines which it will execute directly,
# avoiding the costly compile process for most requests.
#
#<IfModule mod_perl.c>
# Alias /perl /var/www/perl
# <Directory /var/www/perl>
# SetHandler perl-script
# PerlHandler Apache::Registry
# Options +ExecCGI
# </Directory>
#</IfModule>[/code]
Zou het liggen aan het sukje code waar al die # voorstaan? Als ik die weg haal zou hij het dan wel doen? Of niet?

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
#
# "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>

Ik zat te denken he, ligt het er niet gewoon aan dat hier iets moet staan van dat hij dingen moet executen met perl ofzo? net als dat in het stukje bij perl staat: SetHandler perl-script
Of ben ik nu echt op het foute spoor aan het zoeken :?

[edit2]

[/edit2]

Dat hello.cgi en hallo.cgi door elkaar staan is mijn fout, het heet hier hello.cgi, maar dacht het is een nederlands forum dus vertaal ik het, maar helaas ben ik niet zo consequent daarin geweest zoals je opmerkte...

...


  • Haranaka
  • Registratie: September 2000
  • Laatst online: 07-06 23:13
help?

...


  • zerok
  • Registratie: November 2001
  • Laatst online: 22:43

zerok

geen

kan je het bestand wel uitvoeren? gewoon ff ./hallo.cgi in de dir? Als dat al niet kan is er iets mis met je perl en dan kan ik je niet echt verder helpen.

als je het aan de praat krijgt en verder wilt heb ik hier onder nog wel een link waar er wat meer over cgi uitgelegt word:
http://www.cgi101.com/class/

(edit link geplaatst)

"never argue with idiots they drag you down to their level and beat you with experience" dilbert


  • Haranaka
  • Registratie: September 2000
  • Laatst online: 07-06 23:13
Hmmz, zou het daar dan aan liggen? Het lukt me inderdaad neit om hem te runnen met ./hello.cgi (ook als het rename naar heloo.pl doet hij dat niet) dan krijg ik te horen:
bash: ./hello.cgi: bad interpreter: o such file or directorie

Wel kan ik hem runnen met:
perl ./hello.cgi (of hello.pl)

Hoe assosieer ik dan een .cgi en .pl met perl? Als dat het probleem zou oplossen?

edit:


Ik zal mijn httpd.conf eens online gooien, misschien dat iemand er zin heeft om me te helpen zoeken naar de boosdoener :(

http://129.125.103.216/httpd.conf

...


Verwijderd

Doe eens:

which perl

Het complete pad naar de perl interpreter moet op de eerste regel van je script staan achter de #!. Dus bijvoorbeeld:

#!/usr/local/bin/perl

Edit:
Sorry ik zie dat dit al gezegd is. Maar /usr/bin/perl kan een link zijn, dus doe voor de zekerheid eens

ls -l /usr/bin/perl

Check of deze executable is. Als het een link is check dan ls -l /waar/de/link/naar/wijst

  • Haranaka
  • Registratie: September 2000
  • Laatst online: 07-06 23:13
perl staat wel degelijk in /usr/bin/

...


Verwijderd

Aangezien je het script zelfs niet met
./script
uit kon voeren moet
- ofwel het script voor jouw niet executable zijn (maar dat is ie wel)
- ofwel de in het script gespecificeerde interpreter (/usr/bin/perl) niet bestaan of voor jouw niet uitvoerbaar zijn.

aangezien je zegt dat /usr/bin/perl bestaat, en uitvoerbaar is, en geen link is naar een perl die niet bestaat (oftewel als je /usr/bin/perl -v intypt krijg je output van perl), moet het wel haast zo zijn dat de eerste regel van je script iets anders bevat dan die interpreter. Misschien staat er een control character (^M ofzo) achter perl.

Post anders eens de output van:

od -hc hello.cgi

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 23:41

odysseus

Debian GNU/Linux Sid

Er is nog een derde mogelijkheid: de apache-configuratie is niet goed. Dat is de optie die mij eigenlijk het meest waarschijnlijk lijkt. Er is bij mijn weten geen enkele distributie die perl niet voor iedereen te draaien maakt, dus dat valt af. Die permissies lijken ondertussen ook wel goed te staan. Ik vermoed dat apache *zichzelf* niet toestaat om het bestand uit te voeren. Het is lang geleden dat ik naar een httpd.conf heb gekeken, maar dit is in ieder geval wat ik er ooit bij mezelf heb ingezet:
code:
1
2
3
4
5
6
<Directory /usr/lib/cgi-bin/>
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>

Misschien dat je dat over zou kunnen nemen? Natuurlijk wel even /usr/lib/cgi-bin veranderen naar hetgeen je bij je ScriptAlias hebt staan en dan nog eens proberen...uiteindelijk moet er wel een oplossing komen :).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Verwijderd

code:
1
#!usr/bin/perl

Zou dat niet #!/usr/bin/perl moeten zijn? (slash na uitroepteken?)

Tis maar een lullige char, maar het kan 't 'm wel doen :)

Verwijderd

Op woensdag 27 maart 2002 20:43 schreef odysseus het volgende:
Er is nog een derde mogelijkheid: de apache-configuratie is niet goed. Dat is de optie die mij eigenlijk het meest waarschijnlijk lijkt.
Die problemen komen misschien nog :)
Maar hierboven meldt hij dat het vanaf de prompt al niet werkt...

Verwijderd

Op woensdag 27 maart 2002 20:46 schreef Addo het volgende:
code:
1
#!usr/bin/perl

Zou dat niet #!/usr/bin/perl moeten zijn? (slash na uitroepteken?)

Tis maar een lullige char, maar het kan 't 'm wel doen :)
Aha! Fraude. In de eerste post staat er nog wel #!/usr/bin/perl, in de tweede niet.

  • Haranaka
  • Registratie: September 2000
  • Laatst online: 07-06 23:13
/usr/bin/perl -v
geeft de normale output van perl.

od -hc hello.cgi
code:
1
2
3
4
5
6
7
8
9
10
11
12
[root@Haranaka cgi-bin]# od -hc hello.cgi
0000000 2123 752f 7273 622f 6e69 702f 7265 0d6c
        #   !   /   u   s   r   /   b   i   n   /   p   e   r   l  \r
0000020 700a 6972 746e 2220 6f43 746e 6e65 2d74
       \n   p   r   i   n   t    "   C   o   n   t   e   n   t   -
0000040 7974 6570 743a 7865 2f74 7468 6c6d 6e5c
        t   y   p   e   :   t   e   x   t   /   h   t   m   l   \   n
0000060 6e5c 3b22 700a 6972 746e 2220 6548 6c6c
        \   n   "   ;  \n   p   r   i   n   t    "   H   e   l   l
0000100 206f 6f57 6c72 2264 0d3b 000a
        o    W   o   r   l   d   "   ;  \r  \n  \0
0000113

Zoals odysseus het voorsteld staat het exact in mijn httpd.conf

*zucht*
* Haranaka begint wat moedeloos te worden :(

edit:

Zoals je kutn zien, in mijn script staat het wel goed:
#!/usr/bin/perl

...


Verwijderd

Op woensdag 27 maart 2002 20:57 schreef Haranaka het volgende:
/usr/bin/perl -v
geeft de normale output van perl.

od -hc hello.cgi
[code][root@Haranaka cgi-bin]# od -hc hello.cgi
0000000 2123 752f 7273 622f 6e69 702f 7265 0d6c
# ! / u s r / b i n / p e r l \r
0000020 700a 6972 746e 2220 6f43 746e 6e65 2d74
\n p r i n t " C o n t e n t -
Mooi, het lijkt er inderdaad op dat er een ^M achter perl staat. Je script staat in windows formaat. Waarschijnlijk gebruik je vim oid, zodat die ^M tekens niet getoond worden.

Probeer dit eens?

$ mv hello.cgi hello.cgi.org
$ cat hello.cgi.org | tr -d \\015 > hello.cgi
$ chmod 755 hello.cgi
$ ./hello.cgi

  • Haranaka
  • Registratie: September 2000
  • Laatst online: 07-06 23:13
Jeeeeeh bedankt, hij doet het nu. Wat stom zeg, nou ja ik voel me aan de ene kant heel opgelucht, aan de andere kant heel kut dat ik er zolang naar heb lopen zoeken in de verkeerde richting.

Nouja in elk geval mijn hartelijke dank.

...


  • Haranaka
  • Registratie: September 2000
  • Laatst online: 07-06 23:13
Ik gebruik de editor van mc en soms ook wel emacs, deze laten dus beiden niet die ^M zien. Welke editor(s) doen dit wel? Dan ga ik daarmee aan de slag.

...


Verwijderd

Vim geeft dacht ik een melding als je een file in dos formaat laadt. De originele vi laat ^M tekens wel zien.

Volgens mij heb je op linux systemen wel standaard tooltjes (gokje: d2u en u2d) om files te converteren. Dat werkt wat makkelijker dan mijn ietwat cryptische (maar wel universele) methode.

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 23:41

odysseus

Debian GNU/Linux Sid

De naam van die tooltjes is 'dos2unix' en 'unix2dos'. Overigens laat elvis ook een ^M zien als de regeleinden niet zijn zoals ze horen te zijn. En anders is er altijd nog 'file', dat geeft ook van tekstbestanden het type regeleinde aan: CRLF is te herkennen als windows-stijl.

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Verwijderd

Op woensdag 27 maart 2002 21:35 schreef Haranaka het volgende:
Ik gebruik de editor van mc en soms ook wel emacs, deze laten dus beiden niet die ^M zien. Welke editor(s) doen dit wel? Dan ga ik daarmee aan de slag.
Ik gebruik altijd vi en dat werkt uitstekend (met 1 commando kun je alle ^M's verwijderen, is wel handig met grote files :) )

  • bigben04
  • Registratie: December 2001
  • Laatst online: 05-08 22:33
Op woensdag 27 maart 2002 22:03 schreef Karam het volgende:

[..]

Ik gebruik altijd vi en dat werkt uitstekend (met 1 commando kun je alle ^M's verwijderen, is wel handig met grote files :) )
Welk commando is dat?

Verwijderd

:%s/^M//g

let op: die ^M krijg je door achtereenvolgens op control V en control M te drukken.

Verwijderd

Andere oplossing die wat handiger werkt voor meerdere files is tr (als programma of bijv Perl functie in een one-liner).
Pagina: 1