/** * 上传头像 */ public function upload() { if (isset($_GET['userid']) && isset($GLOBALS['HTTP_RAW_POST_DATA'])) { // 根据用户id创建文件夹 $userid = intval($_GET['userid']); $avatardata = $GLOBALS['HTTP_RAW_POST_DATA']; } else { exit('0'); } $dir1 = ceil($userid / 10000); $dir2 = ceil($userid % 10000 / 1000); // 创建图片存储文件夹 $avatarfile = DATA_PATH . 'avatar/'; $dir = $avatarfile . $dir1 . '/' . $dir2 . '/' . $userid . '/'; if (!file_exists($dir)) { Folder::mk($dir); } $filename = $dir . $userid . '.zip'; File::write($filename, $avatardata); $archive = new PclZip($filename); if ($archive->extract(PCLZIP_OPT_PATH, $dir) == 0) { die("Error : " . $archive->errorInfo(true)); } // 判断文件安全,删除压缩包和非jpg图片 $avatararr = array('180x180.jpg', '30x30.jpg', '45x45.jpg', '90x90.jpg'); if ($handle = opendir($dir)) { while (false !== ($file = readdir($handle))) { if ($file !== '.' && $file !== '..') { if (!in_array($file, $avatararr)) { File::delete($dir . $file); } else { $info = @getimagesize($dir . $file); if (!$info || $info[2] != 2) { File::del($dir . $file); } } } } closedir($handle); } $this->db->where(array('userid' => $userid))->update(array('avatar' => 1)); exit('1'); }
/** * 缓存重写分析 * * @param string $template * @param string $application * @param string $style */ public function compile($template, $application = null, $style = 'default') { $application = is_null($application) ? APP : $application; $this->style = $style; // 定义模版路径 $tplfile = $this->view_dir . $style . DIRECTORY_SEPARATOR . $application . DIRECTORY_SEPARATOR . $template . $this->_ext; if (!file_exists($tplfile)) { throw new Base_Exception('Unable to load the file ' . $tplfile . ' , file is not exist.'); } $filepath = $this->compile_dir . $style . DIRECTORY_SEPARATOR . $application . DIRECTORY_SEPARATOR; if (!is_dir($filepath)) { Folder::mk($filepath); } $this->compilefile = $filepath . $template . '.php'; if (!file_exists($this->compilefile) || $this->_referesh && @filemtime($tplfile) > @filemtime($this->compilefile)) { $this->refresh($tplfile); } return $this->compilefile; }
/** * 图片裁切 * * @return boolean */ public function crop_upload() { if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) { $pic = $GLOBALS["HTTP_RAW_POST_DATA"]; if (isset($_GET['width']) && !empty($_GET['width'])) { $width = intval($_GET['width']); } if (isset($_GET['height']) && !empty($_GET['height'])) { $height = intval($_GET['height']); } if (isset($_GET['file']) && !empty($_GET['file'])) { if (is_image($_GET['file']) == false) { exit; } if (strpos($_GET['file'], C('attachment', 'upload_url')) !== false) { $file = $_GET['file']; $basename = basename($file); $filepath = str_replace(SITE_URL, '', dirname($file)) . '/'; if (strpos($basename, 'thumb_') !== false) { $file_arr = explode('_', $basename); $basename = array_pop($file_arr); } $new_file = 'thumb_' . $width . '_' . $height . '_' . $basename; } else { $application = trim($_GET['application']); $catid = intval($_GET['catid']); $attachment = new Attachment($application, $catid); $uploadedfile['filename'] = basename($_GET['file']); $uploadedfile['fileext'] = File::get_suffix($_GET['file']); if (in_array($uploadedfile['fileext'], array('jpg', 'gif', 'jpeg', 'png', 'bmp'))) { $uploadedfile['isimage'] = 1; } $file_path = C('attachment', 'upload_path') . date('Y/md/'); Folder::mk($file_path); $new_file = date('Ymdhis') . rand(100, 999) . '.' . $uploadedfile['fileext']; $uploadedfile['filepath'] = date('Y/md/') . $new_file; $aid = $attachment->add($uploadedfile); $filepath = str_replace(SITE_URL, '', C('attachment', 'upload_url')) . date('Y/md/'); } file_put_contents(BASE_PATH . $filepath . $new_file, $pic); } else { return false; } echo SITE_URL . $filepath . $new_file; exit; } }
/** * 检查安装目录 * * @param string $application */ public function check($application = '') { defined('INSTALL') or define('INSTALL', true); if ($application) { $this->application = $application; } if (!$this->application) { $this->error_msg = L('no_application'); return false; } if (!defined('INSTALL_APPLICATION')) { if (Folder::mk(WEKIT_PATH . 'languages' . DIRECTORY_SEPARATOR . C('config', 'lang') . DIRECTORY_SEPARATOR . 'test_create_dir')) { sleep(1); Folder::rm(WEKIT_PATH . 'languages' . DIRECTORY_SEPARATOR . C('config', 'lang') . DIRECTORY_SEPARATOR . 'test_create_dir'); } else { $this->error_msg = L('lang_dir_no_write'); return false; } } $r = $this->db->where(array('application' => $this->application))->find(); if ($r) { $this->error_msg = L('this_application_installed'); return false; } if (!$this->installdir) { $this->installdir = APPS_PATH . $this->application . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR; } if (!is_dir($this->installdir)) { $this->error_msg = L('install_dir_no_exist'); return false; } if (!file_exists($this->installdir . 'application.sql')) { $this->error_msg = L('application_sql_no_exist'); return false; } $models = @(require $this->installdir . 'model.php'); if (is_array($models) && !empty($models)) { foreach ($models as $app) { if (!file_exists(WEKIT_PATH . 'model' . DIRECTORY_SEPARATOR . $app . '_model.php')) { copy($this->installdir . 'model' . DIRECTORY_SEPARATOR . $app . '_model.php', WEKIT_PATH . 'model' . DIRECTORY_SEPARATOR . $app . '_model.php'); } if (!file_exists($this->installdir . $app . '.sql')) { $this->error_msg = $app . L('sql_no_exist'); return false; } } } return true; }
/** * 生成静态文件 * * @param string $file * 文件路径 * @return boolen/intval 成功返回生成文件的大小 */ private function create_html($file) { $data = ob_get_contents(); ob_end_clean(); Folder::mk(dirname($file)); $strlen = File::write($file, $data); return $strlen; }
/** * 上传无记录的临时文件 * * @param unknown_type $field */ public function upload_tmp($field) { $tmpPath = $this->upload_root . "tmp/"; if (!isset($_FILES[$field])) { // 判断附件上传字段是否为空 $this->error = UPLOAD_ERR_OK; return false; } // 判断限制的类型 $this->alowexts = C('attachment', 'allowext'); $this->savepath = $tmpPath; $this->maxsize = C('attachment', 'maxsize') * 1024; $this->uploads = 1; if (!Folder::mk($this->savepath) && !is_dir($this->savepath)) { $this->error = '8'; return false; } @chmod($this->savepath, 0755); if (!is_writeable($this->savepath)) { $this->error = '9'; return false; } $file = $_FILES[$field]; if (is_array($file['error'])) { $this->error = '5'; return false; } else { $this->uploads = 1; } $fileext = File::get_suffix($file['name']); if ($file['error'] != 0) { $this->error = $file['error']; return false; } if (!preg_match("/^(" . $this->alowexts . ")\$/", $fileext)) { $this->error = '10'; return false; } if ($this->maxsize && $file['size'] > $this->maxsize) { $this->error = '11'; return false; } if (!$this->isuploadedfile($file['tmp_name'])) { $this->error = '12'; return false; } $filename = $this->getname("png"); $savefile = $this->savepath . $filename; $filepath = preg_replace(String::addslashes("|^" . $this->upload_root . "|"), "", $savefile); $upload_func = $this->upload_func; if (@$upload_func($file['tmp_name'], $savefile)) { @chmod($savefile, 0755); @unlink($file['tmp_name']); return $filepath; } else { return false; } }
/** * 数据库导出方法 * * @param unknown_type $tables 数据表数据组 * @param unknown_type $sqlcompat 数据库兼容类型 * @param unknown_type $sqlcharset 数据库字符 * @param unknown_type $sizelimit 卷大小 * @param unknown_type $action 操作 * @param unknown_type $fileid 卷标 * @param unknown_type $random 随机字段 * @param unknown_type $tableid * @param unknown_type $startfrom * @param unknown_type $tabletype 备份数据库类型 (非yuncms数据与yuncms数据) */ private function export_database($tables, $sqlcompat, $sqlcharset, $sizelimit, $action, $fileid, $random, $tableid, $startfrom, $tabletype) { $dumpcharset = $sqlcharset ? $sqlcharset : str_replace('-', '', CHARSET); $fileid = $fileid != '' ? $fileid : 1; if ($fileid == 1 && $tables) { if (!isset($tables) || !is_array($tables)) { showmessage(L('select_tbl')); } $random = mt_rand(1000, 9999); S('common/bakup_table', $tables); } else { if (!($tables = S('common/bakup_table'))) { showmessage(L('select_tbl')); } } if ($this->db->version() > '4.1') { if ($sqlcharset) { $this->db->query("SET NAMES '" . $sqlcharset . "';\n\n"); } if ($sqlcompat == 'MYSQL40') { $this->db->query("SET SQL_MODE='MYSQL40'"); } elseif ($sqlcompat == 'MYSQL41') { $this->db->query("SET SQL_MODE=''"); } } $tabledump = ''; $tableid = $tableid != '' ? $tableid - 1 : 0; $startfrom = $startfrom != '' ? intval($startfrom) : 0; for ($i = $tableid; $i < count($tables) && strlen($tabledump) < $sizelimit * 1000; $i++) { global $startrow; $offset = 100; if (!$startfrom) { if ($tables[$i] != $this->db->get_prefix() . 'session') { $tabledump .= "DROP TABLE IF EXISTS `{$tables[$i]}`;\n"; } $create = $this->db->query("SHOW CREATE TABLE `{$tables[$i]}` "); $tabledump .= $create[0]['Create Table'] . ";\n\n"; if ($sqlcompat == 'MYSQL41' && $this->db->version() < '4.1') { $tabledump = preg_replace("/TYPE\\=([a-zA-Z0-9]+)/", "ENGINE=\\1 DEFAULT CHARSET=" . $dumpcharset, $tabledump); } if ($this->db->version() > '4.1' && $sqlcharset) { $tabledump = preg_replace("/(DEFAULT)*\\s*CHARSET=[a-zA-Z0-9]+/", "DEFAULT CHARSET=" . $sqlcharset, $tabledump); } if ($tables[$i] == $this->db->get_prefix() . 'session') { $tabledump = str_replace("CREATE TABLE `" . $this->db->get_prefix() . "session`", "CREATE TABLE IF NOT EXISTS `" . $this->db->get_prefix() . "session`", $tabledump); } } $numrows = $offset; while (strlen($tabledump) < $sizelimit * 1000 && $numrows == $offset) { if ($tables[$i] == $this->db->get_prefix() . 'session') { break; } $sql = "SELECT * FROM `{$tables[$i]}` LIMIT {$startfrom}, {$offset}"; //获取字段 $fields_name = $this->db->get_fields($tables[$i]); //字段总数 $numfields = count($fields_name); //返回结果集中行的数目 $numrows = $this->db->num_rows; $rows = $this->db->query($sql); $name = array_keys($fields_name); $r = array(); foreach ($rows as $row) { $r[] = $row; $comma = ""; $tabledump .= "INSERT INTO `{$tables[$i]}` VALUES("; for ($j = 0; $j < $numfields; $j++) { $tabledump .= $comma . "'" . mysql_escape_string($row[$name[$j]]) . "'"; $comma = ","; } $tabledump .= ");\n"; } $startfrom += $offset; } $tabledump .= "\n"; $startrow = $startfrom; $startfrom = 0; } if (trim($tabledump)) { $tabledump = "# YUNCMS bakfile\n# version:YUNCMS " . C('version', 'version') . "\n# time:" . date('Y-m-d H:i:s') . "\n# type:YUNCMS\n# TINTSOFT:http://www.tintsoft.com\n# --------------------------------------------------------\n\n\n" . $tabledump; $tableid = $i; $filename = $tabletype . '_' . date('Ymd') . '_' . $random . '_' . $fileid . '.sql'; $altid = $fileid; $fileid++; $bakfile_path = DATA_PATH . 'bakup' . DIRECTORY_SEPARATOR . $this->pdo_name; if (!Folder::mk($bakfile_path)) { showmessage(L('dir_not_be_created')); } $bakfile = $bakfile_path . DIRECTORY_SEPARATOR . $filename; if (!is_writable(DATA_PATH . 'bakup')) { showmessage(L('dir_not_be_created')); } file_put_contents($bakfile, $tabledump); @chmod($bakfile, 0777); if (defined('EXECUTION_SQL')) { $filename = L('bundling') . $altid . '#'; } showmessage(L('bakup_file') . " {$filename} " . L('bakup_write_succ'), U('admin/database/export', array('sizelimit' => $sizelimit, 'sqlcompat' => $sqlcompat, 'sqlcharset' => $sqlcharset, 'tableid' => $tableid, 'fileid' => $fileid, 'startfrom' => $startrow, 'random' => $random, 'dosubmit' => '1', 'tabletype' => $tabletype, 'pdo_select' => $this->pdo_name))); } else { $bakfile_path = DATA_PATH . 'bakup' . DIRECTORY_SEPARATOR . $this->pdo_name . DIRECTORY_SEPARATOR; file_put_contents($bakfile_path . 'index.html', ''); S('common/bakup_table', ''); showmessage(L('bakup_succ'), U('admin/database/import', array('pdoname' => $this->pdo_name, 'menuid' => 62))); } }
/** * 获取文本缓存要存放的路径 * * @param string $key * 缓存数据的唯一key */ private function _path($key) { if (strpos($key, '/') !== false) { $path = CACHE_PATH . dirname($key) . DIRECTORY_SEPARATOR . basename($key) . $this->suffix; } else { $path = CACHE_PATH . $key . $this->suffix; } $dir = dirname($path); if (!is_dir($dir)) { Folder::mk($dir, 0777); } return $path; }