[BUGREPORT] Mancato ripristino Database da backup locale

Documentazione generica riguardo osCommerce

Moderatore: mod Documentazione

Rispondi
Avatar utente
marcus
membro Master
membro Master
Messaggi: 1619
Iscritto il: 04/12/2003, 1:00
Contatta:

[BUGREPORT] Mancato ripristino Database da backup locale

Messaggio da marcus »

Nel pannello di controllo di osCommerce sono presenti alcune funzionalità per il backup del Database
e il ripristino di questo da una copia di backup.

A causa di un bug la funzionalità di ripristino del Database da una copia salvata localmente sul proprio PC non funziona.

Il bug è localizzato in questo frammento di codice del file catalog/admin/backup.php (riga 195 circa in una versione pulita):

Codice: Seleziona tutto

          $sql_file = new upload('sql_file');

          if ($sql_file->parse() == true) {
            $restore_query = fread(fopen($sql_file->tmp_filename, 'r'), filesize($sql_file->tmp_filename));
            $read_from = $sql_file->filename;
          }
        }

        if (isset($restore_query)) {

Per come è stata scritta la classe upload, dopo aver istanziato un oggetto upload, è necessario
settare la destinazione del file uppato mediante il metodo set_destination(). Se questo non viene fatto,
il metodo parse restituisce false in ogni caso.
Come si vede dal codice, questo causa il mancato assegnamento alla variabile $restore_query
e la conseguente mancata esecuzione del processo di ripristino.


Il problema si risolve settando una destinazione per il file uppato (fittizia perchè il file non viene poi effetivamente salvato in tale destinazione, ma rimane nella directory temp per i files uppati).
Ad es:

Codice: Seleziona tutto

$sql_file ->set_destination(DIR_FS_BACKUP);


Il codice sopra diventa:

Codice: Seleziona tutto

         $sql_file = new upload('sql_file');
     $sql_file ->set_destination(DIR_FS_BACKUP);

          if ($sql_file->parse() == true) {
            $restore_query = fread(fopen($sql_file->tmp_filename, 'r'), filesize($sql_file->tmp_filename));
            $read_from = $sql_file->filename;
          }
        }

        if (isset($restore_query)) {


Con questa modifica il processo di ripristino da un backup locale, viene eseguito correttamente.

Marcus

-------------------------------------------------------
http://www.oscommercedev.com
Rispondi