Example #1
0
 /**
  * 获取或创建IP信息
  * <p>返回数组array('id','addr','ban')</p>
  * @since 1
  * @return array
  */
 public function get_ip()
 {
     $ip_addr = $this->get_addr();
     $re = array('id' => 0, 'ban' => '1', 'addr' => '');
     if ($ip_addr != '') {
         $sql = 'SELECT `id`,`ip_addr`,`ip_ban` FROM `' . $this->table_name . '` WHERE `ip_addr` = ?';
         $sth = $this->db->prepare($sql);
         $sth->bindParam(1, $ip_addr, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT);
         if ($sth->execute() == true) {
             $res = $sth->fetch(PDO::FETCH_ASSOC);
             if ($res['id'] > 0) {
                 $re = array('id' => $res['id'], 'addr' => $res['ip_addr'], 'ban' => $res['ip_ban']);
             } else {
                 $sql_insert = 'INSERT INTO `' . $this->table_name . '`(`id`,`ip_addr`,`ip_ban`) VALUES(NULL,?,0)';
                 $sth_insert = $this->db->prepare($sql_insert);
                 $sth_insert->bindParam(1, $ip_addr, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT);
                 if ($sth_insert->execute() == true) {
                     $last_id = $this->db->lastInsertId();
                     $re = array('id' => $last_id, 'addr' => $ip_addr, 'ban' => '0');
                 }
             }
         }
     }
     return $re;
 }
Example #2
0
 /**
  * 将指定配置恢复到默认
  * @since 1
  * @param string $config_name 配置名称
  * @return boolean
  */
 public function return_default($config_name)
 {
     $sql = 'UPDATE `' . $this->table_name . '` SET `config_value` = `config_default` WHERE `config_name` = ?';
     $st = $this->db->prepare($sql);
     $st->bindParam(1, $config_name, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT);
     return $st->execute();
 }
Example #3
0
 /**
  * 将当天之前的数据归档到logs文件夹
  * @since 2
  * @param string $log_dir 日志保存目录路径
  * @return boolean
  */
 public function files($log_dir)
 {
     $re = false;
     $sql = 'SELECT `id`,`log_date`,`log_ip`,`log_message` FROM `' . $this->table_name . '` ORDER BY `log_date` ASC LIMIT ?,30';
     $sth = $this->db->prepare($sql);
     $limit_page = 0;
     //遍历数据表,将记录按照时间顺序保存到文件
     do {
         $sth->bindParam(1, $limit_page, PDO::PARAM_INT);
         $sth->execute();
         $res = $sth->fetchAll(PDO::FETCH_ASSOC);
         if (is_array($res) && count($res) > 0) {
             foreach ($res as $k => $v) {
                 $date_ym = substr($v['log_date'], 0, 4) . substr($v['log_date'], 5, 2);
                 $date_d = substr($v['log_date'], 8, 2);
                 $log_file_dir = $log_dir . DS . $date_ym;
                 if (core_file::new_dir($log_file_dir) == false) {
                     return $re;
                 }
                 $log_file = $log_file_dir . DS . $date_d . '.log';
                 $log_message = $v['log_date'] . "\t" . $v['log_ip'] . "\t" . $v['log_message'] . "\r\n";
                 if (core_file::edit_file($log_file, $log_message, true) == false) {
                     return $re;
                 }
             }
         }
         $limit_page++;
     } while (is_array($res) && count($res) > 0);
     //清空日志数据表
     $sql_trash = 'TRUNCATE TABLE `' . $this->table_name . '`';
     if ($this->db->exec($sql_trash) == true) {
         $re = true;
     }
     return $re;
 }
Example #4
0
 /**
  * 退出登陆更新用户
  * @since 6
  * @param int $id 用户ID
  * @param int $ip IP ID
  * @param boolean $status 用户登陆状态
  * @param boolean $remember 是否记住用户
  * @return boolean
  */
 private function update_user($id, $ip = false, $status = false, $remember = false)
 {
     $return = false;
     $sql = 'UPDATE `' . $this->table_name_user . '` SET `user_login_date` = NOW(),`user_ip` = :ip,`user_session` = :session,`user_status` = :status,`user_remember` = :remember WHERE `id` = :id';
     //如果提供了IP参数,则更新登陆相关项
     $status = $status ? 1 : 0;
     $remember = $remember ? 1 : 0;
     $session = $this->get_session_id();
     $sth = $this->db->prepare($sql);
     $sth->bindParam(':id', $id);
     $sth->bindParam(':ip', $ip, PDO::PARAM_INT);
     $sth->bindParam(':session', $session, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT);
     $sth->bindParam(':status', $status, PDO::PARAM_INT);
     $sth->bindParam(':remember', $remember, PDO::PARAM_INT);
     $return = $sth->execute();
     return $return;
 }
