View Full Version : [PHP]Esportare dati in csv
Ciao a tutti,
premetto che sono un neofita e che ho provato quasi tutti i codici dei post che parlano dell'argomento, ma non riesco.
Dovrei da una tabella mysql creare e salvare un file in csv o txt..
Quello che ho capito è che devo usare select into outfile.. ma proprio non riesco a farlo funzionare...
ho trovato un script funzionante solo che bisogna aprirlo dal browser e ti fa scegliere dove salvarlo..
io invece ho bisogno di eseguire lo script tramite terminale che in automatico mi crea e salva il file in una cartella sul server
Mi aiutate a realizzare questo script?
Grazie in anticipo
Master FO
26-08-2011, 13:26
Ciao a tutti,
premetto che sono un neofita e che ho provato quasi tutti i codici dei post che parlano dell'argomento, ma non riesco.
Dovrei da una tabella mysql creare e salvare un file in csv o txt..
Quello che ho capito è che devo usare select into outfile.. ma proprio non riesco a farlo funzionare...
ho trovato un script funzionante solo che bisogna aprirlo dal browser e ti fa scegliere dove salvarlo..
io invece ho bisogno di eseguire lo script tramite terminale che in automatico mi crea e salva il file in una cartella sul server
Mi aiutate a realizzare questo script?
Grazie in anticipo
L'utente mysql che esegue una SELECT INTO OUTFILE deve avere il permesso FILE (che generalmente gli hosting condivisi non danno).
Se il tuo utente non ha questi permessi devi trovare soluzioni alternative, tipo scrivere un file in formato csv tramite php e salvarlo da qualche parte.
il server su cui lavoro è mio..
Master FO
26-08-2011, 13:34
il server su cui lavoro è mio..
Allora controlla che l'utente abbia il permesso (poi magari stai operando da root, e il problema non si pone :sofico: ).
Ma ti dà un errore?
sto usando questo ho modificato i parametri, ma il file non viene generato.. :muro:
<?php
$link = mysql_connect('localhost', 'root', 'pwd');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
$db = mysql_select_db('dbprova',$link);
//specify what query to use to pull data.
$select = "SELECT * FROM `dati`";
$result = mysql_query($select);
while($myrow = mysql_fetch_array($result))
{
extract($myrow);
//specify what query to use for create text files with csv data
//in our case we create files with testtable_ and ID which is unique
//per row. We use the same ID in where clause to limit one record at a time
//modify this part to your needs. Eg change delimiter from , to - or something else
$export = "
SELECT * INTO OUTFILE '/var/www/dati.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
FROM dati ";
mysql_query($export);
}//loop until we are done exporting all records.
?>
Master FO
26-08-2011, 13:39
sto usando questo ho modificato i parametri, ma il file non viene generato.. :muro:
<?php
$link = mysql_connect('localhost', 'root', 'pwd');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
$db = mysql_select_db('dbprova',$link);
//specify what query to use to pull data.
$select = "SELECT * FROM `dati`";
$result = mysql_query($select);
while($myrow = mysql_fetch_array($result))
{
extract($myrow);
//specify what query to use for create text files with csv data
//in our case we create files with testtable_ and ID which is unique
//per row. We use the same ID in where clause to limit one record at a time
//modify this part to your needs. Eg change delimiter from , to - or something else
$export = "
SELECT * INTO OUTFILE '/var/www/dati.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
FROM dati ";
mysql_query($export);
}//loop until we are done exporting all records.
?>
è una domanda banale, ma /var/www ha i permessi a 777? esiste per caso già un file dati.txt?
Nel caso esista già ti consiglio di cancellarlo e di crearne uno nuovo ogni volta. Così eviti di avere problemi
permessi a 777 ok
il file non esiste.. :muro: :muro: :muro:
Master FO
26-08-2011, 13:46
Prova ad eseguire solo la query $export
stessa cosa non da errori ma il file non viene generato,,,
qualcosa si sta "muovendo"
il file me lo crea solo se imposto come cartella /tmp ...
penso che ci sarà qualche percorso da modificare in my.cnf ...
è possibile che sia così?
Master FO
26-08-2011, 14:38
qualcosa si sta "muovendo"
il file me lo crea solo se imposto come cartella /tmp ...
penso che ci sarà qualche percorso da modificare in my.cnf ...
è possibile che sia così?
Non credo, ma se da un'altra parte te lo genera è sicuramente un problema di permessi.
va beh.. per ora va bene così.... l'importante è che lo crea...
altra domanda..
posso creare io la struttura del csv?
dovrei innanzitutto inserire anche il nome dei campi, poi posso aggiungere dei campi con dei valori predefiniti?
la mia tabella adesso ha campo1 campo2 campo3 (con valori diversi)
io vorrei nel csv inserire camponuovo1 (con valore true) camponuovo 2 (con valore false) ecc..
Master FO
26-08-2011, 14:52
Una volta creato tramite SELECT INTO OUTFILE hai un normalissimo file di testo, a cui puoi aggiungere quello che vuoi.
Per quanto riguarda l'intestazione ti basta inserire in cima al file una cosa tipo:
Campo1;Campo2;Campo3;Campo4\n
Per i campi nuovi dovresti aggiungere ad ogni riga del csv un nuovo valore separato da punto e virgola.
non mi va...
potresti inserirmeli al codice che ho postato prima please?
Master FO
26-08-2011, 15:09
non mi va...
potresti inserirmeli al codice che ho postato prima please?
Per le intestazioni questo codice dovrebbe funzionare
$link = mysql_connect('localhost', 'root', 'pwd');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
$db = mysql_select_db('dbprova',$link);
$export = "
SELECT * INTO OUTFILE '/var/www/dati.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
FROM dati ";
mysql_query($export);
$file_content=file_get_contents('/var/www/dati.txt');
$file_new="Campo1;Campo2;Campo3;Campo4;\n".$file_content;
$file=fopen('/var/www/dati.txt',"w");
fwrite($file,$file_new);
fclose($file);
Grazie degli aiuti...
mi riesce difficile inserire i campi..
ho preferito modificare la tabella prima di esportarla usando ALTER TABLE
grazie ancora di tutto..
dimenticavo.. ancora non ho capito però come faccio ad esportare i campi di intestazione...
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.