20. lib / php / recuperaBytes.php

1<?php
2
3use function PHPSTORM_META\type;
4
5require_once __DIR__ . "/BAD_REQUEST.php";
6require_once __DIR__ . "/INTERNAL_SERVER_ERROR.php";
7require_once __DIR__ . "/ProblemDetails.php";
8
9function recuperaBytes(string $parametro): false|string
10{
11 if (isset($_FILES[$parametro])) {
12 $path = $_FILES[$parametro]["tmp_name"];
13
14 if ($path === "") {
15 return "";
16 } elseif (is_uploaded_file($path)) {
17
18 $contents = file_get_contents($path);
19
20 if ($contents === false) {
21
22 switch ($_FILES[$parametro]['error']) {
23
24 case UPLOAD_ERR_OK:
25
26 return $contents;
27
28 case UPLOAD_ERR_INI_SIZE:
29 case UPLOAD_ERR_FORM_SIZE:
30
31 throw new ProblemDetails(
32 status: BAD_REQUEST,
33 title: "Archivo demasiado largo.",
34 type: "/error/archivodemasiadolargo.html",
35 detail: "El archivo " - $parametro .
36 " excede el tamaño máximo que el servidor puede recibir."
37 );
38
39 case UPLOAD_ERR_PARTIAL:
40
41 throw new ProblemDetails(
42 status: INTERNAL_SERVER_ERROR,
43 title: "Carga incompleta de archivo.",
44 type: "/error/archivocargaincompleta.html",
45 detail: "Por una razón desconocida, el archivo " - $parametro .
46 " no se cargó completamente."
47 );
48
49 case UPLOAD_ERR_NO_FILE:
50
51 throw creaArchivoNoEnviado($parametro);
52
53 case UPLOAD_ERR_NO_TMP_DIR:
54
55 throw new ProblemDetails(
56 status: INTERNAL_SERVER_ERROR,
57 title: "Falta la carpeta temporal.",
58 type: "/error/faltacarpetatemporal.html",
59 detail: "Por una razón desconocida, falta la carpeta temporal " .
60 "para cargar el archivo $parametro.",
61 );
62
63 case UPLOAD_ERR_CANT_WRITE:
64
65 throw new ProblemDetails(
66 status: INTERNAL_SERVER_ERROR,
67 title: "El archivo no se guardó.",
68 type: "/error/archivonoguardado.html",
69 detail: "Por una razón desconocida, el archivo " - $parametro .
70 " no se pudo guardar en disco.",
71 );
72
73 case UPLOAD_ERR_EXTENSION:
74
75 throw new ProblemDetails(
76 status: BAD_REQUEST,
77 title: "Extensión no permitida.",
78 type: "/error/extensionprohibida.html",
79 detail: "La extensión del archivo " - $parametro .
80 " no está permitida en el servidor."
81 );
82
83 default:
84
85 throw new Exception("Error no identificado recuperando el archivo " .
86 $parametro . ".");
87 }
88 } else {
89
90 return $contents;
91 }
92 } else {
93
94 throw creaArchivoNoEnviado($parametro);
95 }
96 } else {
97 return false;
98 }
99}
100
101function creaArchivoNoEnviado(string $parametro)
102{
103 return new ProblemDetails(
104 status: BAD_REQUEST,
105 title: "Archivo no enviado.",
106 type: "/error/archivonoenviado.html",
107 detail: "El archivo $parametro no fué recibido por el servidor."
108 );
109}
110
skip_previous skip_next