Salve a tutti!
Mi sto imbattendo in un contesto a me abbastanza nuovo...la creazione di file archivio (quindi backup) a partire da un elenco di file PDF presenti sul server.
Il problema è questo: eseguire un backup dei dati. Quando l'aministratore clicca sul link apposito parte lo script che deve leggere tutti i file presenti nella cartella "/file_pdf/", e per ognuno dei file lo legge e lo scrive in un file archivio bz2, il quale può essere scaricato via HTTP e messo nella cartella "/file_pdf/backup/".
Ho fatto lo script, e funziona, ma il risultato finale è stato che ho un file XXX.bz2 (l'archivio) con dentro un unico file senza estensione...e non una lista di file pdf ...
come posso fare a dire alle funzioni bzip2 di "chiudere" un file per cominciare un altro, in modo che siano leggibili separatamente?
In pratica devo simulare (lato server e in maniera del tutto automatica ed indipendente) la funzione "Add to zip file..." che prende quell'elenco di file e li mette dentro ad un file compresso (spesso .zip).
Ringrazio in anticipo.
Fabrizio.
P.S.: visto che sono per l'open source...vi posto il codice che ho scritto...in modo che possiarte rendervi conto di quello che ho fatto...e magari di cosa non ho fatto
Codice PHP:
class Backup {
var $arrayFile;
var $fileBZ2;
function Backup() {
$this->arrayFile = array();
$connDB = new ConnessioneDB();
$res = $connDB->query("SELECT file FROM chiamate WHERE file<>'' ORDER BY file ASC;");
$i=0;
while ($fetch = $connDB->fetchObject($res)) {
$this->arrayFile[$i] = $fetch->file;
$i++;
}
print_r($this->arrayFile);
}
function getCount() { return count($this->arrayFile); }
function backupFiles() {
$dataOra = new DataOraSQL(getdate());
$dataOraSQL = substr(str_replace(":", "-", str_replace(" ", "_", $dataOra->codificaDataOra())),0,count($dataOra->codificaDataOra())-4);
foreach ($this->arrayFile as $file) {
$fileCompleto = "../file_pdf/".$file;
$outCompleto = "../file_pdf/backup/".$dataOraSQL.".bz2";
if (!file_exists ($fileCompleto) || !is_readable ($fileCompleto))
return false;
if ((!file_exists ($outCompleto) && !is_writeable (dirname ($outCompleto)) || (file_exists($outCompleto) && !is_writable($outCompleto)) ))
return false;
$in_file = fopen ($fileCompleto, "rb");
$out_file = bzopen ($outCompleto, "wb");
while (!feof ($in_file)) {
$buffer = fgets ($in_file, 4096);
bzwrite ($out_file, $buffer, 4096);
}
}
fclose ($in_file);
bzclose ($out_file);
$this->fileBZ2 = $dataOraSQL.".bz2";
return true;
}
function getFileBZ2() { return $this->fileBZ2; }
}
notate che dentro al codice ho usato due classi mie (ConnessioneDB e DataOra) ma si può capire facilmente a cosa servano...... :berto:
Ciao ciao!!