Problema import per aggiornamento

  • Creatore Discussione Creatore Discussione egialma
  • Data di inizio Data di inizio

egialma

Nuovo Utente
3 Ott 2012
29
0
0
Ciao a tutti, prima che qualcuno mi riprenda per aver messo in questa sezione il presente messaggio rispondo dicendo che sinceramente non sapevo in quale sezione "postarlo".
Ecco il dunque, ho un problema che sto rincorrendo da circa un mese e non riesco a venirne a capo perciò mi rivolgo a voi guru dei sistemi per avere una mano.

Sto utilizzando un database MySQL, un web server apache e PHP per gestire l'inserimento in un archivio, tramite pagine web, di dati relativi a diverse attività.

Da quello che ho capito il database e il web server si trovano sulla stessa macchina remota, ovviamente non sono io a gestire il server, ma sono solo un utilizzatore del web server e amministratore del solo mio db, e non del sistema.

Il collegamento al db e al web server avviene tramite una connessione VPN SSL (Adito) che apre un portale sul PC server.

Ora devo aggiornare il db con dei dati che risiedono in 7 file in formato testo; ho provato diverse strade ma arrivati ad un certo punto le ho trovate tutte sbarrate:

1) tentativo, ho provato a recuperare i dati tramite VBA per Access elaborarli estraendo alcuni dati e riducendo il numero dei file a 4, salvarli in formato xml e importali con php nel database; l'ostacolo incontrato è stato le dimensioni enormi dei file, php si piantava nel tentativo di elaborare i file.

Due premesse, la prima i file txt sorgenti con cui dovrei aggiornare il db si trovano su un'altra rete e sono raggiungibili esclusivamente da VPN cisco, perciò non posso usare php per estrarre i file, ecco perchè l'utilizzo di Access.
La seconda, i file txt comprendono in media circa 180 colonne per 47000 righe ecco perché i file xml sono enormi.

2) tentativo, sempre da access recupero i file e li elaboro come nel tentativo precedente, solo che adesso ho provato a salvare i 4 file in formato testo per importarli, in secondo tempo, con php nel database. Sono riuscito a elaborare in php i file,in formato testo le dimensioni sono più ridotte, sistemarli secondo le mie esigenze e importarli nel db; l'ostacolo in questo caso è stato il tempo di esecuzione di php per l'inserimento, nelle prove avevo usato un file con qualche riga, 3 - 4 righe e funzionava, ma con i file completi no, andava in time error, ho provato ad estendere il set_time_limit fino a 1000, ma il risultato non è cambito di molto poiché questa volta era il timer del Web serve che scadeva. Ho sentito il gestore del server il quale mi ha detto che non poteva allungare ulteriormente il tempo per l'esecuzione delle pagine web poichè sarebbero rimaste caricate nella cache del server, anche dopo la loro esecuzione, per troppo tempo, affossando le performance del sistema... (io non sono un esperto e mi fido di ciò che mi ha detto)

3) tentativo, sempre da access recupero i file e li elaboro come nel tentativo precedente in formato testo, questa volta li ho elaborati in php e ho creato altri file sempre in formato testo da importare nel database con l'ausilio di workbench. Anche in questo caso devo precisare una cosa, ho provato ad importare i file testo direttamente nel db senza passare dall'elaborazione in php, ma non ha funzionato, il motivo principale scoperto è la presenza di campo nulli nei file che MySQL non riesce a riconoscere e perciò faceva slittare il dato contenuto in una colonna nella colonna precedente danneggiando in questo modo l'informazione da inserire nel db.
In questo caso la procedura prevede l'aggiornamento del db, tramite il caricamento dei file txt, rielaborati da php, in tabelle generate appositamente, una per file e poi tramite query di insert e update andare a modificare le tabelle contenenti i dati.
La procedura veniva passata a workbench tramite un file di script in sql; l'ostacolo in questo caso è il comportamento "ramdomico" dello script, per cause non ancora identificate, la procedura alcune volte veniva portata a termine, ma nella stragrande maggioranza si piantava ogni volta in punti diversi dello script.
Alcune volte anche nella semplice istruzione di creazione di una tabella.
Ovviamnete anche workbench si collega al db MySQL tramite una connessione VPN SSL (Adito), i file di testo per l'aggiornamento e il file di script sql si trovano sulla macchina locale.
Questa volta trovandomi molto vicino alla soluzione del problema ho chiesto maggior supporto al gestore del server, ma anche lui non mi ha saputo dire nulla per risolvere il problema, una cosa riscontrata è che le tabelle coinvolte nell'aggiornamento si bloccavano durante il tentativo di aggiornamento e allo scadere dei 600 secondi di time out di MySQL, rimanevano "loccate" impedendo qualsiasi intervento su di esse, unica soluzione per sbloccare era riavviare il db.

