C++ prog draaien in de cgi-bin

Pagina: 1
Acties:

  • EgoVD
  • Registratie: Januari 2008
  • Laatst online: 28-06-2022
Hey,

Ik zou graag een applicatie geschreven in C++ kunnen draaien in de CGI-BIN. De applicatie heb ik niet zelf geschreven en kan ik compileren met Dev-C++ en laten draaien. Het programma opent een command-venster en geeft de berekende hoeken correct weer.

Ik heb weinig tot geen ervaring met de CGI-BIN. Ik weet wel dat de CGI-BIN geactiveerd is en dat "hello world" werkt.

"Wensen"
- Graag had ik dit programma onder mijn apache(xampp)-server op windows xp in de cgi-bin laten draaien.
- Indien dit op een windows xp server gaat, zou ik dit eventueel willen draaien op een klein embedded linuxservertje.(dit servertje werkt reeds en de cgi-bin is ook geactiveerd en getest).
- indien het draait zou ik graag ook parameters aan het script meegeven; Kan dit gewoon via GET?
- Indien dit allemaal gaat, zou ik graag weten hoe ik de cgi-bin wat afscherm. Ik heb een loginsysteem in php geprogrammeerd en zou dus graag hebben dat je de cgi-bin enkel kan benaderen indien je ingelogd ben.

ivm met draaien onder apache@windows
Ik kan het bestand benaderen, maar mijn browser wil het *.exe bestand downloaden en werkt ook niet.

Weet er iemand wat er fout is? Of tips om mijn "wensen" te kunnen voltooien?

stukje van de code
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <stdio.h>
#include "spa.h"  //include the SPA header file

int main (int argc, char *argv[])
{
    spa_data spa;  //declare the SPA structure
    int result;
    float min, sec;

    //enter required input values into SPA structure

    spa.year          = 2003;
    spa.month         = 10;
    spa.day           = 17;
    spa.hour          = 12;
    spa.minute        = 30;
    spa.second        = 30;
    spa.timezone      = -7.0;
    spa.delta_t       = 67;
    spa.longitude     = -105.1786;
    spa.latitude      = 39.742476;
    spa.elevation     = 1830.14;
    spa.pressure      = 820;
    spa.temperature   = 11;
    spa.slope         = 30;
    spa.azm_rotation  = -10;
    spa.atmos_refract = 0.5667;
    spa.function      = SPA_ALL;

    //call the SPA calculate function and pass the SPA structure

    result = spa_calculate(&spa);

    if (result == 0)  //check for SPA errors
    {
        //display the results inside the SPA structure

        printf("Julian Day:    %.6f\n",spa.jd);
        printf("L:             %.6e degrees\n",spa.l);
        printf("B:             %.6e degrees\n",spa.b);
        printf("R:             %.6f AU\n",spa.r);
        printf("H:             %.6f degrees\n",spa.h);
        printf("Delta Psi:     %.6e degrees\n",spa.del_psi);
        printf("Delta Epsilon: %.6e degrees\n",spa.del_epsilon);
        printf("Epsilon:       %.6f degrees\n",spa.epsilon);
        printf("Zenith:        %.6f degrees\n",spa.zenith);
        printf("Azimuth:       %.6f degrees\n",spa.azimuth);
        printf("Incidence:     %.6f degrees\n",spa.incidence);

        min = 60.0*(spa.sunrise - (int)(spa.sunrise));
        sec = 60.0*(min - (int)min);
        printf("Sunrise:       %02d:%02d:%02d Local Time\n", (int)(spa.sunrise), (int)min, (int)sec);

        min = 60.0*(spa.sunset - (int)(spa.sunset));
        sec = 60.0*(min - (int)min);
        printf("Sunset:        %02d:%02d:%02d Local Time\n", (int)(spa.sunset), (int)min, (int)sec);

    } else printf("SPA Error Code: %d\n", result);
    system("PAUSE");
    return 0;
}


Alvast bedankt!
Thomas

[ Voor 0% gewijzigd door Creepy op 14-10-2008 10:27 ]


  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 23:47

leuk_he

1. Controleer de kabel!

apache doc al gelezen?

http://apache.active-venture.com/cgi-configure.html

(volgens mij is dit maar de helft van het verhaal...)

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 22-12-2025
Ahh, je wilt berekenen hoe laat de zon opkomt en ondergaat op een bepaalde plaats op de aarde op een bepaalde datum in php. Ik zie dat je het algoritme van Jean Meeus hebt gevonden, toevallig ook een vlaming :)

Let je wel op dat je volgens http://rredc.nrel.gov/solar/codesandalgorithms/spa/#license voor de code een licentie nodig hebt indien je dit in een commercieel project gebruikt. Er zijn ook open source of andere gratis implementaties te vinden.

Jammer trouwens dat je niet gewoon het algoritme in PHP implementeert! Alhoewel, als ik zie wat er dan uitkomt weet ik niet of dat zo'n goed idee is :/ http://www.12dstring.me.uk/suntimes.phps

