почему этот скрипт cgi не работает, но он отлично работает как отдельная программа, когда выполняется в / var / www / cgi-bin /? - PullRequest
0 голосов
/ 26 ноября 2018
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char *cognome=NULL;
    char *nome=NULL;   
    char *email=NULL;
    char *password=NULL;
    char *password2=NULL;
    FILE *file_utenti=NULL;
    file_utenti=fopen("Utenti.dat","a+");
    struct utente 
    {
        char cognome[25];
        char nome[25];
        char email[80];
        char password[64];
        char password2[64];
    };
    struct utente Utente;
    file_utenti=fopen("Utenti.dat","r"); 
    if(file_utenti!=NULL)
    printf("%s\n","File aperto correttamente in lettura");
    else
    printf("%s\n","Impossibile leggere sul file utenti");
    while(fread(&Utente, sizeof(Utente), 1, file_utenti))
    {
        printf("%s\t",Utente.cognome);
        printf("%s\t",Utente.nome);
        printf("%s\t",Utente.email);
        printf("%s\t",Utente.password);
        printf("%s\t",Utente.password2);
        printf("\n");
    }

    fclose(file_utenti);
    return 0; 
}

Если я запускаю его как скрипт cgi, он не вводится какое-то время, но работает отлично, если я запускаю его в каталоге / var / www / cgi-bin /.Он открывает файл, печатает все записи, а затем завершает работу. Конечно, я использовал html-тег в своем скрипте cgi.Я имею в виду, я использовал таблицу, чтобы показать данные из файла, но он только записывает таблицу тегов

1 Ответ

0 голосов
/ 27 ноября 2018

Следующий предложенный код:

  1. безупречно компилируется
  2. выполняет желаемую функциональность
  3. содержит предложенные изменения в комментариях к вопросу
  4. это плохая практика программирования, чтобы включать заголовочные файлы, содержимое которых не используется в коде.IE предлагают удалить оператор: #include <string.h>

А теперь предложенный код:

#include <stdio.h>
#include <stdlib.h>

int main()
{  
    struct utente 
    {
        char cognome[25];
        char nome[25];
        char email[80];
        char password[64];
        char password2[64];
    };
    struct utente Utente;

    FILE *file_utenti=fopen("Utenti.dat","r"); 

    if( file_utenti )
        printf("%s\n","File aperto correttamente in lettura");

    else
    { // fopoen failed
        perror("Impossibile leggere sul file utenti");
        exit( EXIT_FAILURE );
    }

    while(fread( &Utente, sizeof(Utente), 1, file_utenti) )
    {
        printf("%s\t",Utente.cognome);
        printf("%s\t",Utente.nome);
        printf("%s\t",Utente.email);
        printf("%s\t",Utente.password);
        printf("%s\t",Utente.password2);
        printf("\n");
    }

    fclose(file_utenti);
    return 0; 
}

Однако, вопрос не проясняет, завершается ли каждая строка через байт NUL,Если не завершен байтом NUL, код выведет мусор.

...