View file Загрузка фото AJAX/sys/inc/classes/uploader.class.php

File size: 3.44Kb
<?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;

	}
}