Autor | Zpráva | ||
---|---|---|---|
Cakewalk Profil |
Dobrý den,
zkoušel jsem tento script na zálohování databáze. Pracuje velmi dobře, ale funkce zipování nefunguje. Pokud určím přesný soubor, tak se zip vytvoří, jinak ne. Díky za radu. /* creates a compressed zip file */ function create_zip($files = array(),$destination = '',$overwrite = false) { //if the zip file already exists and overwrite is false, return false if(file_exists($destination) && !$overwrite) { return false; } //vars $valid_files = array(); //if files were passed in... if(is_array($files)) { //cycle through each file foreach($files as $file) { //make sure the file exists if(file_exists($file)) { $valid_files[] = $file; } } } //if we have good files... if(count($valid_files)) { //create the archive $zip = new ZipArchive(); if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) { return false; } //add the files foreach($valid_files as $file) { $zip->addFile($file,$file); } //debug //echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status; //close the zip -- done! $zip->close(); //check to make sure the file exists return file_exists($destination); } else { return false; } } /* backup the db OR just a table */ function backup_tables($host,$user,$pass,$name,$tables = '*') { $link = mysql_connect($host,$user,$pass); mysql_select_db($name,$link); //get all of the tables if($tables == '*') { $tables = array(); $result = mysql_query('SHOW TABLES'); while($row = mysql_fetch_row($result)) { $tables[] = $row[0]; } } else { $tables = is_array($tables) ? $tables : explode(',',$tables); } //cycle through foreach($tables as $table) { $result = mysql_query('SELECT * FROM '.$table); $num_fields = mysql_num_fields($result); $return.= 'DROP TABLE IF EXISTS '.$table.';'; $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table)); $return.= "\n\n".$row2[1].";\n\n"; for ($i = 0; $i < $num_fields; $i++) { while($row = mysql_fetch_row($result)) { $return.= 'INSERT INTO '.$table.' VALUES('; for($j=0; $j<$num_fields; $j++) { $row[$j] = addslashes($row[$j]); $row[$j] = ereg_replace("\n","\\n",$row[$j]); if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; } if ($j<($num_fields-1)) { $return.= ','; } } $return.= ");\n"; } } $return.="\n\n\n"; } //save file $handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+'); fwrite($handle,$return); fclose($handle); $result = create_zip($handle,'my-archive.zip'); } |
||
Kajman_ Profil * |
#2 · Zasláno: 10. 11. 2011, 12:48:00
Cakewalk:
„Pokud určím přesný soubor, tak se zip vytvoří, jinak ne.“ V $handle je ukazatel na zavřený soubor. Funkce create_zip ale jako první parametr čeká pole názvů souborů. Zkuste tedy předat název souboru. $handle = fopen($nazev_souboru='db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+'); ... $result = create_zip(array($nazev_souboru),'my-archive.zip'); |
||
Cakewalk Profil |
#3 · Zasláno: 10. 11. 2011, 12:56:26
Super, moc díky to mě nenapadlo. No akorát ten nezazipovaný soubor tam zůstane. Ten bych potřeboval pryč.
|
||
Kajman_ Profil * |
#4 · Zasláno: 10. 11. 2011, 12:57:32
unlink() |
||
Cakewalk Profil |
#5 · Zasláno: 10. 11. 2011, 13:01:57
Teď mi to došlo;) Byl jsi rychlejší. Moc díky. Vše funguje super.
|
||
Časová prodleva: 12 let
|
0