IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème CGI en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Août 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 76
    Par défaut Problème CGI en C
    Bonjour,
    Je m'adresse à vous après deux journées de recherche. En faite, j'essaye de programmer un CGI en C qui récupère un fichier via un formulaire avec la méthode POST.
    Mon formulaire est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html>
    <head>
      <title>Transfert de fichier/title>
    </head>
     
    <body>
     
    <form name="nom_formulaire" action="http://10.193.6.56:80/cgi-bin/transfertFichier.cgi" method="post" enctype="multipart/form-data">
     
    <input type="hidden" name="MAX_FILE_SIZE" value="600000" />
    Choose a file to upload: <input name="uploadedfile" type="file" /><br />
    <input type="submit" value="Upload File" />
    </form>
     
    </body>
    </html>
    de l'autre coté j'ai écrit mon CGI de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #define MAXLEN 600000
    #define EXTRA 5
    /* 4 for field name "data", 1 for "=" */
    #define MAXINPUT MAXLEN+EXTRA+2
    /* 1 for added line break, 1 for trailing NUL */
    #define DATAFILE "essaie.wav"
     
     
    int main(void)
    {
    char *lenstr;
    char input[MAXINPUT], data[MAXINPUT];
    long len;
    printf("%s%c%c\n",
    "Content-Type:text/html;charset=iso-8859-1",13,10);;
    lenstr = getenv("CONTENT_LENGTH");
    if(lenstr == NULL)
    printf("lentstr problem\n");
     else if ( sscanf(lenstr,"%ld",&len)!=1)
    printf("error sscanf.\n");
     else if ( len > MAXLEN)
      printf("len et MAXLEN prob.\n");
     
    else {
      FILE *f;
      fgets(input, len+1, stdin);
      f = fopen(DATAFILE, "a");
      if(f == NULL)
        printf("Sorry, cannot store your data.\n");
      else
        fputs(data, f);
      fclose(f);
      printf("Thank you! Your contribution has been stored.\n");
      }
    return 0;
    }
    le problème est que dans le résultat j'ai une page vide avec aucune information et aucun message de ce que j'ai spécifié.
    J'ai essayé de débugger mais sans vain

    Pour résumer je veux uploader un fichier essaie.wav de ma machine windows et je voudrais que mon programme CGI qui se trouve sur le serveur linux récupère se fichier et le stocke sur son disque dur.


    Avez vous une idée

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ta CGI doit cracher un header HTTP "complet". Donc, si tu veux avoir quelque chose de visible, même des messages d'erreur, il faut au minimum que tu retournes un code HTTP 500 et ton type MIME.

    Ou en cas de succès, HTTP 200.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Août 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 76
    Par défaut
    Merci pour la réponse,

    Est ce que vous pouvez m’éclaircir un peu, je débute avec le CGI donc je trouve ta réponse un peu compliqué pour moi

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je pensais à un truc de ce genre-là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <stdio.h>
    #include <stdlib.h>
    #define MAXLEN 600000
    #define EXTRA 5
    /* 4 for field name "data", 1 for "=" */
    #define MAXINPUT MAXLEN+EXTRA+2
    /* 1 for added line break, 1 for trailing NUL */
    #define DATAFILE "essaie.wav"
     
    void PrintHeaderAndMessage(int code, char const *code2, char const * message)
    {
    	printf("HTTP/1.0 %d %s\r\n", code, code2);
    	printf("%s","Content-Type:text/html;charset=iso-8859-1\n");
    	putchar('\n');
    	printf("%s", message);
    }
     
    int main(void)
    {
    	char *lenstr;
    	char input[MAXINPUT], data[MAXINPUT];
    	long len;
     
    	lenstr = getenv("CONTENT_LENGTH");
    	if(lenstr == NULL)
    		PrintHeaderAndMessage(500, "internal server error", "lentstr problem\n");
    	else if ( sscanf(lenstr,"%ld",&len)!=1)
    		PrintHeaderAndMessage(500, "internal server error", "error sscanf.\n");
    	else if ( len > MAXLEN)
    		PrintHeaderAndMessage(500, "internal server error", "len et MAXLEN prob.\n");
    	else
    	{
    		FILE *f;
    		fgets(input, len+1, stdin);
    		f = fopen(DATAFILE, "a");
    		if(f == NULL)
    			PrintHeaderAndMessage(500, "internal server error", "Sorry, cannot store your data.\n");
    		else
    		{
    			fputs(data, f);
    			fclose(f);
    			PrintHeaderAndMessage(200, "OK", "Thank you! Your contribution has been stored.\n");
    		}
    	}
    	return 0;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Août 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 76
    Par défaut
    d'accord je comprends c'est une bonne idée, je vais essayer ça et voir ce que ça donne. attends à me voir dans pas longtemps

    j'espère que j'aurais des infos merci pour l'aide

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Août 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 76
    Par défaut
    Re,

    j'ai essayé ton code mais rien du tout, je n'ai aucun affichage page vierge

Discussions similaires

  1. problème cgi sur mon serveur
    Par stero11 dans le forum Web
    Réponses: 1
    Dernier message: 16/07/2012, 12h58
  2. Epineux problème CGI
    Par SonyBlack dans le forum Web
    Réponses: 4
    Dernier message: 27/05/2010, 01h24
  3. [session cgi] problème d'expiration de session
    Par LE NEINDRE dans le forum Web
    Réponses: 2
    Dernier message: 15/05/2006, 19h50
  4. [CGI] Problème de " et ' '
    Par LE NEINDRE dans le forum Web
    Réponses: 1
    Dernier message: 20/10/2005, 12h38
  5. [CGI]problème update de variable de session
    Par LE NEINDRE dans le forum Web
    Réponses: 1
    Dernier message: 18/10/2005, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo