Because .inc style is deprecated and also dangerious as often not setup correctly on the server all .inc files have been renamed to .php files. All internall calls have been udpated.
113 lines
2.8 KiB
PHP
Executable File
113 lines
2.8 KiB
PHP
Executable File
<?php
|
|
|
|
namespace FileUpload;
|
|
|
|
use \FileUpload\Core\qqUploadedFileForm;
|
|
use \FileUpload\Core\qqUploadedFileXhr;
|
|
|
|
class qqFileUploader
|
|
{
|
|
private $allowedExtensions = array();
|
|
private $sizeLimit = 10485760;
|
|
private $file;
|
|
|
|
public function __construct(array $allowedExtensions = array(), $sizeLimit = 10485760)
|
|
{
|
|
$allowedExtensions = array_map("strtolower", $allowedExtensions);
|
|
|
|
$this->allowedExtensions = $allowedExtensions;
|
|
$this->sizeLimit = $sizeLimit;
|
|
|
|
$this->checkServerSettings();
|
|
|
|
if (isset($_GET['qqfile'])) {
|
|
$this->file = new qqUploadedFileXhr();
|
|
} elseif (isset($_FILES['qqfile'])) {
|
|
$this->file = new qqUploadedFileForm();
|
|
} else {
|
|
$this->file = false;
|
|
}
|
|
}
|
|
|
|
private function checkServerSettings()
|
|
{
|
|
$postSize = $this->toBytes(ini_get('post_max_size'));
|
|
$uploadSize = $this->toBytes(ini_get('upload_max_filesize'));
|
|
|
|
if ($postSize < $this->sizeLimit || $uploadSize < $this->sizeLimit) {
|
|
$size = max(1, $this->sizeLimit / 1024 / 1024) . 'M';
|
|
die("{'error':'increase post_max_size and upload_max_filesize to $size'}");
|
|
}
|
|
}
|
|
|
|
private function toBytes($str)
|
|
{
|
|
$val = trim($str);
|
|
$last = strtolower($str[strlen($str)-1]);
|
|
switch ($last) {
|
|
case 'g':
|
|
$val *= 1024;
|
|
// no break
|
|
case 'm':
|
|
$val *= 1024;
|
|
// no break
|
|
case 'k':
|
|
$val *= 1024;
|
|
}
|
|
return $val;
|
|
}
|
|
|
|
/**
|
|
* Returns array('success'=>true) or array('error'=>'error message')
|
|
*/
|
|
public function handleUpload($uploadDirectory, $replaceOldFile = false)
|
|
{
|
|
if (!is_writable($uploadDirectory)) {
|
|
return array('error' => "Server error. Upload directory isn't writable.");
|
|
}
|
|
|
|
if (!$this->file) {
|
|
return array('error' => 'No files were uploaded.');
|
|
}
|
|
|
|
$size = $this->file->getSize();
|
|
|
|
if ($size == 0) {
|
|
return array('error' => 'File is empty');
|
|
}
|
|
|
|
if ($size > $this->sizeLimit) {
|
|
return array('error' => 'File is too large');
|
|
}
|
|
|
|
$pathinfo = pathinfo($this->file->getName());
|
|
$filename = $pathinfo['filename'];
|
|
//$filename = md5(uniqid());
|
|
$ext = $pathinfo['extension'];
|
|
|
|
if ($this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)) {
|
|
$these = implode(', ', $this->allowedExtensions);
|
|
return array('error' => 'File has an invalid extension, it should be one of '. $these . '.');
|
|
}
|
|
|
|
if (!$replaceOldFile) {
|
|
/// don't overwrite previous files that were uploaded
|
|
while (file_exists($uploadDirectory . $filename . '.' . $ext)) {
|
|
$filename .= rand(10, 99);
|
|
}
|
|
}
|
|
|
|
$this->uploadFileName = $uploadDirectory . $filename . '.' . $ext;
|
|
$this->uploadFileExt = $ext;
|
|
|
|
if ($this->file->save($uploadDirectory . $filename . '.' . $ext)) {
|
|
return array('success' => true);
|
|
} else {
|
|
return array('error' => 'Could not save uploaded file.' .
|
|
'The upload was cancelled, or server error encountered');
|
|
}
|
|
}
|
|
}
|
|
|
|
// __END__
|