65 lines
2.2 KiB
PHP
65 lines
2.2 KiB
PHP
<?php
|
||
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
|
||
|
||
$isCkeditor = !empty($_GET['ckeditor']) || !empty($_GET['CKEditor']);
|
||
$ckFuncNum = isset($_GET['CKEditorFuncNum']) ? (int)$_GET['CKEditorFuncNum'] : 0;
|
||
|
||
function respond($success, $message, $url = '') {
|
||
global $isCkeditor, $ckFuncNum;
|
||
if ($isCkeditor) {
|
||
// CKEditor 4 ожидает HTML с window.parent.CKEDITOR.tools.callFunction(...)
|
||
header('Content-Type: text/html; charset=utf-8');
|
||
$url = addslashes($url);
|
||
$message = addslashes($message);
|
||
echo "<script>window.parent.CKEDITOR.tools.callFunction($ckFuncNum, '$url', '$message');</script>";
|
||
} else {
|
||
// TinyMCE / стандартный JSON-ответ
|
||
header('Content-Type: application/json');
|
||
if ($success) {
|
||
echo json_encode(array('location' => $url));
|
||
} else {
|
||
echo json_encode(array('error' => $message));
|
||
}
|
||
}
|
||
exit();
|
||
}
|
||
|
||
if (!$_SESSION['superadmin']) {
|
||
respond(false, 'Доступ запрещён');
|
||
}
|
||
|
||
// CKEditor отправляет файл в поле "upload", TinyMCE — в "file"
|
||
$file = null;
|
||
if (isset($_FILES['upload'])) $file = $_FILES['upload'];
|
||
elseif (isset($_FILES['file'])) $file = $_FILES['file'];
|
||
|
||
if (!$file || $file['error'] !== UPLOAD_ERR_OK) {
|
||
respond(false, 'Ошибка загрузки файла');
|
||
}
|
||
|
||
$maxSize = 5 * 1024 * 1024; // 5 MB
|
||
if ($file['size'] > $maxSize) {
|
||
respond(false, 'Файл слишком большой (макс. 5 MB)');
|
||
}
|
||
|
||
$ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
|
||
if (!in_array($ext, array('jpg', 'jpeg', 'png', 'webp', 'gif'))) {
|
||
respond(false, 'Недопустимый тип файла');
|
||
}
|
||
|
||
if (@getimagesize($file['tmp_name']) === false) {
|
||
respond(false, 'Файл не является изображением');
|
||
}
|
||
|
||
$dir = $_SERVER['DOCUMENT_ROOT'] . '/images/articles/';
|
||
if (!is_dir($dir)) mkdir($dir, 0755, true);
|
||
|
||
$filename = 'art-upload-' . time() . '-' . mt_rand(1000, 9999) . '.' . $ext;
|
||
$dest = $dir . $filename;
|
||
|
||
if (!move_uploaded_file($file['tmp_name'], $dest)) {
|
||
respond(false, 'Не удалось сохранить файл');
|
||
}
|
||
|
||
respond(true, '', '/images/articles/' . $filename);
|