Joywork/admin/ajax/uploadArticleImage.php

65 lines
2.2 KiB
PHP
Raw Permalink Normal View History

2026-05-22 20:21:54 +02:00
<?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);