* @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 <<
Загрузка...
Подождите, пожалуйста