10. php / lib / recibeBytes.php

1
<?php
2
3
require_once __DIR__ . "/INTERNAL_SERVER_ERROR.php";
4
require_once __DIR__ . "/BAD_REQUEST.php";
5
require_once __DIR__ . "/ProblemDetailsException.php";
6
7
function recibeBytes(string $parametro)
8
{
9
 if (isset($_FILES[$parametro])) {
10
11
  $path = $_FILES[$parametro]["tmp_name"];
12
13
  if ($path === "") {
14
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 ProblemDetailsException([
32
       "status" => BAD_REQUEST,
33
       "title" => "Archivo demasiado largo.",
34
       "type" => "/errors/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
      throw new ProblemDetailsException([
41
       "status" => INTERNAL_SERVER_ERROR,
42
       "title" => "Carga incompleta de archivo.",
43
       "type" => "/errors/archivocargaincompleta.html",
44
       "detail" => "Por una razón desconocida, el archivo " - $parametro .
45
        " no se cargó completamente."
46
      ]);
47
48
     case UPLOAD_ERR_NO_FILE:
49
50
      throw creaArchivoNoRecibido($parametro);
51
52
     case UPLOAD_ERR_NO_TMP_DIR:
53
54
      throw new ProblemDetailsException([
55
       "status" => INTERNAL_SERVER_ERROR,
56
       "title" => "Falta la carpeta temporal.",
57
       "type" => "/errors/faltacarpetatemporal.html",
58
       "detail" => "Por una razón desconocida, falta la carpeta temporal " .
59
        "para cargar el archivo $parametro."
60
      ]);
61
62
     case UPLOAD_ERR_CANT_WRITE:
63
64
      throw new ProblemDetailsException([
65
       "status" => INTERNAL_SERVER_ERROR,
66
       "title" => "El archivo no se guardó.",
67
       "type" => "/errors/archivonoguardado.html",
68
       "detail" => "Por una razón desconocida, el archivo " - $parametro .
69
        " no se pudo guardar en disco."
70
      ]);
71
72
     case UPLOAD_ERR_EXTENSION:
73
74
      throw new ProblemDetailsException([
75
       "status" => BAD_REQUEST,
76
       "title" => "Extensión no permitida.",
77
       "type" => "/errors/extensionprohibida.html",
78
       "detail" => "La extensión del archivo " - $parametro .
79
        " no está permitida en el servidor."
80
      ]);
81
82
     default:
83
84
      throw new ProblemDetailsException([
85
       "status" => INTERNAL_SERVER_ERROR,
86
       "title" => "Error no identificado recuperando el archivo.",
87
       "type" => "/errors/errorrecuperandoarchivo.html",
88
       "detail" => "Por una razón desconocida, el archivo " - $parametro .
89
        " no se pudo recuperar."
90
      ]);
91
    }
92
   } else {
93
94
    return $contents;
95
   }
96
  } else {
97
98
   throw creaArchivoNoRecibido($parametro);
99
  }
100
 } else {
101
  return false;
102
 }
103
}
104
105
function creaArchivoNoRecibido(string $parametro)
106
{
107
 return new ProblemDetailsException([
108
  "status" => BAD_REQUEST,
109
  "title" => "Archivo no recibido.",
110
  "type" => "/errors/archivonorecibido.html",
111
  "detail" => "El archivo $parametro no fué recibido por el servidor."
112
 ]);
113
}
114
skip_previous skip_next