Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    il secondo include non viene preso HELP!

    Spiego rapidamente la situazione.
    Devo aggiornare in automatico un sito alle 4.30 circa.

    1)I dati aggiornati li prendo da una cartella ftp in automatico sotto forma di database mdb access. --> fino a qui tutto bene

    2)leggo i dati da php e li inserisco in una tabella mysql --> tutto ok

    3) esporto la tabella in un file xxxx.sql --> ok ma alla fine della creazione del file lo script si blocca e non passa al punto 4

    4) invio tramite ftp il file xxxx.sql al server in remoto. --> ok

    5) chiamo la pagina che importa il file xxx.sql nel database mysql (BigDump modificato) --> ok ma non passa alla fase successiva

    6) chiamo la pagina che esegue l'update delle altre tabelle


    Note: quando genero il file xxx.sql devo imposto l'header nel seguente modo

    # Definisco le intestazioni
    header("Content-type: text/plain");
    header("Content-Disposition: attachment; filename = $file_name");
    # Stampo il contenuto
    echo $table1;

    questa impostazione blocca l'esecuzione della pagina quando il file è completo e non mi manda avanti al successivo include.

    Allo stesso modo quando finisco le query del BigDump lo script si arresta e non procede a chiamare la pagina di aggiornamento delle altre tabelle.

    Ho pensato di fare una pagina a parte che chiama i vari passaggi uno per volta ma il risultato non cambia.

    Qualcuno riesce a darmi una mano per favore?

    P.S. mi hanno detto che usando il cron è possibile pianificare le operazioni in modo da eseguire un passo per volta ma non ho la più pallida idea di come funzioni.

  2. #2
    Per la questione degli header devi prestare molta attenzione al fatto che prima del comando:

    header(.....)

    non vi deve essere alcun comando di output a video, cioé nessun tag HTML prima del codice php, come anche nessuno spazio prima del codice php e nessun comando tipo echo o print.

    Poi, può darsi che con un unico scritp .php non ce la fai con la memoria che occupa lo script. In tal caso in php.ini c'è una direttiva (adesso non ricordo bene il nome, ma comunue c'è la parola memory) in cui è possibile aumentare la memoria in Megabyte che uno script può usare. Così come anche può essere una questione di tempo, cioé per default uno script non può superare tot secondi di tempo di esecuzione; come prima c'è una direttiva in php.

    Infine, neanch'io ho mai usato cron, però ci sono le operazioni pianificate di windows: potresti provare con quelle.

    Ciao.

  3. #3

    re

    grazie della risposta ma forse ho formulato male la domanda.

    I problemi di memodia non ci sono
    magari riporto il codice completo almeno è più chiaro.

    <?
    # PROGRAMMA DI AGGIORNAMENTO COMPLETO DEL CATALOGO

    #------------------------- CONNESSIONE FTP E DOWNLOAD CATALOGO
    $ftp_host = 'ftp.sito.com';
    $connect = ftp_connect($ftp_host) or die("Si è verificato un errore durante la connessione al server ftp");
    /* login al server ftp */
    $username = 'mio user';
    $pwd = 'mia pasw';
    $login = ftp_login($connect, $username, $pwd) or die("Si è verificato un errore durante l'accesso al server ftp");

    /* RECUPERO DI UN FILE */
    $destination_file = "c:/dispo.mdb";
    $source_file = "/WDispo/dispo.mdb";
    ftp_get($connect, $destination_file, $source_file, FTP_ASCII) or die("Errore durante il recupero del file dal server ftp");

    /* chiusura connessione al server ftp */
    ftp_quit($connect) or die("Si è verificato un errore durante la chiusura della connessione al server ftp");

    #--------------------FINO A QUI TUTTO OK---------------------

    # AGGIORNARE LA CARTELLA DISPO SU LOCALE
    # SO CHE QUESTO PASSAGGIO PUò FAR DISCUTERE MA ALMENO FUNZIONA
    #connessione a dispo.mdb
    $connstr = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\dispo.mdb;';
    $dbc = new COM("ADODB.Connection");
    $dbc->open($connstr);
    /*e poi per i recordet*/
    #seleziona tutto da dispo.mdb
    $recs=$dbc->execute("select * from dispo");

    #inserisci Codice in dispo ok
    while(!$recs->eof())
    {include ("connessione.php");
    $dati = "INSERT INTO dispo (Codice) VALUES ('$recs[Codice]')";
    mysql_query($dati);
    $recs->movenext();
    }
    #---------------------------------------------------------------------------
    $connstr = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\dispo.mdb;';
    $dbc = new COM("ADODB.Connection");
    $dbc->open($connstr);
    /*e poi per i recordet*/
    #seleziona tutto da dispo.mdb
    $recs=$dbc->execute("select * from dispo");

    #Update DISPO in dispo
    while(!$recs->eof())
    {include ("connessione.php");
    $dati3="update dispo set DISPO='$recs[DISPO]' where Codice='$recs[Codice]'";
    mysql_query($dati3);
    $recs->movenext();
    }

    #---------------------------------------------------------------------------

    $connstr = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\dispo.mdb;';
    $dbc = new COM("ADODB.Connection");
    $dbc->open($connstr);
    /*e poi per i recordet*/
    #seleziona tutto da dispo.mdb
    $recs=$dbc->execute("select * from dispo");

    #Update PrezzoRivenditore in dispo
    while(!$recs->eof())
    {include ("connessione.php");
    $dati3="update dispo set PrezzoRivenditore='$recs[PrezzoRivenditore]' where Codice='$recs[Codice]'";
    mysql_query($dati3);
    $recs->movenext();
    }
    #-----------------------FINE AGGIORNAMENTO DISPO LOCALE--------------------------

    #----------------ESPORTAZIONE DISPO LOCALE IN FORMATO SQL-------------------------

    # Configuro i parametri di accesso al mio DB
    $db_host = "localhost";
    $db_name = "prova";
    $db_user = "USER";
    $db_pass = "PASW";

    # Mi connetto al server MySQL e seleziono il DB
    mysql_connect($db_host,$db_user,$db_pass);
    @mysql_select_db($db_name) or die("Errore!");

    # Creo la funzione datadump
    function datadump ($table) {

    # Creo la variabile $result
    $result .= "# Dump of $table \n";
    $result .= "# Dump DATE : " . date("d-M-Y") ."\n\n";

    # Conto i campi presenti nella tabella
    $query = mysql_query("select * from $table");
    $num_fields = @mysql_num_fields($query);

    # Conto il numero di righe presenti nella tabella
    $numrow = mysql_num_rows($query);

    # Passo con un ciclo for tutte le righe della tabella
    for ($i =0; $i<$numrow; $i++)
    {
    $row = mysql_fetch_row($query);

    # Ricreo la tipica sintassi di un comune Dump
    $result .= "INSERT INTO ".$table." VALUES(";

    # Con un secondo ciclo for stampo i valori di tutti i campi
    # trovati in ogni riga
    for($j=0; $j<$num_fields; $j++) {
    $row[$j] = addslashes($row[$j]);
    $row[$j] = ereg_replace("\n","\\n",$row[$j]);
    if (isset($row[$j])) $result .= "\"$row[$j]\"" ; else $result .= "\"\"";
    if ($j<($num_fields-1)) $result .= ",";
    }

    # Chiudo l'istruzione INSERT
    $result .= ");\n";
    }

    return $result . "\n\n\n";
    }

    $table1 = datadump("dispo");
    #$table2 = datadump("");

    # Dò un nome al file di Dump che verrà creato
    $file_name = "dispo.sql";

    #-----------QUI INIZIANO I PROBLEMI!-----------------------------

    # Definisco le intestazioni
    #header("Content-type: application/octet-stream");
    header("Content-type: text/plain");
    header("Content-Disposition: attachment; filename = $file_name");

    # Stampiamo il contenuto
    echo $table1;

    #------------------------FINE ESPORTAZIONE DISPO SQL-----------------------------

    #------IL FILE VIENE CREATO BENE MA LO SCRIPT SI FERMA QUI!!!!!!!!!!--------------------

    #------------------------INVIARE DISPO.SQL VIA FTP--------------------------------
    /* Connessione al server ftp */
    $ftp_host = 'ftp.MIOSITO2.net';
    $connect = ftp_connect($ftp_host) or die("Si è verificato un errore durante la connessione al server ftp");

    /* login al server ftp */
    $username = 'USER';
    $pwd = 'PSW';
    $login = ftp_login($connect, $username, $pwd) or die("Si è verificato un errore durante l'accesso al server ftp");

    /* INSERIMENTO DI UN FILE */
    $destination_file = "/html/aggiornamento/dispo.sql";
    $source_file = "C:/Documents and Settings/diggio/Desktop/DISPO.sql";
    ftp_put($connect, $destination_file, $source_file, FTP_BINARY) or die("Errore durante l'upload del file $source_file nel server ftp");

    /* chiusura connessione al server ftp */
    ftp_quit($connect) or die("Si è verificato un errore durante la chiusura della connessione al server ftp");
    #-----------------------------------INVIO COMPLETATO------------------------

    #------------------------CARICA I DATI NELLA TABELLA DISPO IN REMOTO---------
    include("http://MIOSITO.net/aggiornamento/bigdump.php?start=1&fn=dispo.sql&foffset=0&totalqu eries=0");

    # QUESTO LANCIA IL BIGDUMP SUL SERVER E IMPORTA I DATI NELLA TABELLA MYSQL MA ALLA FINE DELL'IMPORTAZIONE LO SCRIPT SI BLOCCA DI NUOVO!!!!!!!!


    include("http://MIOSITO.net/aggiornamento/aggiorna.php");
    #E' LA PAGINA CHE COMPLETA L'AGGIORNAMENTO IN REMOTO
    ?>

  4. #4
    La sezione del php.ini a cui mi riferivo era questa:

    ;;;;;;;;;;;;;;;;;;;
    ; Resource Limits ;
    ;;;;;;;;;;;;;;;;;;;


    max_execution_time = ; Maximum execution time of each script, in seconds
    max_input_time = ; Maximum amount of time each script may spend parsing request data
    memory_limit = ; Maximum amount of memory a script may consume


    Provare ad aumentare tali valori non ti costa nulla! Anche era capitato che mi dava pagina bianca e non mi segnalava alcun errore. Ho aumentato tali valori e ho risolto il problema.

    Prova e fammi sapere.

  5. #5

    re

    Ho già settato i valori a livelli altissimi ma il problema rimane.

    Se si sruscisse a migliorare lo script serebbe bello comunque per ora ho risolto in un altro modo.
    Ho diviso lo script in 4 blocchi e li avvio consecutivamente da VisualCron.

    In questo modo girano perfettamente a qualunque ora e si può addirittura settare il tutto in modo che quando uno script ha terminato le sue funzioni automaticamente si passa al successivo.

    Viva VisualCron!!!!

    P.s. Per orgoglio voglio comunque riuscire a farlo girare quello script!

  6. #6
    Scusate tutti, ma ...
    Prendo un pezzetto di codice a caso da quello sopra riportato:
    codice:
    #Update PrezzoRivenditore in dispo
    while(!$recs->eof())
    {include ("connessione.php"); 
    $dati3="update dispo set PrezzoRivenditore='$recs[PrezzoRivenditore]' where Codice='$recs[Codice]'";
    mysql_query($dati3);
    $recs->movenext();
    }
    un include dentro un ciclo while ??????

    Explain me, please!

    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  7. #7
    Sono perfettamente d'accordo con te.
    Comunqe penso che il problema sia nella funzione datadump. Mi spiego. In una funzione per poter utilizzare variabili definite esternamente occorre usare la dicitura global $......

    evidentemente c'è qualche problema con la connessione a mysql.

    prova a fare così:

    # Mi connetto al server MySQL e seleziono il DB
    $connectio = @mysql_connect($db_host,$db_user,$db_pass);
    @mysql_select_db($db_name) or die("Errore!");


    # Creo la funzione datadump
    function datadump ($table)
    {
    global $connection;

    # Creo la variabile $result
    $result = "# Dump of $table \n";
    $result .= "# Dump DATE : " . date("d-M-Y") ."\n\n";

    # Conto i campi presenti nella tabella
    $query = mysql_query("select * from $table", $connection);
    $num_fields = @mysql_num_fields($query);

    ...............
    }

  8. #8
    Originariamente inviato da homezappa
    Scusate tutti, ma ...
    Prendo un pezzetto di codice a caso da quello sopra riportato:
    codice:
    #Update PrezzoRivenditore in dispo
    while(!$recs->eof())
    {include ("connessione.php"); 
    $dati3="update dispo set PrezzoRivenditore='$recs[PrezzoRivenditore]' where Codice='$recs[Codice]'";
    mysql_query($dati3);
    $recs->movenext();
    }
    un include dentro un ciclo while ??????

    Explain me, please!

    Zappa
    Hai ragione è poco ortodosso e, sicuramente, una svista ma se contiene solo istruzioni di connessione al DB, non crea problemi al limite rallenta l'esecuzione dello script; se poi contiene altre generi di istruzioni allora sì ke può dare problemi.

  9. #9

    re

    L'include nel ciclo while contiene solo le istruzioni di connessione a mysql

    Il motivo per cui sono state inserite nel ciclo while è perchè mettendole fuori non mi facevano ripristinare la connessione al db access.

    Lo script viene rallentato ma di poco.

    Il problema piuttosto è quando il processo si interrompe dopo aver generato il file di output xxx.sql

    P.s. So che il codice non è un gran che ma sono solo tre settimane che smanetto con il PHP :master:

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.