Example #5
0
 /**
  * 删除上一级ID的所有子ID
  * @since 3
  * @param int $id ID
  * @return boolean
  */
 public function del_parent($id)
 {
     $return = false;
     $sql = 'SELECT `id` FROM `' . $this->table_name . '` WHERE `post_parent` = :id';
     $sth = $this->db->prepare($sql);
     $sth->bindParam(':id', $id, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT);
     if ($sth->execute() == true) {
         $res = $sth->fetchAll(PDO::FETCH_ASSOC);
         if ($res) {
             foreach ($res as $v) {
                 $this->del_parent($v['id']);
             }
         }
         $sql_delete = 'DELETE FROM `' . $this->table_name . '` WHERE `id` = :id';
         $sth_delete = $this->db->prepare($sql_delete);
         $sth_delete->bindParam(':id', $id, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT);
         $return = $sth_delete->execute();
     }
     return $return;
 }
Example #6
0
/**
 * 生成新的备份文件
 * @since 2
 * @param coredb $db 数据库操作句柄
 * @param string $backup_dir 备份到目录
 * @param string $content_dir 文件数据目录
 * @return string 备份文件路径
 */
function plugbackup(&$db, $backup_dir, $content_dir)
{
    $return = '';
    $bool = false;
    $file_type = 'zip';
    $ls_dir = $backup_dir . DS . substr(sha1(rand(1, 99999)), 0, 8);
    if (!corefile::is_dir($ls_dir)) {
        $ls_sql_dir = $ls_dir . DS . 'sql';
        //创建临时目录
        $bool = corefile::new_dir($ls_dir);
        //创建临时SQL目录
        if ($bool == true) {
            $bool = corefile::new_dir($ls_sql_dir);
        }
        //拷贝文件数据
        if ($bool == true) {
            $bool = corefile::copy_dir($content_dir . DS . 'files', $ls_dir . DS . 'content' . DS . 'files');
        }
        if ($bool == true) {
            $bool = corefile::copy_dir($content_dir . DS . 'logs', $ls_dir . DS . 'content' . DS . 'logs');
        }
        //依次遍历所有数据并拷贝到文件内
        foreach ($db->tables as $k => $v) {
            //创建表目录
            $v_table_dir = $ls_sql_dir . DS . $v;
            if ($bool == true) {
                $bool = corefile::new_dir($v_table_dir);
            } else {
                break;
            }
            //计算表内所有字段数据平均长度,得出最终步长
            $max = 50;
            if ($bool == true) {
                $sql = 'SELECT AVG( LENGTH(`' . implode('`))+AVG(LENGTH(`', $db->fields[$k]) . '`)) as al FROM `' . $v . '`';
                $sth = $db->prepare($sql);
                if ($sth->execute() == true) {
                    $res = (int) $sth->fetchColumn();
                    if ($res > 500) {
                        $max = 20;
                    } elseif ($res > 1000) {
                        $max = 10;
                    } elseif ($res > 5000) {
                        $max = 1;
                    }
                } else {
                    $bool = false;
                    break;
                }
            } else {
                break;
            }
            //遍历数据写入文件
            $p = 0;
            $p_bool = true;
            while ($p_bool) {
                $sql = 'SELECT * FROM `' . $v . '` ORDER BY ' . $db->fields[$k][0] . ' ASC LIMIT ' . $p * $max . ',' . $max;
                $sth = $db->prepare($sql);
                if ($sth->execute() == true) {
                    $res = $sth->fetchAll(PDO::FETCH_ASSOC);
                    if ($res) {
                        $file_content = 'INSERT INTO `' . $v . '`(`' . implode('`,`', array_keys($res[0])) . '`) VALUES';
                        foreach ($res as $v_res) {
                            $file_content .= '(';
                            foreach ($v_res as $v_res_v) {
                                if ($v_res_v == null) {
                                    $file_content .= 'NULL,';
                                } elseif (is_int($v_res_v) == true) {
                                    $file_content .= $v_res_v . ',';
                                } else {
                                    $file_content .= '\'' . $v_res_v . '\',';
                                }
                            }
                            $file_content = substr($file_content, 0, -1);
                            $file_content .= '),';
                        }
                        $file_content = substr($file_content, 0, -1) . ';';
                        $file_table_row = $v_table_dir . DS . $v . '_' . $p . '.sql';
                        $p_bool = corefile::edit_file($file_table_row, $file_content);
                        $bool = $p_bool;
                        $file_content = null;
                    } else {
                        $p_bool = false;
                        $bool = true;
                    }
                } else {
                    $p_bool = false;
                    $bool = false;
                }
                $p += 1;
            }
        }
    }
    //将临时文件压缩为压缩包
    $backup_file = $backup_dir . DS . time() . '.' . $file_type;
    if (corefile::is_file($backup_file)) {
        $bool = corefile::delete_file($backup_file);
    }
    if ($bool == true) {
        $bool = corefile::create_zip($backup_file, $ls_dir);
    }
    if ($bool == true) {
        $return = $backup_file;
    } else {
        //失败删除所有临时文件
        corefile::delete_file($backup_file);
    }
    //删除临时文件
    corefile::delete_dir($ls_dir);
    return $return;
}