Maar als je het bij een CGI applicatie wilt houden kan dat natuurlijk. Alhoewel je misschien meer hebt aan het aanroepen met popen()? Dan hoef je er geen inlog op te maken namelijk.

  • Peter
  • Registratie: Januari 2005
  • Laatst online: 27-12-2025
Sinds versie vijf heeft PHP zelf een aantal functies om de tijd van de zonsopgang te kunnen berekenen, ook aan de hand van coördinaten. Misschien is het een oplossing om naar date_sunset en date_sunrise te kijken (in de comments staan ook interessante dingen)?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:03

Creepy

Tactical Espionage Splatterer

Neem aub een C/CGI tutorial door. Je kan niet zomaar een willekeurig C programma dat voor de commandline is geschreven als CGI draaien. In C zul je een aantal zaken zelf moeten doen zodat de output correct kan worden verwerkt en zodat je parameters e.d. op kunt vangen. Dat is overigens wel iets wat o.a. PHP je volledig uit handen neemt en al voor je heeft geregeld. Zonder C kennis en zo te zien ook nagenoeg geen kennis van wat CGI nu echt inhoudt is het misschien verstand om toch eens te kijken naar een oplossing in een andere omgeving.

Je dumpt nu een lap code, die je niet zelf hebt geschreven en vraagt direct wat er fout is. Hier op GoT verwachten we meer. Dus wat heb je zelf al geprobeerd en wat lukte daar niet mee? Zeggen dat je geen kennis van C en CGI hebt is leuk maar we verwachten dan ook weer dat je jezelf eerst in de materie probeert te verdiepen en dat heb je nu niet gedaan. Dus ga of de zaken ombouwen in een omgeving die je wel kent of ga je verdiepen in C en CGI. Als je dan tegen concretere problemen aanloopt kan je natuurlijk je vraag weer hiet stellen :)

[ Voor 41% gewijzigd door Creepy op 14-10-2008 10:30 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • EgoVD
  • Registratie: Januari 2008
  • Laatst online: 28-06-2022
@leuk_he: Dedankt voor de tip

@matthijsIN:
Let je wel op dat je volgens http://rredc.nrel.gov/solar/codesandalgorithms/spa/#license voor de code een licentie nodig hebt indien je dit in een commercieel project gebruikt. Er zijn ook open source of andere gratis implementaties te vinden.
De code komt idd van die website. Het is helemaal geen commercieel product, dus geen licentieproblemen
Jammer trouwens dat je niet gewoon het algoritme in PHP implementeert! Alhoewel, als ik zie wat er dan uitkomt weet ik niet of dat zo'n goed idee is :/ http://www.12dstring.me.uk/suntimes.phps
Ik zag het niet direct zitten om alles naar php te vertalen... dat is de waarheid :) Maar als het al eens vertaalt is, opent dit nieuwe deuren :)
Maar als je het bij een CGI applicatie wilt houden kan dat natuurlijk. Alhoewel je misschien meer hebt aan het aanroepen met popen()? Dan hoef je er geen inlog op te maken namelijk.
Ik zal eens kijken wat popen() doet ;) Want liefst verkies ik PHP omdat ik daar al regelmatig eens zaken in gemaakt heb.

@Peter: dat wist ik niet. Ik zal eens de mogelijkheden onderzoeken

@Creepy:
Neem aub een C/CGI tutorial door. Je kan niet zomaar een willekeurig C programma dat voor de commandline is geschreven als CGI draaien. In C zul je een aantal zaken zelf moeten doen zodat de output correct kan worden verwerkt en zodat je parameters e.d. op kunt vangen. Dat is overigens wel iets wat o.a. PHP je volledig uit handen neemt en al voor je heeft geregeld. Zonder C kennis en zo te zien ook nagenoeg geen kennis van wat CGI nu echt inhoudt is het misschien verstand om toch eens te kijken naar een oplossing in een andere omgeving.
Ik ben gerust bereid bij te leren.
Je dumpt nu een lap code, die je niet zelf hebt geschreven en vraagt direct wat er fout is. Hier op GoT verwachten we meer. Dus wat heb je zelf al geprobeerd en wat lukte daar niet mee? Zeggen dat je geen kennis van C en CGI hebt is leuk maar we verwachten dan ook weer dat je jezelf eerst in de materie probeert te verdiepen en dat heb je nu niet gedaan. Dus ga of de zaken ombouwen in een omgeving die je wel kent of ga je verdiepen in C en CGI. Als je dan tegen concretere problemen aanloopt kan je natuurlijk je vraag weer hiet stellen
De reden waarom ik dit post is dat ik graag aanwijzingen kreeg waar ik best naar oplossingen ga zoeken. Ook zijn er al in vorige post een aantal mogelijke andere oplossingen uit de bus gekomen waarvan ik zeker de mogelijkheden eens ga bekijken. Het is zeker niet de bedoeling om mij hier vlug van af te maken, maar ik moet toch ergens beginnen?

Alvast bedankt voor de antwoorden.

Thomas

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 22-12-2025
EgoVD schreef op dinsdag 14 oktober 2008 @ 13:53:

