首页 > 代码库 > opencart 上传中文文件问题
opencart 上传中文文件问题
更改basename函数
admin\controller\common\filemanager.php
<?phpclass ControllerCommonFileManager extends Controller { private $error = array(); public function index() { $this->language->load(‘common/filemanager‘); $this->data[‘title‘] = $this->language->get(‘heading_title‘); if (isset($this->request->server[‘HTTPS‘]) && (($this->request->server[‘HTTPS‘] == ‘on‘) || ($this->request->server[‘HTTPS‘] == ‘1‘))) { $this->data[‘base‘] = HTTPS_SERVER; } else { $this->data[‘base‘] = HTTP_SERVER; } $this->data[‘entry_folder‘] = $this->language->get(‘entry_folder‘); $this->data[‘entry_move‘] = $this->language->get(‘entry_move‘); $this->data[‘entry_copy‘] = $this->language->get(‘entry_copy‘); $this->data[‘entry_rename‘] = $this->language->get(‘entry_rename‘); $this->data[‘button_folder‘] = $this->language->get(‘button_folder‘); $this->data[‘button_delete‘] = $this->language->get(‘button_delete‘); $this->data[‘button_move‘] = $this->language->get(‘button_move‘); $this->data[‘button_copy‘] = $this->language->get(‘button_copy‘); $this->data[‘button_rename‘] = $this->language->get(‘button_rename‘); $this->data[‘button_upload‘] = $this->language->get(‘button_upload‘); $this->data[‘button_refresh‘] = $this->language->get(‘button_refresh‘); $this->data[‘button_submit‘] = $this->language->get(‘button_submit‘); $this->data[‘error_select‘] = $this->language->get(‘error_select‘); $this->data[‘error_directory‘] = $this->language->get(‘error_directory‘); $this->data[‘token‘] = $this->session->data[‘token‘]; $this->data[‘directory‘] = HTTP_CATALOG . ‘image/data/‘; $this->load->model(‘tool/image‘); $this->data[‘no_image‘] = $this->model_tool_image->resize(‘no_image.jpg‘, 100, 100); if (isset($this->request->get[‘field‘])) { $this->data[‘field‘] = $this->request->get[‘field‘]; } else { $this->data[‘field‘] = ‘‘; } if (isset($this->request->get[‘CKEditorFuncNum‘])) { $this->data[‘fckeditor‘] = $this->request->get[‘CKEditorFuncNum‘]; } else { $this->data[‘fckeditor‘] = false; } $this->template = ‘common/filemanager.tpl‘; $this->response->setOutput($this->render()); } public function image() { $this->load->model(‘tool/image‘); if (isset($this->request->get[‘image‘])) { $this->response->setOutput($this->model_tool_image->resize(html_entity_decode($this->request->get[‘image‘], ENT_QUOTES, ‘UTF-8‘), 100, 100)); } } public function directory() { $json = array(); if (isset($this->request->post[‘directory‘])) { $directories = glob(rtrim(DIR_IMAGE . ‘data/‘ . str_replace(‘../‘, ‘‘, $this->request->post[‘directory‘]), ‘/‘) . ‘/*‘, GLOB_ONLYDIR); if ($directories) { $i = 0; foreach ($directories as $directory) { $json[$i][‘data‘] = $this->get_basename($directory); $json[$i][‘attributes‘][‘directory‘] = utf8_substr($directory, strlen(DIR_IMAGE . ‘data/‘)); $children = glob(rtrim($directory, ‘/‘) . ‘/*‘, GLOB_ONLYDIR); if ($children) { $json[$i][‘children‘] = ‘ ‘; } $i++; } } } $this->response->setOutput(json_encode($json)); } public function files() { $json = array(); if (!empty($this->request->post[‘directory‘])) { $directory = DIR_IMAGE . ‘data/‘ . str_replace(‘../‘, ‘‘, $this->request->post[‘directory‘]); } else { $directory = DIR_IMAGE . ‘data/‘; } $allowed = array( ‘.jpg‘, ‘.jpeg‘, ‘.png‘, ‘.gif‘ ); $files = glob(rtrim($directory, ‘/‘) . ‘/*‘); if ($files) { foreach ($files as $file) { if (is_file($file)) { $ext = strrchr($file, ‘.‘); } else { $ext = ‘‘; } if (in_array(strtolower($ext), $allowed)) { $size = filesize($file); $i = 0; $suffix = array( ‘B‘, ‘KB‘, ‘MB‘, ‘GB‘, ‘TB‘, ‘PB‘, ‘EB‘, ‘ZB‘, ‘YB‘ ); while (($size / 1024) > 1) { $size = $size / 1024; $i++; } $json[] = array( ‘filename‘ => $this->get_basename($file), ‘file‘ => utf8_substr($file, utf8_strlen(DIR_IMAGE . ‘data/‘)), ‘size‘ => round(utf8_substr($size, 0, utf8_strpos($size, ‘.‘) + 4), 2) . $suffix[$i] ); } } } $this->response->setOutput(json_encode($json)); } public function create() { $this->language->load(‘common/filemanager‘); $json = array(); if (isset($this->request->post[‘directory‘])) { if (isset($this->request->post[‘name‘]) || $this->request->post[‘name‘]) { $directory = rtrim(DIR_IMAGE . ‘data/‘ . str_replace(‘../‘, ‘‘, $this->request->post[‘directory‘]), ‘/‘); if (!is_dir($directory)) { $json[‘error‘] = $this->language->get(‘error_directory‘); } if (file_exists($directory . ‘/‘ . str_replace(‘../‘, ‘‘, $this->request->post[‘name‘]))) { $json[‘error‘] = $this->language->get(‘error_exists‘); } } else { $json[‘error‘] = $this->language->get(‘error_name‘); } } else { $json[‘error‘] = $this->language->get(‘error_directory‘); } if (!$this->user->hasPermission(‘modify‘, ‘common/filemanager‘)) { $json[‘error‘] = $this->language->get(‘error_permission‘); } if (!isset($json[‘error‘])) { mkdir($directory . ‘/‘ . str_replace(‘../‘, ‘‘, $this->request->post[‘name‘]), 0777); $json[‘success‘] = $this->language->get(‘text_create‘); } $this->response->setOutput(json_encode($json)); } public function delete() { $this->language->load(‘common/filemanager‘); $json = array(); if (isset($this->request->post[‘path‘])) { $path = rtrim(DIR_IMAGE . ‘data/‘ . str_replace(‘../‘, ‘‘, html_entity_decode($this->request->post[‘path‘], ENT_QUOTES, ‘UTF-8‘)), ‘/‘); if (!file_exists($path)) { $json[‘error‘] = $this->language->get(‘error_select‘); } if ($path == rtrim(DIR_IMAGE . ‘data/‘, ‘/‘)) { $json[‘error‘] = $this->language->get(‘error_delete‘); } } else { $json[‘error‘] = $this->language->get(‘error_select‘); } if (!$this->user->hasPermission(‘modify‘, ‘common/filemanager‘)) { $json[‘error‘] = $this->language->get(‘error_permission‘); } if (!isset($json[‘error‘])) { if (is_file($path)) { unlink($path); } elseif (is_dir($path)) { $files = array(); $path = array($path . ‘*‘); while(count($path) != 0) { $next = array_shift($path); foreach(glob($next) as $file) { if (is_dir($file)) { $path[] = $file . ‘/*‘; } $files[] = $file; } } rsort($files); foreach ($files as $file) { if (is_file($file)) { unlink($file); } elseif(is_dir($file)) { rmdir($file); } } } $json[‘success‘] = $this->language->get(‘text_delete‘); } $this->response->setOutput(json_encode($json)); } public function move() { $this->language->load(‘common/filemanager‘); $json = array(); if (isset($this->request->post[‘from‘]) && isset($this->request->post[‘to‘])) { $from = rtrim(DIR_IMAGE . ‘data/‘ . str_replace(‘../‘, ‘‘, html_entity_decode($this->request->post[‘from‘], ENT_QUOTES, ‘UTF-8‘)), ‘/‘); if (!file_exists($from)) { $json[‘error‘] = $this->language->get(‘error_missing‘); } if ($from == DIR_IMAGE . ‘data‘) { $json[‘error‘] = $this->language->get(‘error_default‘); } $to = rtrim(DIR_IMAGE . ‘data/‘ . str_replace(‘../‘, ‘‘, html_entity_decode($this->request->post[‘to‘], ENT_QUOTES, ‘UTF-8‘)), ‘/‘); if (!file_exists($to)) { $json[‘error‘] = $this->language->get(‘error_move‘); } if (file_exists($to . ‘/‘ . $this->get_basename($from))) { $json[‘error‘] = $this->language->get(‘error_exists‘); } } else { $json[‘error‘] = $this->language->get(‘error_directory‘); } if (!$this->user->hasPermission(‘modify‘, ‘common/filemanager‘)) { $json[‘error‘] = $this->language->get(‘error_permission‘); } if (!isset($json[‘error‘])) { rename($from, $to . ‘/‘ . $this->get_basename($from)); $json[‘success‘] = $this->language->get(‘text_move‘); } $this->response->setOutput(json_encode($json)); } public function copy() { $this->language->load(‘common/filemanager‘); $json = array(); if (isset($this->request->post[‘path‘]) && isset($this->request->post[‘name‘])) { if ((utf8_strlen($this->request->post[‘name‘]) < 2) || (utf8_strlen($this->request->post[‘name‘]) > 255)) { $json[‘error‘] = $this->language->get(‘error_filename‘); } $old_name = rtrim(DIR_IMAGE . ‘data/‘ . str_replace(‘../‘, ‘‘, html_entity_decode($this->request->post[‘path‘], ENT_QUOTES, ‘UTF-8‘)), ‘/‘); if (!file_exists($old_name) || $old_name == DIR_IMAGE . ‘data‘) { $json[‘error‘] = $this->language->get(‘error_copy‘); } if (is_file($old_name)) { $ext = strrchr($old_name, ‘.‘); } else { $ext = ‘‘; } $new_name = dirname($old_name) . ‘/‘ . str_replace(‘../‘, ‘‘, html_entity_decode($this->request->post[‘name‘], ENT_QUOTES, ‘UTF-8‘) . $ext); if (file_exists($new_name)) { $json[‘error‘] = $this->language->get(‘error_exists‘); } } else { $json[‘error‘] = $this->language->get(‘error_select‘); } if (!$this->user->hasPermission(‘modify‘, ‘common/filemanager‘)) { $json[‘error‘] = $this->language->get(‘error_permission‘); } if (!isset($json[‘error‘])) { if (is_file($old_name)) { copy($old_name, $new_name); } else { $this->recursiveCopy($old_name, $new_name); } $json[‘success‘] = $this->language->get(‘text_copy‘); } $this->response->setOutput(json_encode($json)); } function recursiveCopy($source, $destination) { $directory = opendir($source); @mkdir($destination); while (false !== ($file = readdir($directory))) { if (($file != ‘.‘) && ($file != ‘..‘)) { if (is_dir($source . ‘/‘ . $file)) { $this->recursiveCopy($source . ‘/‘ . $file, $destination . ‘/‘ . $file); } else { copy($source . ‘/‘ . $file, $destination . ‘/‘ . $file); } } } closedir($directory); } public function folders() { $this->response->setOutput($this->recursiveFolders(DIR_IMAGE . ‘data/‘)); } protected function recursiveFolders($directory) { $output = ‘‘; $output .= ‘<option value="http://www.mamicode.com/‘ . utf8_substr($directory, strlen(DIR_IMAGE . ‘data/‘)) . ‘">‘ . utf8_substr($directory, strlen(DIR_IMAGE . ‘data/‘)) . ‘</option>‘; $directories = glob(rtrim(str_replace(‘../‘, ‘‘, $directory), ‘/‘) . ‘/*‘, GLOB_ONLYDIR); foreach ($directories as $directory) { $output .= $this->recursiveFolders($directory); } return $output; } public function rename() { $this->language->load(‘common/filemanager‘); $json = array(); if (isset($this->request->post[‘path‘]) && isset($this->request->post[‘name‘])) { if ((utf8_strlen($this->request->post[‘name‘]) < 2) || (utf8_strlen($this->request->post[‘name‘]) > 255)) { $json[‘error‘] = $this->language->get(‘error_filename‘); } $old_name = rtrim(DIR_IMAGE . ‘data/‘ . str_replace(‘../‘, ‘‘, html_entity_decode($this->request->post[‘path‘], ENT_QUOTES, ‘UTF-8‘)), ‘/‘); if (!file_exists($old_name) || $old_name == DIR_IMAGE . ‘data‘) { $json[‘error‘] = $this->language->get(‘error_rename‘); } if (is_file($old_name)) { $ext = strrchr($old_name, ‘.‘); } else { $ext = ‘‘; } $new_name = dirname($old_name) . ‘/‘ . str_replace(‘../‘, ‘‘, html_entity_decode($this->request->post[‘name‘], ENT_QUOTES, ‘UTF-8‘) . $ext); if (file_exists($new_name)) { $json[‘error‘] = $this->language->get(‘error_exists‘); } } if (!$this->user->hasPermission(‘modify‘, ‘common/filemanager‘)) { $json[‘error‘] = $this->language->get(‘error_permission‘); } if (!isset($json[‘error‘])) { rename($old_name, $new_name); $json[‘success‘] = $this->language->get(‘text_rename‘); } $this->response->setOutput(json_encode($json)); } public function upload() { $this->language->load(‘common/filemanager‘); $json = array(); if (isset($this->request->post[‘directory‘])) { if (isset($this->request->files[‘image‘]) && $this->request->files[‘image‘][‘tmp_name‘]) { $filename = $this->get_basename(html_entity_decode($this->request->files[‘image‘][‘name‘], ENT_QUOTES, ‘UTF-8‘)); if ((strlen($filename) < 3) || (strlen($filename) > 255)) { $json[‘error‘] = $this->language->get(‘error_filename‘); } $directory = rtrim(DIR_IMAGE . ‘data/‘ . str_replace(‘../‘, ‘‘, $this->request->post[‘directory‘]), ‘/‘); if (!is_dir($directory)) { $json[‘error‘] = $this->language->get(‘error_directory‘); } if ($this->request->files[‘image‘][‘size‘] > 300000) { $json[‘error‘] = $this->language->get(‘error_file_size‘); } $allowed = array( ‘image/jpeg‘, ‘image/pjpeg‘, ‘image/png‘, ‘image/x-png‘, ‘image/gif‘, ‘application/x-shockwave-flash‘ ); if (!in_array($this->request->files[‘image‘][‘type‘], $allowed)) { $json[‘error‘] = $this->language->get(‘error_file_type‘); } $allowed = array( ‘.jpg‘, ‘.jpeg‘, ‘.gif‘, ‘.png‘, ‘.flv‘ ); if (!in_array(strtolower(strrchr($filename, ‘.‘)), $allowed)) { $json[‘error‘] = $this->language->get(‘error_file_type‘); } if ($this->request->files[‘image‘][‘error‘] != UPLOAD_ERR_OK) { $json[‘error‘] = ‘error_upload_‘ . $this->request->files[‘image‘][‘error‘]; } } else { $json[‘error‘] = $this->language->get(‘error_file‘); } } else { $json[‘error‘] = $this->language->get(‘error_directory‘); } if (!$this->user->hasPermission(‘modify‘, ‘common/filemanager‘)) { $json[‘error‘] = $this->language->get(‘error_permission‘); } if (!isset($json[‘error‘])) { if (@move_uploaded_file($this->request->files[‘image‘][‘tmp_name‘], $directory . ‘/‘ . $filename)) { $json[‘success‘] = $this->language->get(‘text_uploaded‘); } else { $json[‘error‘] = $this->language->get(‘error_uploaded‘); } } $this->response->setOutput(json_encode($json)); } private function get_basename($filename){ return preg_replace(‘/^.+[\\\\\\/]/‘, ‘‘, $filename); }} ?>
opencart 上传中文文件问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。