Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    mysqldump via PHP crea file vuoto

    Salve a tutti,
    vorrei creare un sistema di backup del mio database, quindi sto cercando di richiamare mysqldump via PHP.

    Ho creato uno script contenente il codice
    codice:
    <?
    $command='mysqldump -h localhost -u USERNAME -pPASSWORD DBNAME > database.sql';
    system($command);
    ?>
    Eseguendo lo script viene creato il file database.sql ma è vuoto, non contiene nulla.

    Il mio hosting non è in safe_mode; non ho accesso shell diretto ma il gestore dell'hosting ha provato il comando via shell e sostiene che è corretto e funziona.
    Sembra insomma che il problema si presenti solo se invocato via PHP.

    Da cosa può dipendere? E come porvi rimedio?

    Grazie mille

  2. #2

    Re: mysqldump via PHP crea file vuoto

    Originariamente inviato da apusoft
    Salve a tutti,
    vorrei creare un sistema di backup del mio database, quindi sto cercando di richiamare mysqldump via PHP.

    Ho creato uno script contenente il codice
    codice:
    <?
    $command='mysqldump -h localhost -u USERNAME -pPASSWORD DBNAME > database.sql';
    system($command);
    ?>
    Eseguendo lo script viene creato il file database.sql ma è vuoto, non contiene nulla.

    Il mio hosting non è in safe_mode; non ho accesso shell diretto ma il gestore dell'hosting ha provato il comando via shell e sostiene che è corretto e funziona.
    Sembra insomma che il problema si presenti solo se invocato via PHP.

    Da cosa può dipendere? E come porvi rimedio?

    Grazie mille
    Potrebbe essere che i comandi shell di php siano stati inibiti? Oppure che effettivamente l'utente con cui gira il tuo webserver abbia la shell null o false...
    Prova una cosina molto più semplice
    Codice PHP:
    echo '<pre>';

    // Outputs all the result of shellcommand "ls", and returns
    // the last output line into $last_line. Stores the return value
    // of the shell command in $retval.
    $last_line system('ls'$retval);

    // Printing additional info
    echo '
    </pre>
    <hr />Last line of the output: ' 
    $last_line '
    <hr />Return value: ' 
    $retval
    e vedi cosa ti ritorna...


  3. #3
    Grazie della risposta, Dascos.

    Con il tuo codice ottengo:
    codice:
    Last line of the output:
    Return value: 126
    Significa che in realtà system() non è abilitato (nonostante il gestore dell'hosting affermi che non ci sono limitazioni attive sul suo uso)?

  4. #4
    Originariamente inviato da apusoft
    Grazie della risposta, Dascos.

    Con il tuo codice ottengo:
    codice:
    Last line of the output:
    Return value: 126
    Significa che in realtà system() non è abilitato (nonostante il gestore dell'hosting affermi che non ci sono limitazioni attive sul suo uso)?
    Così sembra.
    Lo scopo di fare il dump "a manina" qual'è? Oltre ad avere un backup, ovvio...nel senso, non hai la gestione del database da phpmyadmin?

  5. #5
    Ho accesso a phpMyAdmin ma ho la necessità di automatizzare i backup e poterlo scaricare via FTP.

    In ogni caso segnalo la situazione all'hosting, chiedendo che venga attivato system().

    Solo una domanda: il fatto che il file database.sql venga creato non significa che il comando passato a system viene effettivamente "eseguito"?

  6. #6
    Originariamente inviato da apusoft
    Ho accesso a phpMyAdmin ma ho la necessità di automatizzare i backup e poterlo scaricare via FTP.

    In ogni caso segnalo la situazione all'hosting, chiedendo che venga attivato system().

    Solo una domanda: il fatto che il file database.sql venga creato non significa che il comando passato a system viene effettivamente "eseguito"?
    Ora che mi ci fai pensare...in effetti sì!

    Forse sbagli la sintassi del comando? Boh

  7. #7
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    la sintassi del comando è giusta, e se il file viene creato sul server vuol dire che lo sta eseguendo, magari prova a farle mettere l'output di mysql su un file di testo, così vedi perchè non fa il dump

    Codice PHP:
    $command='mysqldump -h localhost -u USERNAME -pPASSWORD --log-error=tuoFileDiErrore.txt DBNAME > database.sql';
    system($command); 
    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  8. #8
    las, grazie del suggerimento.
    Con il tuo esempio però, il file tuoFileDiErrore.txt non viene creato.

    La mia sensazione è che il comando venga eseguito ma che system() non riesca ad invocare mysqldump.
    Può essere? Da cosa potrebbe dipendere, secondo voi?

  9. #9
    Secondo me è sbagliato il comando, ma vabbeh
    codice:
    /usr/bin/mysqldump -S /var/run/mysqld/mysqld.sock -u utente -ppassword --add-drop-table --quote-names --routines databasename
    eventualmente, con compressione
    codice:
    /usr/bin/mysqldump  -S /var/run/mysqld/mysqld.sock -u root -ppassword --add-drop-table     --quote-names --routines databasename  2>&1 | bzip2 -c >\/percorso\/databasename\.sql\.bz2

  10. #10
    Dascos,
    ho provato anche il tuo comando (quello compresso con bzip2) ma il risultato è sempre il medesimo: file creato ma vuoto.

    Può essere che system() venga effettivamente eseguito ma la chiamata a mysqldump non venga riconosciuta? Esiste un modo per confermare o smentire questa supposizione?

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.