Ora sto tentando la strada numero 4, un tentativo di aggiornamento tramite javascript, mentre di MySQl, PHP e VBA ho qualche nozione di base, di javascript non so assolutamente nulla, non so neppure da che parte cominciare a scrivere un pezzo di codice, ma ci sto provando lo stesso.
La scelta è ricaduta su questo sistema, primo perché le ho provate tante, una in più non guasta e poi perchè da quello che capito, poco in realtà, posso connettermi al db in modo diretto senza passare da php, il sistema javascript indipendente o credo dalla pagina web e spero in questo modo di bypassare i problemi di time out, se così non fosse cortesemente avvertitemi che abbandono e provo altre strade... comunque
Sempre da access recupero i file e li elaboro come nel tentativo precedente in formato testo, li ho elaborati in php e creato un array che vorrei passare a javascript per poi importarlo nel database e qui ho incontrato il primo problema non riesco a passargli l'informazione.
In php ho creato l'array in questo modo:

PHP:
	$Fr = fopen($Path.$File,"r"); // apro il file txt da elaborare in lettura dove in $Path risiede il percorso e in $File il nome del file
        $Array_Nsis_1_PHP = array();
	if ($Fr) { // verifico la corretta apertura
		while (!feof($Fr)) {  // leggo il file fino alla fine
			$lines[] = fgets($Fr); // inserisco le righe del file in un array 
		} 
		fclose($Fr); // chiudo il file
		$Rows = 0;  // azzeramento contatore riga per contare i campi dell'array da passare a javascript
		foreach($lines as $line) { // definisco un ciclo per il numero delle righe e ne estrapolo il contenuto
		       if ($Rows != 0){ // salta l'inestazione
                                $ArrayRow = explode($Sep,$line); // converto la righa in array usando il separatore $Sep per delimitare i dati
				$SARF_ZONA_ID = $ArrayRow[0]; // int(1)
				$SARF_CODICE = $ArrayRow[1]; // int(4)
                                //...
                                //...
				//elaboro ogni campo estratto dall'array
                               // ...
                               // ...
                               $FI_ROLLOUT_STATUS = $ArrayRow[253];  // varchar(255)
				if ($ArrayRow[253] == "0"){ // sostituisco il valore 0 con -
				        $FI_ROLLOUT_STATUS = "-";
				}
                               // definisco in nuovo array da passare a javascript
                               $Array_Nsis_1_PHP[$Rows][1] = $FI;
			       $Array_Nsis_1_PHP[$Rows][2] = $SHORT_CODE;
                                ...
                                ...
                                ...
                                ...
                               $Array_Nsis_1_PHP[$Rows][36] = $FI_ROLLOUT_STATUS;
                              // da come si può vedere dai contatori dopo le opportune modifiche sono passato, per questo file, da 253 campi o colonne a 36
                              // mentre le righe o records sono 47200
                      }
		      $Rows ++;
		}
	}else{
		$msg = "Read file ".$File." impossible!"; // messaggio di errore
		header("Location: searchadmin.php?msg=".$msg); // ricarico la pagina iniziale visualizzando il messaggio di errore
	}

Dopo svariate modifiche a pezzi di codice non funzionante ho ridotto l'Array multidimensionale a un array semplice e sto tentando di lavorare su questo per poi modificarlo in modo che possa passare l'intero array multidimensionale, perciò l'ultima parte del codice php l'ho modificato in questo modo:

PHP:
        $Array_Nsis_1_PHP_prova = array();
	$Array_Nsis_1_PHP_prova[$Rows] = $FI;

andando a riempire l'array con solo un informazione e il codice di javascript è stato così modificato:

Codice:
<script language="javascript"> 

var myJsArray = new Array(); 

<?php for( $i=0; $i < $Array_Nsis_1_PHP_prova.length; $i++) { ?> 

myJsArray[<?php $i; ?>] = "<?php $Array_Nsis_1_PHP_prova[$i]; ?>"; 
document.write(myJsArray);

<?php } ?> 

</script>

ma non funziona, visualizzo una pagina vuota, ho provato ad inserire anche "echo" nella parte php, poiché ho trovato vari esempi dove vengono riportate entrambi le diciture, ma non funziona ugualmente

Codice:
<script language="javascript"> 

var myJsArray = new Array(); 

<?php for( $i=0; $i < $Array_Nsis_1_PHP_prova.length; $i++) { ?> 

myJsArray[<?php echio $i; ?>] = "<?php echo $Array_Nsis_1_PHP_prova[$i]; ?>"; 
document.write(myJsArray);

<?php } ?> 

</script>

Dove sbaglio? Qualcuno potrebbe aiutarmi?

Si accettano anche suggerimenti per modificare drasticamente la procedura di aggiornamento.

Grazie mille
 

Discussioni simili