Visualizzazione dei risultati da 1 a 7 su 7

Discussione: help cgi c++

  1. #1

    help cgi c++

    salve a tutti ho buttato giù un semplice programmino per la gestione di un sito con accesso e registrazione tramite cgi...solo che non riesco a compilarlo e mi da l'errore impossibile trovare il file specificato...mi potete aiutare a capire..??!!
    il codice è commentato riga per riga...
    grazie infinitamente e anticipatamente ragazzi

    ho provato a compilare con dev-c++

    una cosa ..ho provato anche a compilare con winscp da shell con cc -o ma anche li mi da problemi...
    aiuto vi prego
    questa è la cartella con i sorgenti

    http://www.megaupload.com/?d=PO410RGX

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Anzitutto devi chiarire perche` scrivi in CGI e non in programmazione.

    Poi devi postare un minimo di codice: possibilmente solo quello che da` il problema.
    Tieni presente che una cartella zippata non la scarico per principio (troppo semplice inserirci degli eseguibili maligni); ma anche avendo scaricato, uno dovrebbe poi rifare la compilazione per trovare l'errore.

    mi da l'errore impossibile trovare il file specificato
    Hai gia` controllato quale file sta cercando e se hai quel file? E` una libreria? E` un file tuo che deve aprire?
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Meglio spostarlo in programmazione
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  4. #4
    allora ho cambiato un pò di codice perchè il mio aveva qualche problema...ora inserisco qui il codice che non mi fa compilre..

    codice:
    #include <iostream.h>
    #include <fstream.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    #include <unistd.h>
    
    // Define Variables
    
    // Data Dir is the directory on your server that you wish to store the 
    // count files in.  Each page that has the counter on it will have it's own 
    // file and a lock file will also be created in this directory.
    
    const char data_dir[] = "/path/to/data/";
    
    // Valid-URI allows you to set up the counter to only work under specific 
    // directories on your server.  Include any of these directories as they 
    // appear in a URI, into this array.  More information on URI's available in 
    // README.  num_valid_uri is the number of valid URI's you have in the array.
    // As it is currently set, both valid uri and invalid uri blank, all pages
    // will be allowed.
    
    const int  num_valid_uri = 0;
    const char valid_uri[num_valid_uri][128] = { };
    
    // Invalid-URI allows the owner of this script to set up the counter so 
    // that certain portions of the web server that may be included in Valid-URI 
    // cannot use the program.  Set num_invalid_uri to 0 and clear the array if
    // you don't want to use this.
    
    const int  num_invalid_uri = 0;
    const char invalid_uri[num_invalid_uri][128] = { };
    
    /****************************************************************************/
    // Set Options
    
    // Show Link allows you to add a link around the counter to point to 
    // either instructions explaining to users how to set this up on the system 
    // (useful if a system administrator wants to allow anyone to set things up 
    // themselves).  Setting it to "" will make no link, otherwise put the URL
    // you want linked to the count here.
    
    const char show_link[] = "http://www.scriptarchive.com/";
    
    // When Auto-Create is enabled, users will be able to auto-create the 
    // count on their home pages by simply imbedding the Server Side Includes 
    // call.  Setting auto_create to 1 enables it, 0 will disable it. Only 
    // users in @valid_uri will be allowed to auto create.
    
    const int auto_create = 1;
    
    // Show Date will show the date of when the count began if you set this 
    // option to 1.  It will appear in yor document as [Count] hits since [Date].
    // Set this to 0 and it will simply return the [Count].
    
    const int show_date = 1;
    
    // Lock Seconds will define the number of seconds the script should sit 
    // and wait for the lock file to be gone before it will overwrite it if it 
    // is still there.  Every now and then a user will interrupt a page, causing 
    // the script to halt and leave a lock file in place before the lock file 
    // could be removed.  This defines how long it waits.  Nothing more than
    // 2 or 3 seconds should be needed.
    
    const int lock_sec = 2;
    
    // Padding Size define how many numbers will be shown as your count.  For 
    // instance, if you want your count to say 00065 and have the zeros padded 
    // up to five digits, then set pad_size = 5;  If the number goes higher 
    // than the pad_size, don't worry, there just won't be any zero's tacked 
    // onto the front.
    
    const int pad_size = 5;
    
    /****************************************************************************/
    
    void main() {
        // Declare variables and subroutines
        char *count_page, *count_file, *lock_file;
        char c, date[32];
    
        int i, count, count_page_len;
    
        ifstream count_in;
        ofstream count_out;
    
        int  check_uri(char []);
        void error(char [], char []);
        void check_lock(char []);
        void create(char []);
        void print_count(int);
    
        // Print Content-type header for browser
        cout << "Content-type: text/html\n\n";
    
        // Get the page location from the DOCUMENT_URI or QUERY_STRING
        // environment variables.
        if (!getenv("DOCUMENT_URI") && !getenv("QUERY_STRING"))
            error("no_uri","X");
    
        // Get the count page's length and store the page name into count_page
        if (strlen(getenv("QUERY_STRING")) > 0)
        {
            count_page_len = strlen(getenv("QUERY_STRING"));
            count_page = new char[count_page_len];
            strcat(count_page,getenv("QUERY_STRING"));
        }
        else
        {
            count_page_len = strlen(getenv("DOCUMENT_URI"));
            count_page = new char[count_page_len];
            strcat(count_page,getenv("DOCUMENT_URI"));
        }
    
        // Check Valid-URI to make sure user can use this program.
        if (!check_uri(count_page))
            error("bad_uri","X");
    
        // Convert all non-alpha characters to _ to avoid security risks.
        for (i = 0; i < count_page_len; i++)
            if (!((count_page[i] > 96 && count_page[i] < 123) ||
                  (count_page[i] > 64 && count_page[i] < 91)  ||
                  (count_page[i] > 47 && count_page[i] < 58)))
                count_page[i] = '_';
    
        // Generate the lock filename.
        lock_file = new char[count_page_len + 4];
        strcat(lock_file,data_dir);
        strcat(lock_file,count_page);
        strcat(lock_file,".lck");
    
        // Check to see if file is locked by program already in use.
        check_lock(lock_file);
    
        // Generate the filename for the count page's data file.
        count_file = new char[count_page_len + strlen(data_dir)];
        strcat(count_file,data_dir);
        strcat(count_file,count_page);
    
        // If the file exists, get the date and count out of it.  Otherwise, if 
        // auto_create is allowed, create a new account.  If neither of these are 
        // true, return an error.
    
        count_in.open(count_file);
    
        if (!count_in.fail())
        {
    
            // Read in the current count.
            count_in >> count;
    
            // Skip a character and read in next one to begin loop.
            count_in.get(c);
            count_in.get(c);
    
            // Read in the date until the end of file or a new line.
            i = 0;
            while (!count_in.eof() && c != '\n')
            {
                date[i] = c;
                count_in.get(c);
                i++;
            }
        }
        else if (auto_create)
        {
            count_in.close();
            create(count_file);
        }
        else
        {
            count_in.close();
            error("page_not_found","X");
        }
    
        // If the program got this far, close the file, since it hasn't been yet.
        count_in.close();
    
        // Increment Count.
        count++;
    
        // Print the Count, Link and Date depending on what user has specified 
        // they wish to print.
    
        if (strlen(show_link) > 0)
            cout << "<a href=\"" << show_link << "\">";
    
        print_count(count);
    
        if (strlen(show_link) > 0)
            cout << "</a>";
    
        if (show_date)
            cout << " hits since " << date;
    
        // Open the count file and write the new count that has been incremented.
    
        count_out.open(count_file);
    
        if (count_out.fail())
            error("could_not_increment",count_file);
        else
            count_out << count << " " << date;
    
        count_out.close();
    
        // Remove Lock File for next time script is run on that HTML page.
        unlink(lock_file);
    
        delete count_page;
        delete count_file;
        delete lock_file;
    
        exit(0);
    }
    
    int check_uri(char uri[]) {
    
        // Declare variables
        int st = 0, uri_check = 0;
        int valid_uri_len, invalid_uri_len, i, j;
    
        // For each valid URI, check to see if the current uri is included in that
        // valid URI.  If so, set the uri check flag to 1 and break out of loop.
        for (i = 0; i < num_valid_uri; i++)
        {
            valid_uri_len = strlen(valid_uri[i]);
            for (j = 0; j < valid_uri_len; j++)
            {
                if (valid_uri[i][j] == uri[st])
                    st++;
                else
                    st = 0;
    
                if (st == valid_uri_len)
                {
                    uri_check = 1;
                    break;
                }
            }
        }
    
        // Reset counter st.
        st = 0;
    
        // For each invalid URI, check to see if current uri is included in that
        // invalid URI.  If so, set the uri check flag to 0 and break out of loop.
        for (i = 0; i < num_invalid_uri; i++)
        {
            invalid_uri_len = strlen(invalid_uri[i]);
            for (j = 0; j < invalid_uri_len; j++)
            {
                if (invalid_uri[i][j] == uri[st])
                    st++;
                else
                    st = 0;
    
                if (st == invalid_uri_len)
                {
                    uri_check = 0;
                    break;
                }
            }
        }
    
        // If both num_valid_uri and num_invalid_uri are set to 0, set the uri
        // check flag to 1, because it is possible QUERY_STRING is being used.
        if (!num_valid_uri && !num_invalid_uri)
            uri_check = 1;
    
        // Return the uri check flag value.
        return uri_check;
    }
    
    void create(char count_file[])
    {
        // Declare variables and subroutines.
        char *date;
        char months[12][10] = { "January", "February", "March", "April", "May",
                                "June", "July", "August", "September", "October",
                                "November", "December" };
    
        tm *ptm;
        time_t *cur_time;
    
        ofstream count_out;
    
        void error(char [], char []);
        void print_count(int);
    
        // Set up the memory for the time and time time struct.
        cur_time = new time_t;
        ptm = new tm;
    
        // Get the time, then create the struct with time values.
        time(cur_time);
        ptm = localtime(cur_time);
    
        // Write to the file, sending back an error if it fails.
        count_out.open(count_file);
    
        if (count_out.fail())
            error("count_not_created",count_file);
        else
            count_out << 1 << " " << months[ptm->tm_mon] << " " << ptm->tm_mday << ", " << ptm->tm_year + 1900;
    
        count_out.close();
    
        // Print the Count, Link and Date depending on what user has specified 
        // they wish to print.
    
        if (strlen(show_link) > 0)
            cout << "<a href=\"" << show_link << "\">";
    
        print_count(1);
    
        if (strlen(show_link) > 0)
            cout << "</a>";
    
        if (show_date)
            cout << " hits since " << months[ptm->tm_mon] << " " << ptm->tm_mday << ", " << ptm->tm_year + 1900;
    ;
    
        delete date;
        delete ptm;
        delete cur_time;
    
        exit(0);
    }
    
    void print_count(int count)
    {
        // Declare variables.
        int i, size = 0;
        float count_tmp = count;
    
        // This determines the size of the count integer by divinding by 10 until
        // the result is less than 1.
        while (count_tmp >= 1)
        {
            count_tmp /= 10;
            size++;
        }
    
        // Pad the number with 0's if pad_size is greater than the count size.
        for (i = 0; i < (pad_size - size); i++)
            cout << 0;
    
        // Print the count.
        cout << count;
    }
    
    void error(char error[], char opt_file[])
    {
        // Determine which flag was set and output appropriate error.
        if (strcmp(error,"page_not_found") == 0)
            cout << "[TextCounter Fatal Error: This Page Not Found; Auto-Create Option Disabled]";
        else if (strcmp(error,"no_uri") == 0)
            cout << "[TextCounter Fatal Error: No Document URI or File Flag specified]";
        else if (strcmp(error,"bad_uri") == 0)
            cout << "[TextCounter Fatal Error: This Page Not In Valid URI]";
        else if (strcmp(error,"count_not_created") == 0)
            cout << "[TextCounter Fatal Error: Could Not Write to File " << opt_file << "]";
        else if (strcmp(error,"could_not_increment") == 0)
            cout << "[TextCounter Fatal Error: Could Not Increment Counter File " << opt_file << "]";
    
        exit(0);
    }
    
    void check_lock(char lock_file[])
    {
        // Declare variables.
        int i;
    
        ifstream test_in;
        ofstream test_out;
    
        // For the number of seconds defined in lock_sec...
        for (i = 1; i <= lock_sec; i++)
        {
            // Open the file for reading.
            test_in.open(lock_file);
    
            // If that fails, the lock file doesn't exis.  We create the lock file
            // and exit the loop.  Otherwise sleep for a second.
            if (test_in.fail())
            {
                test_out.open(lock_file);
                test_out << 0;
                test_out.close();
                break;
            }
            else
                sleep(1);
    
            // Close the file if it is still open.
            test_in.close();
        }
    }

    l'errore che mi da nel compilarlo invece è il seguente...

    siccome sono su server linux ho compilato da shell con il comando cpp -o



    Uploaded with ImageShack.us


    cos'è secondo voi?
    cosa dovrei fare per compilarlo per bene?
    grazie ancora per la disponibilità

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Gli header corretti sono questi.
    codice:
    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    #include <cstring>
    #include <ctime>
    
    using namespace std;
    
    int main() {
    ...
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  6. #6
    veramente gentile .. cosi funziona grazie infinite .un altra cosa..se dovessi ora richiamare il cgi nell'html basta che indico ad esempio il percorso relativo dove si trova il file .cgi?

    nel senso per far vedere il numero di visitatori

    basta che rimando con

    action="http://193.205.129.86/home/cgi-bin/tcounter.cgi"?

    grazie mille ancora ...e scusa per l'ignoranza..

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    O quello o il percorso per i cgi mappato nel webserver e poi passare i parametri di interrogazione (se ce ne sono).
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.