У меня есть сервер, который я использую для загрузки файлов. Это сервер 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
Преобразование предупреждений PHP в JSON при вызовах POST API ⇐ Php
Кемеровские программисты php общаются здесь
-
Anonymous
1716513230
Anonymous
У меня есть сервер, который я использую для загрузки файлов. Это сервер Apache, использующий PHP 8.2 для написания сценариев. Я создал форму, которая позволяет пользователю загружать изображения и видео на сервер. Прямо сейчас, когда я загружаю слишком большой файл, я возвращаю общую ошибку JSON 400, которая просто говорит: «Не удалось загрузить ваш файл».
Когда загрузка не удалась, возникает ошибка PHP. вошедший в Apache, который говорит что-то вроде: [b]Предупреждение PHP: длина содержимого POST в 8978294 байт превышает предел в 8388608 байт в Неизвестном в строке 0[/b]. Я хотел бы иметь возможность фиксировать это сообщение об ошибке, сгенерированное PHP во время выполнения.
Как только я зафиксирую сообщение, я добавлю некоторые условия, чтобы уменьшить специфичность сообщения и, возможно, изменить его. это что-то вроде: [b]Файл слишком велик, разрешено только XX мегабайт.[/b] Затем я возвращаю это сообщение пользователю вместе с соответствующим кодом состояния.
Верно теперь, если загрузка не удалась, предупреждение об ошибке 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;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78526101/converting-php-warnings-to-json-when-making-post-api-calls[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия