<?php
class uploader {
public function __construct(){ }
public function isUploadedXHR(){
return isset($_GET['qqfile']);
}
public function uploadXHR(){
$dest_size = 10;
if (!$dest_size){
return array(
'success' => false,
'error' => 'Файл не поступил'
);
}
$dest_name = $_GET['qqfile'];
$dest_info = pathinfo($dest_name);
$destination = $this -> getDestination();
return $this->saveXHRFile($destination, $dest_name, $dest_size);
}
public function getXHRFileSize(){
if (isset($_SERVER["CONTENT_LENGTH"])){
return (int) $_SERVER["CONTENT_LENGTH"];
} else {
return false;
}
}
public function getDestination() {
global $user;
return H . '/sys/tmp/' . md5(microtime(true) . $user -> id);
}
public function saveXHRFile($destination, $orig_name='', $orig_size=0){
$input = fopen("php://input", "r");
$temp = tmpfile();
$realSize = stream_copy_to_stream($input, $temp);
fclose($input);
if ($realSize != $this->getXHRFileSize()){
return array(
'success' => false,
'error' => 'Ошибка загрузки файла'
);
}
$target = fopen($destination, "w");
fseek($temp, 0, SEEK_SET);
stream_copy_to_stream($temp, $target);
fclose($target);
$name = self::getFileName($orig_name);
$extension = self::getFileExtension($orig_name);
return array(
'success' => true,
'path' => $destination,
'name' => $name,
'extension' => $extension,
'type' => ras_to_mime($extension),
'size' => $realSize
);
}
public function uploadFile($post_name) {
if (!isset($_FILES[$post_name])) {
return array(
'success' => false,
'error' => 'Файл не поступил'
);
}
$file = $_FILES[$post_name];
if (!is_file($file['tmp_name'])){
return array(
'success' => false,
'error' => 'Файл не поступил'
);
}
$name = self::getFileName($file['name']);
$extension = self::getFileExtension($file['name']);
$destination = $this -> getDestination();
copy($file['tmp_name'], $destination);
unlink($file['tmp_name']);
return array(
'success' => true,
'path' => $destination,
'name' => $name,
'extension' => $extension,
'type' => ras_to_mime($extension),
'size' => $file['size']
);
}
public static function getFileName($file_full_name) {
$pattern = "|^(.*)\.(.*)$|";
if (preg_match($pattern, $file_full_name)) {
preg_match_all("|^(.*)\.(.*)$|", $file_full_name, $matches);
$name = $matches[1][0];
} else {
$name = $file_full_name;
}
return $name;
}
public static function getFileExtension($file_full_name) {
$pattern = "|^(.*)\.(.*)$|";
if (preg_match($pattern, $file_full_name)) {
preg_match_all("|^(.*)\.(.*)$|", $file_full_name, $matches);
$extension = $matches[2][0];
} else {
$extension = '';
}
return $extension;
}
public function isUploadedFile($post_name) {
return isset($_FILES[$post_name]) && $_FILES[$post_name]['tmp_name'] != null;
}
public function isUploaded($post_name) {
return ($this -> isUploadedFile($post_name) || $this -> isUploadedXHR());
}
public function upload($post_name) {
if ($this -> isUploadedXHR())
return $this -> uploadXHR();
elseif ($this -> isUploadedFile($post_name))
return $this -> uploadFile($post_name);
return array(
'success' => false,
'error' => 'Файл не поступил'
);
}
public function isImage($src){
$size = getimagesize($src);
if ($size === false) return false;
return true;
}
}