* @sponsored by: DotConcepts (http://www.dotconcepts.net) * @version: 0.9.0 */ session_start(); define('NICUPLOAD_PATH', '/upload/blog'); define('NICUPLOAD_URI', '/upload/blog'); $nicupload_allowed_extensions = array('jpg','jpeg','png','gif','bmp'); // You should not need to modify below this line $rfc1867 = function_exists('apc_fetch') && ini_get('apc.rfc1867'); if(!function_exists('json_encode')) { die('{"error" : "Хостинг не поддерживает технологию загрузки файлов (json_encode/decode)"}'); } $id = $_POST['APC_UPLOAD_PROGRESS']; if(empty($id)) { $id = $_GET['id']; } if($_SERVER['REQUEST_METHOD']=='POST') { // Upload is complete if(empty($id) || !is_numeric($id)) { nicupload_error('Не верный загружаемый ID'); } if(!is_dir(NICUPLOAD_PATH) || !is_writable(NICUPLOAD_PATH)) { nicupload_error('Директория загрузки '.NICUPLOAD_PATH.' должна иметь права на запись!'); } $file = $_FILES['nicImage']; $image = $file['tmp_name']; $max_upload_size = ini_max_upload_size(); if(!$file) { nicupload_error('Файл должен быть меньше чем '.bytes_to_readable($max_upload_size)); } $ext = strtolower(substr(strrchr($file['name'], '.'), 1)); @$size = getimagesize($image); if(!$size || !in_array($ext, $nicupload_allowed_extensions)) { nicupload_error('Файл изображения испорчен, должен быть меньше '.bytes_to_readable($max_upload_size)); } $filename = $id.'.'.$ext; $path = NICUPLOAD_PATH.'/'.$filename; if(!move_uploaded_file($image, $path)) { nicupload_error('Ошибка сервера, при перемещении фото'); } if($rfc1867) { $status = apc_fetch('upload_'.$id); } if(!$status) { $status = array(); } $status['done'] = 1; $status['width'] = $size[0]; $status['url'] = nicupload_file_uri($filename); if($rfc1867) { apc_store('upload_'.$id, $status); } nicupload_output($status, $rfc1867); exit; } else if(isset($_GET['check'])) { // Upload progress check $check = $_GET['check']; if(!is_numeric($check)) { nicupload_error('Ошибка при загрузке файла id'); } if($rfc1867) { $status = apc_fetch('upload_'.$check); if($status['total'] > 500000 && $status['current']/$status['total'] < 0.9 ) { // Large file and we are < 90% complete $status['interval'] = 3000; } else if($status['total'] > 200000 && $status['current']/$status['total'] < 0.8 ) { // Is this a largeish file and we are < 80% complete $status['interval'] = 2000; } else { $status['interval'] = 1000; } nicupload_output($status); } else { $status = array(); $status['noprogress'] = true; foreach($nicupload_allowed_extensions as $e) { if(file_exists(NICUPLOAD_PATH.'/'.$check.'.'.$e)) { $ext = $e; break; } } if($ext) { $status['url'] = nicupload_file_uri($check.'.'.$ext); } nicupload_output($status); } } // UTILITY FUNCTIONS function nicupload_error($msg) { echo nicupload_output(array('error' => $msg)); } function nicupload_output($status, $showLoadingMsg = false) { $script = ' try { '.(($_SERVER['REQUEST_METHOD']=='POST') ? 'top.' : '').'nicUploadButton.statusCb('.json_encode($status).'); } catch(e) { alert(e.message); } '; if($_SERVER['REQUEST_METHOD']=='POST') { echo ''; } else { echo $script; } if($_SERVER['REQUEST_METHOD']=='POST' && $showLoadingMsg) { echo <<
Загрузка...
Подождите, пожалуйста
END; } exit; } function nicupload_file_uri($filename) { return NICUPLOAD_URI.'/'.$filename; } function ini_max_upload_size() { $post_size = ini_get('post_max_size'); $upload_size = ini_get('upload_max_filesize'); if(!$post_size) $post_size = '8M'; if(!$upload_size) $upload_size = '2M'; return min( ini_bytes_from_string($post_size), ini_bytes_from_string($upload_size) ); } function ini_bytes_from_string($val) { $val = trim($val); $last = strtolower($val[strlen($val)-1]); switch($last) { // The 'G' modifier is available since PHP 5.1.0 case 'g': $val *= 1024; case 'm': $val *= 1024; case 'k': $val *= 1024; } return $val; } function bytes_to_readable( $bytes ) { if ($bytes<=0) return '0 Byte'; $convention=1000; //[1000->10^x|1024->2^x] $s=array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB'); $e=floor(log($bytes,$convention)); return round($bytes/pow($convention,$e),2).' '.$s[$e]; } ?>