- hvor tal er antal input og talx er selve inputtet. Det ser ud som om at scriptet kun ser ét input da kaldet ser således ud ved intastning af tallet 5 i formen:
.../se_log.exe?number=5/
Outputtet er altid ”Forkert Kald” uanset hvad jeg giver af input. Jeg bruger VC++. Har I en løsning på problemet ? ?
Tag lige og kig på CGI igen, jeg mener ikke at CGI sender data som program parametre - jeg kan bare ikke huske hvordan det så gør det? Jeg er ikke helt sikker!
Jeg mener altså også at CGI sender data igennem det der hedder standard in.... Og jeg mener også at hvis man skal bruge den syntaks ovenfor, så SKAL man vist bruge argc og argv,,,,,,,,, Jeg tror nok de er keywords, men her må jeg nok sige mig knap så sikker !
så er argv[0] altid programmets navn. Da en HTML form appender alle argumenter til det kaldte script med et ? og så argumenterne som navn1=værdi1&navn2=værdi2&..., så vil du altid få alle dine form-argumenter med i argv[0] - med mindre, du kan snyde formen til at sætte mellemrum ind, så den istedet for at kalde /cgi-bin/se_log.exe?number=1 kalder /cgi-bin/se_log.exe number=1 I det sidste tilfælde vil argv[1]=number=1
Generelt, så er argv og argc altså IKKE keywords, men bare parametre til main-funktionen (det eneste, der er navngivet på forhånd er main!) Du kunne kalde dem a og b eller tal og talx og resultatet ville blive det samme.
Okay, jeg tog fejl. Men dit problem er stadig, at FORMen tror, den skal angive parametrene til dit script ved at appende ? og navn=værdi til scriptes navn, inden det køres. Det virker for php3-scripts og perl-ditto, men ikke for en exe-fil!
Hvis du skriver se_log.php3?number=1, så fatter php3-scriptet, at du vil sætte number=1. Hvis du vil gøre det samme til en exe fil, så skal du skrive se_log.exe number=1 (el. lignende.) Problemet er altså, at FORMen tror, din cgi kan tage argumenter ligesom alle andre cgi'er. Hvodden du får den til at gøre det rigtigt, aner jeg dog ikke...
roadkill-> Scriptet har hele tiden virket ved en alm. dosprompt med "filnavn.exe parameter1" men ikke når det kører fra serveren - det er det, der er problemet.
PHP3 kender jeg ikke meget til og her ikke hensigten forløbig. Først skal C-scriptet virke.
Når du starter dit C-script fra en DOSpromt, så angiver du parametre ved at skrive dem efter filnavnet, adskilt (fra hinanden og fra filnavnet) af MELLEMRUM. Når du kører et (hvilkensomhelst) script via en HTML FORM, så angives de parametre, der kommer fra FORMen med ? mellem scriptnavn og første parameter og med & mellem resten af parametrene. Det, som mit lille Bilkascript gør er bare at tage argumenterne fra FORMen og kalde C-scriptet på den korrekte måde!
roadkill-> Jeg troede, at du ville have mig til at benytte et php3-script i stedet for C.
Det ser ud til at være tæt på, men der er stadig en mindre fejl. I error.log'en skrives fejlen: Filename is not valid: c:/programmer/apachegroup/apache/htdocs/< -hvilket vel skulle være i mit cgi-dir.
Du skal ikke sætte mit lille script in i ACTION-feltet, men istedet lægge det i cgi-bin som en fil (fx. se_log.php3) og så sætte ACTION=se_log.php3. Så skulle det virke
Ja, undskyld, det er jo mig, der er en idiot! Selvfølgelig virker dette ikke - når du fyrer se_log.exe af fra et PHP3-program, så udføres det godt nok - men output fra det bliver jo ikke præsenteret på HTML-siden. Hvad kan jeg sige, jeg var vist lidt distret... Okay, jeg har ET forslag tilbage, og så opgiver jeg. Problemet her er som sagt, at dit C-script udføres indefra PHP3-scriptet. Prøv istedet dette:
Dette PHP3-script laver et JavaScript, som flytter browserens lokation... Jeg vil ikke garantere, at det virker, da jeg ikke har mulighed for at teste det selv - og fordi jeg er lidt usikker på, hvad browseren gør ved det 'hængende' parameterargument. Hvis det her ikke virker, så gi'r jeg op.
Og for øvrigt er der en lille ting, der undrer mig: Jeg har prøvet at køre dit se_log.exe script direkte i min browser (ved at skrive http://212.10.18.88/cgi-bin/se_log.exe) og jeg får bare en Save As... prompt op, hvilket jo er, hvad browseren gør, når den fil, man peger på, ikke har en extension, som webserveren ved, hvad den skal gøre ved... fx .zip, .bat eller måske .exe, hvis webserveren ikke er sat op til at køre executables som scripts!
Jeg får Save as-popup'pen, når jeg bruger Netscape - og 'forkert kald', hvis jeg bruger MSIE... Mærkeligt... Jeg tror ikke, din webserver er helt korrekt sat op... Eller osse er Netscape bare smådum. Gider du ikke lige lave om, så se_log.exe udskriver argc og argv[0..argc].... Så vil jeg lige prøve at lege lidt med lortet...
Ved Kald af et C prog via CGI, skal der læses fra standardin Cin. Dette kan Gøres ved både Post og Get. Hvis du bruger GET, kan du ligeledes rekvirere en miljø variabel der indeholder din querystring (Number=4&bla=john), det gøres med Getenv("QUERY_STRING"), så kan du selv parse den. Del den i par ved & tegn og navn - værdi ved = tegn. Husk at blanktegn er blevet til + tegn, de skal laves om. Venlig hilsen Thue Tuxen
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.