Ik zal eens kijken wat popen() doet ;) Want liefst verkies ik PHP omdat ik daar al regelmatig eens zaken in gemaakt heb.
Met popen() kan je het programma starten en in de command line of stdin de input parameters opgeven (in c met argc en argv danwel met de STDIN file uit te lezen) en de stdout lezen (dus wat je in c met printf() output).

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 30-12-2025
Ik denk dat je een beetje een verkeerd idee hebt van wat CGI inhoudt. Het is simpelweg een protocol dat programma's (geschreven in C, C++, maar ook in allerlei scripttalen als Perl e.d.) kunnen gebruiken, zodat ze aangeroepen kunnen worden door een webserver en dus HTTP requests af kunnen handelen. Een CGI "script" (wat dus niet altijd een script is, maar ook een gecompileerd programma kan zijn) moet dus het CGI protocol spreken om gebruikt te kunnen worden. Nu is dat niet zo ingewikkeld, maar een willekeurig programma kun je dus niet zonder meer als CGI script gebruiken.

Uit je beschrijving lijkt het erop dat het helemaal niet de bedoeling is dat je dynamisch pagina's genereert met het programma; je wil gewoon het programma gebruiken en het resultaat integreren in pagina's die je nu al genereert met PHP. Het ligt dan veel meer voor de hand om gewoon het programma uit te voeren vanuit PHP en het resultaat daar verder te werken. Je hebt dan helemaal geen CGI support nodig, en je kunt gewoon de beveiliging e.d. in PHP afhandelen.

  • EgoVD
  • Registratie: Januari 2008
  • Laatst online: 28-06-2022
@peter: deze functies geven idd de juiste zonsopgang en ondergang, maar voor mij zijn de hoeken die het programma berekent belangrijk, want het zijn deze hoeken die ik nodig heb om de motoren aan te sturen.

@matthijsln: Heb ik geen proc_open() nodig? Want ik moet toch ingangsparameters kunnen meegeven en uitgangswaarden kunnen uitlezen? En dat is 2-richtingen? Of heb ik het verkeerd gelezen?
Ik moet er wel bijzeggen dat ik de proc_open()-dunctie niet werkend krijg.

@Soultaker: Bedankt voor de info. Het C-prog zou dus ingangsparameters meekrijgen, zijn berekeningen uitvoeren en de hoekberekeningen doorzenden naar php.

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 22-12-2025
Motoren aansturen?? Ben je een volautomatisch zonnescherm aan het programmeren ofzo ;)
EgoVD schreef op dinsdag 14 oktober 2008 @ 21:29:
@matthijsln: Heb ik geen proc_open() nodig? Want ik moet toch ingangsparameters kunnen meegeven en uitgangswaarden kunnen uitlezen? En dat is 2-richtingen? Of heb ik het verkeerd gelezen?
Ik moet er wel bijzeggen dat ik de proc_open()-dunctie niet werkend krijg.
popen() of proc_open() kan inderdaad allebei. Met popen() zou je dan command line arguments moeten gebruiken. Dus bijv.

$handle = popen('echo 123 456', 'r');
$read = fread($handle, 100);
echo $read;
pclose($handle);

waarbij 123 en 456 je input parameters zijn die je in c met argc/argv kan benaderen, en $read bevat de dingen die je met printf() in c print. Indien dit niet werkt kan je uiteraard wat code posten.

  • EgoVD
  • Registratie: Januari 2008
  • Laatst online: 28-06-2022
matthijsln schreef op dinsdag 14 oktober 2008 @ 21:37:
Motoren aansturen?? Ben je een volautomatisch zonnescherm aan het programmeren ofzo ;)


[...]


popen() of proc_open() kan inderdaad allebei. Met popen() zou je dan command line arguments moeten gebruiken. Dus bijv.

$handle = popen('echo 123 456', 'r');
$read = fread($handle, 100);
echo $read;
pclose($handle);

waarbij 123 en 456 je input parameters zijn die je in c met argc/argv kan benaderen, en $read bevat de dingen die je met printf() in c print. Indien dit niet werkt kan je uiteraard wat code posten.
Het zou de bedoeling zijn dat er idd een volautomatisch zonnescherm van komt, maar stap voor stap :) De motoren en de ganse constructie is meer mijn ding ;) De programmering is iets anders :p Een forum programmeren ok, nieuwscripts ook, websites ook, maar een dergelijk project zal toch serieuze uitdaging zijn!

Voor de aansturing had ik gedacht microcontrollers met ethernetaansluiting te gebruiken waarbij de berekeningen op een server gebeuren. Op die server zouden ook heel wat gegevens verzameld moeten worden. Hoe de uiteindelijke aansturing zal gebeuren, hangt af van wat ik werkend zal krijgen :d Dus alle hulp is welkom :)

Wat ik niet versta aan je voorbeeld: waar moet ik de link naar mijn programma schrijven??? spa.exe

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 10-12-2025
Je wil een device aansturen en gebruikt daar een webserver voor? Merkwaardige keus.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1