sync
This commit is contained in:
141
modules/PRB_FileControl/File_Upload.php
Normal file
141
modules/PRB_FileControl/File_Upload.php
Normal file
@@ -0,0 +1,141 @@
|
||||
<?php
|
||||
header('Content-Type: text/html; charset=utf-8');
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
header('Access-Control-Allow-Headers: *');
|
||||
|
||||
$input_name = 'file';
|
||||
|
||||
// Разрешенные расширения файлов.
|
||||
$allow = array('xlsx', 'docx', 'xls', 'doc');
|
||||
|
||||
// Запрещенные расширения файлов.
|
||||
$deny = array(
|
||||
'phtml', 'php', 'php3', 'php4', 'php5', 'php6', 'php7', 'phps', 'cgi', 'pl', 'asp',
|
||||
'aspx', 'shtml', 'shtm', 'htaccess', 'htpasswd', 'ini', 'log', 'sh', 'js', 'html',
|
||||
'htm', 'css', 'sql', 'spl', 'scgi', 'fcgi'
|
||||
);
|
||||
|
||||
// Директория куда будут загружаться файлы.
|
||||
$path = __DIR__ . '/uploads/';
|
||||
|
||||
if (isset($_FILES[$input_name])) {
|
||||
// Проверим директорию для загрузки.
|
||||
if (!is_dir($path)) {
|
||||
mkdir($path, 0777, true);
|
||||
}
|
||||
|
||||
// Преобразуем массив $_FILES в удобный вид для перебора в foreach.
|
||||
$files = array();
|
||||
$diff = count($_FILES[$input_name]) - count($_FILES[$input_name], COUNT_RECURSIVE);
|
||||
if ($diff == 0) {
|
||||
$files = array($_FILES[$input_name]);
|
||||
} else {
|
||||
foreach($_FILES[$input_name] as $k => $l) {
|
||||
foreach($l as $i => $v) {
|
||||
$files[$i][$k] = $v;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($files as $file) {
|
||||
$error = $success = '';
|
||||
|
||||
// Проверим на ошибки загрузки.
|
||||
if (!empty($file['error']) || empty($file['tmp_name'])) {
|
||||
switch (@$file['error']) {
|
||||
case 1:
|
||||
case 2: $error = 'Превышен размер загружаемого файла.'; break;
|
||||
case 3: $error = 'Файл был получен только частично.'; break;
|
||||
case 4: $error = 'Файл не был загружен.'; break;
|
||||
case 6: $error = 'Файл не загружен - отсутствует временная директория.'; break;
|
||||
case 7: $error = 'Не удалось записать файл на диск.'; break;
|
||||
case 8: $error = 'PHP-расширение остановило загрузку файла.'; break;
|
||||
case 9: $error = 'Файл не был загружен - директория не существует.'; break;
|
||||
case 10: $error = 'Превышен максимально допустимый размер файла.'; break;
|
||||
case 11: $error = 'Данный тип файла запрещен.'; break;
|
||||
case 12: $error = 'Ошибка при копировании файла.'; break;
|
||||
default: $error = 'Файл не был загружен - неизвестная ошибка.'; break;
|
||||
}
|
||||
} elseif ($file['tmp_name'] == 'none' || !is_uploaded_file($file['tmp_name'])) {
|
||||
$error = 'Не удалось загрузить файл.';
|
||||
} else {
|
||||
// Оставляем в имени файла только буквы, цифры и некоторые символы.
|
||||
$pattern = "[^a-zа-яё0-9,~!@#%^-_\$\?\(\)\{\}\[\]\.]";
|
||||
$name = mb_eregi_replace($pattern, '-', $file['name']);
|
||||
$name = mb_ereg_replace('[-]+', '-', $name);
|
||||
|
||||
// Т.к. есть проблема с кириллицей в названиях файлов (файлы становятся недоступны).
|
||||
// Сделаем их транслит:
|
||||
// $converter = array(
|
||||
// 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e',
|
||||
// 'ё' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k',
|
||||
// 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r',
|
||||
// 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c',
|
||||
// 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ь' => '', 'ы' => 'y', 'ъ' => '',
|
||||
// 'э' => 'e', 'ю' => 'yu', 'я' => 'ya',
|
||||
|
||||
// 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E',
|
||||
// 'Ё' => 'E', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I', 'Й' => 'Y', 'К' => 'K',
|
||||
// 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R',
|
||||
// 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C',
|
||||
// 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sch', 'Ь' => '', 'Ы' => 'Y', 'Ъ' => '',
|
||||
// 'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya',
|
||||
// );
|
||||
|
||||
// $name = strtr($name, $converter);
|
||||
$parts = pathinfo($name);
|
||||
|
||||
if (empty($name) || empty($parts['extension'])) {
|
||||
$error = 'Недопустимое тип файла';
|
||||
|
||||
} elseif (!empty($allow) && !in_array(strtolower($parts['extension']), $allow)) {
|
||||
$error = 'Недопустимый тип файла';
|
||||
|
||||
} elseif (!empty($deny) && in_array(strtolower($parts['extension']), $deny)) {
|
||||
$error = 'Недопустимый тип файла';
|
||||
|
||||
} else {
|
||||
//Чтобы не затереть файл с таким же названием, добавим префикс.
|
||||
// $i = 0;
|
||||
// $prefix = '';
|
||||
// while (is_file($path . $parts['filename'] . $prefix . '.' . $parts['extension'])) {
|
||||
// $prefix = '(' . ++$i . ')';
|
||||
// }
|
||||
// $name = $parts['filename'] . $prefix . '.' . $parts['extension'];
|
||||
|
||||
date_default_timezone_set('Europe/Moscow');
|
||||
$i = 0;
|
||||
$prefix = '_(' . date("d-m-Y") . ')';
|
||||
while (is_file($path . $parts['filename'] . $prefix . '.' . $parts['extension'])) {
|
||||
$prefix = '_(' . date("d-m-Y") . ')(' . ++$i . ')';
|
||||
}
|
||||
$name = $parts['filename'] . $prefix . '.' . $parts['extension'];
|
||||
|
||||
// Перемещаем файл в директорию.
|
||||
if (move_uploaded_file($file['tmp_name'], $path . $name)) {
|
||||
// Далее можно сохранить название файла в БД и т.п.
|
||||
|
||||
$success = 'Файл «' . $name . '» успешно загружен.';
|
||||
} else {
|
||||
$error = 'Не удалось загрузить файл.';
|
||||
var_dump(http_response_code(300));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Выводим сообщение о результате загрузки.
|
||||
if (!empty($success)) {
|
||||
$post_data = array(
|
||||
'success'=>$success,
|
||||
'uploadIP'=>$_SERVER['REMOTE_ADDR'],
|
||||
'fileName'=>$name,
|
||||
'filePATH'=> $path . $name
|
||||
);
|
||||
echo json_encode(array('item' => $post_data), JSON_FORCE_OBJECT);
|
||||
} else {
|
||||
var_dump(http_response_code(300));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
81
modules/PRB_FileControl/PRB_FileControl.php
Normal file
81
modules/PRB_FileControl/PRB_FileControl.php
Normal file
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
namespace API;
|
||||
|
||||
trait PRB_FileControl
|
||||
{
|
||||
public function insertFileInfo($params)
|
||||
{
|
||||
date_default_timezone_set('Europe/Moscow');
|
||||
$time=date('H:i:s');
|
||||
$name = iconv('UTF-8', 'windows-1251', $params['data']['item']['fileName']);
|
||||
$filePATH = iconv('UTF-8', 'windows-1251', $params['data']['item']['filePATH']);
|
||||
$query = "INSERT INTO [Production].[dbo].[PRB_FileControl] VALUES (
|
||||
0,
|
||||
'$name',
|
||||
'$filePATH',
|
||||
'".$params['data']['item']['uploadIP']."',
|
||||
'".$params['data']['date']." $time')";
|
||||
insert($query);
|
||||
}
|
||||
public function getFiles($params)
|
||||
{
|
||||
$query = "SELECT
|
||||
[isCompleted]
|
||||
,[file_name]
|
||||
,[file_path]
|
||||
,convert(varchar, [upload_date],104)+' - '+convert(varchar, [upload_date],108) as [Дата загрузки]
|
||||
,[id]
|
||||
FROM [Production].[dbo].[PRB_FileControl]
|
||||
WHERE CAST([upload_date] as DATE)='".$params['data']."'
|
||||
order by upload_date desc";
|
||||
select($query);
|
||||
}
|
||||
|
||||
public function setCompleted($params)
|
||||
{
|
||||
$query = "UPDATE [Production].[dbo].[PRB_FileControl]
|
||||
SET isCompleted='".$params['data']['value']."'
|
||||
WHERE id=".$params['data']['id']."";
|
||||
update($query);
|
||||
}
|
||||
public function setHistory($params)
|
||||
{
|
||||
$query = "INSERT INTO [Production].[dbo].[PRB_FileLog] VALUES (
|
||||
'".$params['id']."',
|
||||
'".$_SERVER['REMOTE_ADDR']."',
|
||||
GETDATE())";
|
||||
insert($query);
|
||||
}
|
||||
public function getHistory($params)
|
||||
{
|
||||
$query = "SELECT
|
||||
[upload_ip]+' ('+[DESCRIPT]+')' as IP_Author
|
||||
,[download_ip]+' ('+[DESCRIPT]+')'as IP_Client
|
||||
,convert(varchar, [download_date],104)+' - '+convert(varchar, [download_date],108) as download_date
|
||||
FROM [Production].[dbo].[PRB_FileLog] fl
|
||||
inner join [Production].[dbo].[PRB_FileControl] fc
|
||||
on fl.file_id=fc.id
|
||||
left join [SITE].[dbo].[Police_IP] ip
|
||||
on fl.download_ip=ip.IP_ADDR
|
||||
WHERE CAST([download_date] as DATE)='".$params['data']['date']."'
|
||||
and file_id='".$params['data']['id']."'
|
||||
order by download_date desc";
|
||||
select($query);
|
||||
}
|
||||
public function deleteData($params)
|
||||
{
|
||||
$query = "DELETE [Production].[dbo].[PRB_FileControl]
|
||||
WHERE id=".$params['data']['id']."";
|
||||
delete($query);
|
||||
$query = "DELETE [Production].[dbo].[PRB_FileLog]
|
||||
WHERE file_id=".$params['data']['id']."";
|
||||
delete($query);
|
||||
$path = __DIR__ . '/uploads/';
|
||||
$input_name=$params['data']['name'];
|
||||
$f=$path.'/'.$input_name;
|
||||
if (file_exists($f)) {
|
||||
unlink($f);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user