dumpsave::close PHP Method

close() public method

dumpsave::close()
public close ( )
    public function close()
    {
        if ($this->fp) {
            $return = @call_user_func($this->savetype == 'gz' ? 'gzclose' : 'fclose', $this->fp);
            if ($return) {
                @chmod($this->filesavename, 0666);
                return true;
            }
        }
        return false;
    }

Usage Example

Example #1
0
/**
 * nv_dump_save()
 *
 * @param mixed $params
 * @return
 */
function nv_dump_save($params)
{
    global $db, $sys_info, $global_config, $db_config;
    if ($sys_info['allowed_set_time_limit']) {
        set_time_limit(1200);
    }
    if (!isset($params['tables']) or !is_array($params['tables']) or $params['tables'] == array()) {
        return false;
    }
    $params['tables'] = array_map('trim', $params['tables']);
    $tables = array();
    $dbsize = 0;
    $result = $db->query('SHOW TABLE STATUS');
    $a = 0;
    while ($item = $result->fetch()) {
        unset($m);
        if (in_array($item['name'], $params['tables'])) {
            $tables[$a]['name'] = $item['name'];
            $tables[$a]['size'] = intval($item['data_length']) + intval($item['index_length']);
            $tables[$a]['limit'] = 1 + round(1048576 / ($item['avg_row_length'] + 1));
            $tables[$a]['numrow'] = $item['rows'];
            $tables[$a]['charset'] = preg_match('/^([a-z0-9]+)_/i', $item['collation'], $m) ? $m[1] : '';
            $tables[$a]['type'] = isset($item['engine']) ? $item['engine'] : $item['t'];
            ++$a;
            $dbsize += intval($item['data_length']) + intval($item['index_length']);
        }
    }
    $result->closeCursor();
    if (empty($a)) {
        return false;
    }
    $dumpsave = new dumpsave($params['savetype'], $params['filename']);
    if (!$dumpsave->open()) {
        return false;
    }
    $path_dump = '';
    if (file_exists(NV_ROOTDIR . '/themes/' . $global_config['site_theme'] . '/system/dump.tpl')) {
        $path_dump = NV_ROOTDIR . '/themes/' . $global_config['site_theme'] . '/system/dump.tpl';
    } else {
        $path_dump = NV_ROOTDIR . '/themes/default/system/dump.tpl';
    }
    $template = explode('@@@', file_get_contents($path_dump));
    $patterns = array("/\\{\\|SERVER_NAME\\|\\}/", "/\\{\\|GENERATION_TIME\\|\\}/", "/\\{\\|SQL_VERSION\\|\\}/", "/\\{\\|PHP_VERSION\\|\\}/", "/\\{\\|DB_NAME\\|\\}/", "/\\{\\|DB_CHARACTER\\|\\}/", "/\\{\\|DB_COLLATION\\|\\}/");
    $replacements = array($db->server, gmdate("F j, Y, h:i A", NV_CURRENTTIME) . " GMT", $db->getAttribute(PDO::ATTR_SERVER_VERSION), PHP_VERSION, $db->dbname, $db_config['charset'], $db_config['collation']);
    if (!$dumpsave->write(preg_replace($patterns, $replacements, $template[0]))) {
        return false;
    }
    $db->query('SET SQL_QUOTE_SHOW_CREATE = 1');
    $a = 0;
    foreach ($tables as $table) {
        $content = $db->query('SHOW CREATE TABLE ' . $table['name'])->fetchColumn(1);
        $content = preg_replace('/(KEY[^\\(]+)(\\([^\\)]+\\))[\\s\\r\\n\\t]+(USING BTREE)/i', '\\1\\3 \\2', $content);
        $content = preg_replace('/(default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP|DEFAULT CHARSET=\\w+|COLLATE=\\w+|character set \\w+|collate \\w+|AUTO_INCREMENT=\\w+)/i', ' \\1', $content);
        $patterns = array("/\\{\\|TABLE_NAME\\|\\}/", "/\\{\\|TABLE_STR\\|\\}/");
        $replacements = array($table['name'], $content);
        if (!$dumpsave->write(preg_replace($patterns, $replacements, $template[1]))) {
            return false;
        }
        if ($params['type'] == 'str') {
            continue;
        }
        if (!empty($table['numrow'])) {
            $patterns = array("/\\{\\|TABLE_NAME\\|\\}/");
            $replacements = array($table['name']);
            if (!$dumpsave->write(preg_replace($patterns, $replacements, $template[2]))) {
                return false;
            }
            $columns = array();
            $columns_array = $db->columns_array($table['name']);
            foreach ($columns_array as $col) {
                $columns[$col['field']] = preg_match('/^(\\w*int|year)/', $col['type']) ? 'int' : 'txt';
            }
            $maxi = ceil($table['numrow'] / $table['limit']);
            $from = 0;
            $a = 0;
            for ($i = 0; $i < $maxi; ++$i) {
                $db->sqlreset()->select('*')->from($table['name'])->limit($table['limit'])->offset($from);
                $result = $db->query($db->sql());
                while ($row = $result->fetch()) {
                    if (isset($row['bodyhtml'])) {
                        $row['bodyhtml'] = strtr($row['bodyhtml'], array("\r\n" => '', "\r" => '', "\n" => ''));
                    } elseif (isset($row['bodytext'])) {
                        $row['bodytext'] = strtr($row['bodytext'], array("\r\n" => ' ', "\r" => ' ', "\n" => ' '));
                    }
                    $row2 = array();
                    foreach ($columns as $key => $kt) {
                        $row2[] = isset($row[$key]) ? $kt == 'int' ? $row[$key] : "'" . addslashes($row[$key]) . "'" : 'NULL';
                    }
                    $row2 = NV_EOL . '(' . implode(', ', $row2) . ')';
                    ++$a;
                    if ($a < $table['numrow']) {
                        if (!$dumpsave->write($row2 . ', ')) {
                            return false;
                        }
                    } else {
                        if (!$dumpsave->write($row2 . ';')) {
                            return false;
                        }
                        break;
                    }
                }
                $result->closeCursor();
                $from += $table['limit'];
            }
        }
    }
    if (!$dumpsave->close()) {
        return false;
    }
    return array($params['filename'], $dbsize);
}
All Usage Examples Of dumpsave::close