Преобразование предупреждений PHP в JSON при вызовах POST APIPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Преобразование предупреждений PHP в JSON при вызовах POST API

Сообщение Anonymous »

У меня есть сервер, который я использую для загрузки файлов. Это сервер Apache, использующий PHP 8.2 для написания сценариев. Я создал форму, которая позволяет пользователю загружать изображения и видео на сервер. Прямо сейчас, когда я загружаю слишком большой файл, я возвращаю общую ошибку JSON 400, которая просто говорит: «Не удалось загрузить ваш файл».
Когда загрузка не удалась, возникает ошибка PHP. вошедший в Apache, который говорит что-то вроде: Предупреждение PHP: длина содержимого POST в 8978294 байт превышает предел в 8388608 байт в Неизвестном в строке 0. Я хотел бы иметь возможность фиксировать это сообщение об ошибке, сгенерированное PHP во время выполнения.
Как только я зафиксирую сообщение, я добавлю некоторые условия, чтобы уменьшить специфичность сообщения и, возможно, изменить его. это что-то вроде: Файл слишком велик, разрешено только XX мегабайт. Затем я возвращаю это сообщение пользователю вместе с соответствующим кодом состояния.
Верно теперь, если загрузка не удалась, предупреждение об ошибке PHP записывается в Apache, а остальная часть сценария PHP продолжает выполняться. Обычно при загрузке файлов константа $_FILES содержит данные для загрузки, но если объем загрузки слишком велик, константа $_FILES представляет собой просто пустой массив. Это означает, что когда я использую блок try catch, он никогда не генерирует исключение.
Как мне зафиксировать эту ошибку PHP, чтобы я мог вернуть соответствующий код состояния HTTP и сообщение об ошибке?
Вот мой код, который обрабатывает запрос POST:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
header('Content-Type: application/json');

$asset = $_FILES['file_data'];

//Stores the filename as it was on the client computer.
$assetName = $asset['name'];

//Stores the filetype e.g image/jpeg
$assetType = $asset['type'];

//Stores any error codes from the upload.
$assetError = $asset['error'];

//Stores the temp name as it is given by the host when uploaded.
$assetTemp = $asset['tmp_name'];

$uploadPath = dirname(__DIR__, 1).'/uploads/';

$extensionsAllowed = ['png','jpg','jpeg','tiff','tif','webp','mp4','mp3','acc'];

$fileExtension = pathinfo($assetName, PATHINFO_EXTENSION);

if(array_search($fileExtension, $extensionsAllowed) !== false) {
echo json_encode(['status'=>415,'message'=>'Failed to upload your file']);
exit;
}

if(is_uploaded_file($assetTemp)) {
if(move_uploaded_file($assetTemp, $uploadPath . $assetName)) {
echo json_encode(['status'=>200,'message'=>'Successfully uploaded '.$assetName);
exit;
}
else {
echo json_encode(['status'=>400,'message'=>'Failed to move your file']);
exit;
}
}
else {
echo json_encode(['status'=>400,'message'=>'Failed to upload your file']);
exit;
}
}


Подробнее здесь: https://stackoverflow.com/questions/785 ... -api-calls
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»