Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822

    PHP: quali sono i limiti delle variabili ?

    Ciao ragazzi

    ho un grosso problema che cerco di spiegare il piu brevemente possibile..
    sto realizzando un calendario per la gestione della commessa. Ad esempio un lavoro inizia oggi e puo durare diversi mesi. Il mio programma, valutando le ferie.. malattie .. scioperi ..ecc ecc degli operai, deve dire quando sarà terminato il lavoro.
    Io lavoro con i secondi per cui un progetto di 3-4 mesi implica un valore enorme memorizzato in una variabile. Ad esempio 6 mesi corrispondono circa a 26.400.000 secondi. Il problema nasce qui. In un database inserisco dei valori come NOME OPERATORE (colui che lavora), DURATA (i secondi lavorati in un giorno) e COMMESSA (il nome o sigla del progetto al quale lavora).
    Ad un certo punto, dopo aver mandato in esecuzione il programma ricevo il messaggio di errore "PHP has encountered a Stack overflow".
    Subito credevo fosse colpa della funzione che ho usato per controllare se il giorno lavorativo fosse un festivo. In tal caso faccio fare un po di cose in piu al programma. Per cui ho eliminato questo controllo facendo lavorare (VIRTUALMENTE !!) gli operai tutti i giorni. Anche in questo caso ricevo l'errore "PHP has encountered a Stack overflow".
    Nel primo caso (CON ferie e tutto il resto) l'errore si manifesta intorno ai 25.000.000 di secondi
    Nel secondo caso (SENZA ferie ....) l'errore si manifesta intorno ai 33.000.000 di secondi
    Cosa puo dare questo errore ? Io escludo un errore di progammazione in quanto se fosse cosi l'errore sarebbe uscito molto prima visto che in tabella scrive circa 160 righe (caso 1) e circa 190 righe (caso 2)
    Aiuto !!
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  2. #2
    Utente di HTML.it L'avatar di Think
    Registrato dal
    Jun 2005
    Messaggi
    1,008
    Ma scusa.. perchè conteggi in secondi???
    disolito le ore bastano,,


  3. #3
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    si è vero ma il cliente per motivi suoi particolari di lavoro, vuole il conteggio in secondi. Provero a convincerlo di passare alle ore ma il problema potrebbe essere causato dall'elevato numero memorizzato nella varibile dei secondi ?
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  4. #4
    Utente di HTML.it L'avatar di Think
    Registrato dal
    Jun 2005
    Messaggi
    1,008
    Originariamente inviato da ivy_76
    si è vero ma il cliente per motivi suoi particolari di lavoro, vuole il conteggio in secondi. Provero a convincerlo di passare alle ore ma il problema potrebbe essere causato dall'elevato numero memorizzato nella varibile dei secondi ?

    io le metterei in ore. poi al cliente gliele trasformi in secondi! lo sbaglio è poco

    ma cliente PRECISO!
    il tuo tempo di lavoro lo vuole sapere in secondi??



  5. #5
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    gia è vero non ci avevo pensato .... posso provare a fare cosi.

    Il tempo glielo calcolo in ore !!

    Grazie
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  6. #6
    Utente di HTML.it L'avatar di Think
    Registrato dal
    Jun 2005
    Messaggi
    1,008
    Originariamente inviato da ivy_76
    gia è vero non ci avevo pensato .... posso provare a fare cosi.

    Il tempo glielo calcolo in ore !!

    Grazie

    comunque mi chiedo sempre perchè calcolare in secondi???

    se """"proprio""" vuoi essere preciso lo fai in minuti che già è uno spreco.

    Ma in secondi è proprio inutile.

    Su base mensile la differenza e niente e su base annuale nulla.
    Inutile al max quindi :master:


  7. #7
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    ho sentito il cliente e ora lavoriamo in ORE. cmq il problema viene riprosto. Vi allego il codice magari qualcuno piu in gamba di me ci capisce qualcosa... provate
    copiatelo cosi com'è in una pagina PHP. Create in una tabella che volete ad esempio CALENDARIO i campi ID (autoincrementale), commessa (varchar), data (tipo data), tempooccupato (intero). Fate un prova con una commessa che dura quanto volete. Esprimetelo in secondi che poi saranno convertiti in ore. Il limnite è circa 35.000.000 secondi.
    Create A MANO un record (uno solo) che contenga un tempooccupato pari a 49. E'necessario che ci sia questo record. Questo è il programma ridotto all'osso che non tiene conto di ferie e che deve avere il record iniziale



    <?
    $DB = "database" ;

    mysql_connect("localhost","","") or die("ERRORE: Database non connesso");
    mysql_select_db($DB) or die("ERRORE: Database $DB non selezionato");

    function crea_domani($adesso)
    {
    // mi passa la data di oggi e restituisce quella di domani
    // le date sono ENTRAMBE nel formato americano

    list($anno,$mese,$giorno) = explode("-",$adesso);
    $domani=date ("Y-m-d" ,mktime(0,0,0, date($mese), $giorno+1,$anno));
    return $domani;
    }


    function crea_Calendario($id_commessa, $secondi, $data, $calendario)
    {
    echo "
    INIZIO : $id_commessa, $secondi, $data, $calendario
    ";
    // Preparazione delle variabili per la loro elaborazione

    $giorno = 49; // ore in un giorno dei 7 operai

    $query = "SELECT SUM(tempooccupato) FROM $calendario WHERE data='$data'";
    $dati = mysql_Query($query) or die (mysql_error());
    $row = mysql_fetch_Array($dati);
    $tempoRecord = $row[0];

    switch ($tempoRecord) // controllo il dato che ho estratto
    {
    case $tempoRecord= $giorno:
    {
    // sono in questo caso: Giorno attuale è pieno per cui devo lavorare nel giorno successivo (DOMANI)
    if ($secondi <= $giorno)
    { echo "
    1
    ";
    // se la commessa dura al massimo quanto un giorno
    // - lavoro domani
    // - il tempo occupato è l'intero tempo della commessa

    $domani = crea_domani($data);
    $query = "INSERT INTO $calendario (commessa, data, tempooccupato) VALUES ('$id_commessa','$domani','$secondi')";
    $dati = mysql_query($query) or die (mysql_error());
    echo "
    scrivo: $query
    ";
    }

    else
    {
    // devo spalmare la commessa su piu giorni
    // - creo domani
    // - mi calcolo il resto da passare alla funzione calendario
    // in tabella scrivo la quantita massima lavorativa cioè $GIORNO
    echo "
    2
    ";
    $domani = crea_domani($data);
    $resto = $secondi - $giorno;

    $query = "INSERT INTO $calendario (commessa, data, tempooccupato) VALUES ('$id_commessa', '$domani', '$giorno')";
    $dati = mysql_query($query) or die (mysql_error());
    echo "
    scrivo: $query
    ";
    echo "2a";
    crea_Calendario($id_commessa, $resto, $domani, $calendario) ;
    }

    break;
    }

    } // FINE SWITCH

    } // FINE FUNZIONE


    // -------------------- I N I Z I O P R O G R A M M A ++++++++++++++++++++


    $calendario = "calendario" ;

    $secondi_commessa = 40000000; // tempo di durata della commessa
    $ore = round($secondi_commessa / 3600 );

    $id_commessa = "0010";
    $oggi = "2005-07-31" ;

    crea_Calendario($id_commessa, $ore, $oggi, $calendario);

    /* ************************************************** ************** */

    echo "<table border=1 align=center width=50%><tr><td>Operatore</td><td>data in tabella</td><td>tempo da inserire</td></tr>" ;
    echo "<tr><td align=center colspan='3'>La commessa ha una durata di $secondi_commessa secondi</td></tr>";
    echo "</table>";



    ?>
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

  8. #8
    Utente di HTML.it L'avatar di ivy_76
    Registrato dal
    Dec 2004
    Messaggi
    1,822
    qualcuno lo ha provato ? Non capisco se è il mio codice che lo fa piantare o se è un limite del php !
    TORTA DI RISO .. F I N I T A !!

    Da M.C.S.A. a impiegato pubblico :-(

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 © 2025 vBulletin Solutions, Inc. All rights reserved.