ubuntuusers.de

Browser gibt nur source code von CGI Script aus :(

Status: Ungelöst | Ubuntu-Version: Ubuntu
Antworten |

Witja

Avatar von Witja

Anmeldungsdatum:
10. April 2007

Beiträge: 3

Guten Morgen allesamt.

Ich habe hier von der schule aus ein paar .cgi scripte auf papier gekriegt, die ich dann als dateiname.cgi abspeichern, (in /usr/lib/cgi-bin/) und dann per browser aufrufen soll. die nötigen Pakete habe ich bereits runtergeladen (Perl-dbi apache und postgresql). wenn ich nun den browser auf localhost navigiere, zeigt er mir die ,von mir erstellete index.html (in /var/www/) an. aber wenn ich dann den cgi cript aufrufe, zeigt der Browser nur den Source code an, sprich die HTML Tags. Wo hab ich da Mist gebaut? habe ich vllt irgendwelche pakete nicht mit installiert? oder muss ich noch änderungen vornehmen irgendwo?
Muss vllt noch sagen das ich recht neu in der linux welt bin, und mich erst seit knapp 2 wochen auch privat mit ubuntu beschäftige ( und auch wirklich begeistert bin ☺ )

Hier habe ich nochmal den code der .cgi datei

#!/bin/sh
set -f
echo -e 'content-type: text/html \n'
echo '<html>'
echo '<head>'
echo '<title> Bash-CGI-Script</title>'
echo '</head>'
echo '<body>'
echo 'Dies ist ein Bash-CGI-Script<br><br>Hello User.'
echo '</body>'
echo '</html>'

Würde mich freuen wenn mir jemand weiterhelfen würde.
vielen Dank im Vorraus

Jay-Low-Jason

Avatar von Jay-Low-Jason

Anmeldungsdatum:
2. April 2007

Beiträge: 393

Wohnort: Die Stadt mit der zweithöchsten Kneipendichte

Hallo,

die Datei sollte in einem Verzeichnis liegen das in der apache-config mit "ExecCGI" deklariert ist.
normalerweise is das /usr/lib/cgi-bin/ (bin mir da jetzt aber nicht ganz sicher)
guckst du dir am besten mal Apache an.

Ausserdem muss die Datei ausführbar sein. chmod +x deineDatei.sh

dann sollte es eigentlich klappen

Witja

(Themenstarter)
Avatar von Witja

Anmeldungsdatum:
10. April 2007

Beiträge: 3

Hey, danke für die schnelle Antwort.

Also es liegt alles soweit im /usr/lib/cgi-bin/ und chmodded ist es auch auf 755. hatte auch 777 ausprobiert, aber läuft trotzdem nich so wies soll.
welche pakete müssen denn alles dafür runtergeladen werden? weil auf meinem tollen Arbeitsblatt steht nicht wirklich viel -.-"

Jay-Low-Jason

Avatar von Jay-Low-Jason

Anmeldungsdatum:
2. April 2007

Beiträge: 393

Wohnort: Die Stadt mit der zweithöchsten Kneipendichte

Was heisst läuft nich so wies soll?
immer noch die HTML Tags oder kommt ein Error 404 (not Found)?

in diesem Fall probiere mal http://localhost/cgi-bin/deineDatei.cgi

ansonsten poste doch bitte mal deine /etc/apache2/apache2.conf

bzw. den Abschnitt mit

      ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

falls der bei dir abweichen sollte.

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

Weitere Packete musst du nicht installieren, wenn du lediglich CGI machst reicht Apache aus.

Ansonsten wie rufst du den das Skript auf?
Wenn du z.B. die Datei index.cgi unter /usr/lib/cgi-bin/ speicherst dann musst du im Browser.

http://localhost/cgi-bin/index.cgi

eintippen.

Und wie mein Vorredner sagte, was heißt "Geht Nicht"? Welche Fehlermeldung kommt, was gibst du genau ein. Was bekommst du genau wieder zurück?

Bauer

Anmeldungsdatum:
28. Juni 2006

Beiträge: 333

Vergesst was ich gesagt habe -.-

Witja

(Themenstarter)
Avatar von Witja

Anmeldungsdatum:
10. April 2007

Beiträge: 3

Hallo. Tut mir leid, hatte gestern keine Gelegenheit mehr zurückzuschreiben. Danke für die zahlreichen Antworten.

ich tippe in der Tat http://localhost/cgi-bin/meinedatei.cgi in den browser ein. hatte es auch schon mit der http://meine-ip/cgi-bin/meinedatei.cgi versucht. aber der Fehler besteht: er gibt mir nur den HTML Source-Code aus . irgendwas ist da verkehrt... ☹

hier ist die apache2.conf:

# Based upon the NCSA server configuration files originally by Rob McCool.
# Changed extensively for the Debian package by Daniel Stone <daniel@sfarc.net>
# and also by Thom May <thom@debian.org>.

Alias /icons/ "/usr/share/apache2/icons/"
<Directory "/usr/share/apache2/icons">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

# Set up the default error docs.
#
# 1) plain text 2) local redirects 3) external redirects
#
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#

#
# Putting this all together, we can Internationalize error responses.
#
# We use Alias to redirect any /error/HTTP_<error>.html.var response to
# our collection of by-error message multi-language collections. We use
# includes to substitute the appropriate text.
#
# You can modify the messages' appearance without changing any of the
# default HTTP_<error>.html.var files by adding the line;
#
# Alias /error/include/ "/your/include/path/"
#
# which allows you to create your own set of files by starting with the
# /usr/local/apache2/error/include/ files and
# copying them to /your/include/path/, even on a per-VirtualHost basis.
#

<IfModule mod_negotiation.c>
<IfModule mod_include.c>
Alias /error/ "/usr/share/apache2/error/"

<Directory "/usr/share/apache2/error">
AllowOverride None
Options IncludesNoExec
AddOutputFilter Includes html
AddHandler type-map var
Order allow,deny
Allow from all
LanguagePriority en es de fr
ForceLanguagePriority Prefer Fallback
</Directory>

ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
ErrorDocument 410 /error/HTTP_GONE.html.var
ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var
ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var

</IfModule>
</IfModule>

DirectoryIndex index.html index.cgi index.pl index.php index.xhtml

# UserDir is now a module
#UserDir public_html
#UserDir disabled root

#<Directory /home/*/public_html>
# AllowOverride FileInfo AuthConfig Limit
# Options Indexes SymLinksIfOwnerMatch IncludesNoExec
#</Directory>

AccessFileName .htaccess

<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>

UseCanonicalName Off

TypesConfig /etc/mime.types
DefaultType text/plain

HostnameLookups Off

IndexOptions FancyIndexing VersionSort

AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

# This really should be .jpg.

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif \^^DIRECTORY\^^
AddIcon /icons/blank.gif \^^BLANKICON\^^

# This is from Matty J's patch. Anyone want to make the icons?
#AddIcon /icons/dirsymlink.jpg \^^SYMDIR\^^
#AddIcon /icons/symlink.jpg \^^SYMLINK\^^

DefaultIcon /icons/unknown.gif

ReadmeName README.html
HeaderName HEADER.html

IndexIgnore .??* *~ *# HEADER* RCS CVS *,t

AddEncoding x-compress Z
AddEncoding x-gzip gz tgz

AddLanguage da .dk
AddLanguage nl .nl
AddLanguage en .en
AddLanguage et .et
AddLanguage fr .fr
AddLanguage de .de
AddLanguage el .el
AddLanguage it .it
AddLanguage ja .ja
AddLanguage pl .po
AddLanguage ko .ko
AddLanguage pt .pt
AddLanguage no .no
AddLanguage pt-br .pt-br
AddLanguage ltz .ltz
AddLanguage ca .ca
AddLanguage es .es
AddLanguage sv .se
AddLanguage cz .cz
AddLanguage ru .ru
AddLanguage tw .tw
AddLanguage zh-tw .tw

LanguagePriority en da nl et fr de el it ja ko no pl pt pt-br ltz ca es sv tw

#AddDefaultCharset ISO-8859-1

AddCharset ISO-8859-1 .iso8859-1 .latin1
AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen
AddCharset ISO-8859-3 .iso8859-3 .latin3
AddCharset ISO-8859-4 .iso8859-4 .latin4
AddCharset ISO-8859-5 .iso8859-5 .latin5 .cyr .iso-ru
AddCharset ISO-8859-6 .iso8859-6 .latin6 .arb
AddCharset ISO-8859-7 .iso8859-7 .latin7 .grk
AddCharset ISO-8859-8 .iso8859-8 .latin8 .heb
AddCharset ISO-8859-9 .iso8859-9 .latin9 .trk
AddCharset ISO-2022-JP .iso2022-jp .jis
AddCharset ISO-2022-KR .iso2022-kr .kis
AddCharset ISO-2022-CN .iso2022-cn .cis
AddCharset Big5 .Big5 .big5
AddCharset WINDOWS-1251 .cp-1251 .win-1251
AddCharset CP866 .cp866
AddCharset KOI8-r .koi8-r .koi8-ru
AddCharset KOI8-ru .koi8-uk .ua
AddCharset ISO-10646-UCS-2 .ucs2
AddCharset ISO-10646-UCS-4 .ucs4
AddCharset UTF-8 .utf8

AddCharset GB2312 .gb2312 .gb
AddCharset utf-7 .utf7
AddCharset utf-8 .utf8
AddCharset big5 .big5 .b5
AddCharset EUC-TW .euc-tw
AddCharset EUC-JP .euc-jp
AddCharset EUC-KR .euc-kr
AddCharset shift_jis .sjis

#AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps

AddType application/x-tar .tgz

#
#AddHandler cgi-script .cgi

# To use server-parsed HTML files
#
<FilesMatch "\.shtml(\..+)?$">
SetOutputFilter INCLUDES
</FilesMatch>

# If you wish to use server-parsed imagemap files, use
#
#AddHandler imap-file map

BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0

#
# The following directive disables redirects on non-GET requests for
# a directory that does not include the trailing slash. This fixes a
# problem with Microsoft WebFolders which does not appropriately handle
# redirects for folders with DAV methods.
#

BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^gnome-vfs" redirect-carefully
BrowserMatch "^WebDAVFS/1.[12]" redirect-carefully

# Change the ".your_domain.com" to match your domain to enable.
#
#<Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#</Location>

# Allow remote server configuration reports, with the URL of
# Change the ".your_domain.com" to match your domain to enable.
#
#<Location /server-info>
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#</Location>

Include /etc/apache2/sites-enabled/[^.#]*

Danke nochmal für die Mühe!
Grüße, Witja

Jay-Low-Jason

Avatar von Jay-Low-Jason

Anmeldungsdatum:
2. April 2007

Beiträge: 393

Wohnort: Die Stadt mit der zweithöchsten Kneipendichte

Da hatte ich Dir das falsche config-File genannt ... 😳

richtig wäre: /etc/apache2/sites-avialable/default

schau nach ob da im Abschnitt
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
bei den Options +ExecCGI gesetzt ist.
(vgl. mein obigen Post)

diese Option veranlasst Apache CGIs auszuführen ...

Du kannsta aber auch mal probieren in der apache2.conf
die Zeile

AddHandler cgi-script .cgi .sh . pl


auszukommentieren und Apache neustarten.

Dann kannst du dein Skript auch in /var/www legen und es sollte auch dort ausgeführt werden (http://localhost/meinedatei.cgi bzw. http://127.0.0.1/meinedatei.cgi)

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

er gibt mir nur den HTML Source-Code aus . irgendwas ist da verkehrt...

Du meinst wenn du dein Testskript aufrufst.

#!/bin/sh
set -f
echo -e 'content-type: text/html \n'
echo '<html>'
echo '<head>'
echo '<title> Bash-CGI-Script</title>'
echo '</head>'
echo '<body>'
echo 'Dies ist ein Bash-CGI-Script<br><br>Hello User.'
echo '</body>'
echo '</html>'


Dann siehst du folgendes im Browser?

content-type: text/html
<html>
<head>
<title> Bash-CGI-Script</title>
</head>
<body>
Dies ist ein Bash-CGI-Skript<br><br>Hello User.
</body>
</html>

Klar ist auch verständlich. Also dein CGI Skirpt wurde damit schon richtig verarbeitet. An irgendwelchen Ausführungsrechten kann also schonmal nicht liegen. Das er den Sourcecode ausgiebt liegt daran das du deine Ausgabe nicht ganz korrekt ist.

Die erste Ausgabe bei CGI muss ein Content-type sein, in deinem Fall ist dies "text/html".
Du musst also noch ganz am anfang folgende Ausgabe machen.

"Content-type: text/html\n\n"

Wichtig ist aber das "\n" auch als ein Newline zeichen Interpretiert werden soll. Und du musst zwei Newlines ausgeben (Du hast nur eins gesschrieben). Erst nach der Ausgabe kann dein HTML Code kommen. Es müssen dort zwei stehen damit der Browser Header von Content unterscheiden kann. Wenn du nicht zwei machst, wird alles als Content angesehen, und für den Browser ist es dann so als wenn du keinen Header angegeben hast.

Und wenn kein Header angegeben wird mit einem Content-type dann wird standardmäßig alles einfach als "text" Interpretiert. Also alles 1:1 ausgegeben.

An deiner Konfig ist alles richtig, da das Skript ja bereits ausgeführt wird, und du die Ausgabe des Skriptes erhälst. Du gibst halt nur noch zu wenig aus um auch ein gültiger CGI Request zu sein. Nach dem korrekten Content-type oben solltest du dann nicht mehr den Sourcecode sehen sondern deine Ausgabe wird auch vom Browser als echtes HTML Interpretiert.

Ich hoffe mal du hast jetzt durch das herumfummeln an der Konfig Datei nicht alles kaputt Konfiguriert. 🙄

\––\–––

Dann kannst du dein Skript auch in /var/www legen und es sollte auch dort ausgeführt werden

Sollte man aus Sicherheitsgründen vermeiden!!!

Antworten |