En este artículo, explicaré los conceptos básicos de la carga de archivos en PHP. En primer lugar, veremos las opciones de configuración de PHP que se deben implementar para que los archivos se carguen correctamente. A continuación, desarrollaremos un ejemplo real de cómo cargar un archivo..
Hay un par de ajustes de configuración de PHP que querrá comprobar de antemano para cargar archivos correctamente. En esta sección, veremos todas y cada una de las opciones que son importantes en lo que respecta a la carga de archivos PHP. Estas opciones se pueden configurar en el php.ini expediente.
Si no estás seguro de dónde encontrar tu php.ini archivo, puede utilizar el php_ini_loaded_file ()
para localizarlo. Simplemente cree un archivo PHP en su servidor con la siguiente línea y ábralo desde el navegador.
Aquí hay un extracto de un archivo de configuración con algunos valores predeterminados útiles.
; Ya sea para permitir la carga de archivos HTTP. file_uploads = On; Directorio temporal para archivos HTTP cargados. ; Utilizará el sistema por defecto si no se establece. ; upload_tmp_dir =; Tamaño máximo permitido para archivos subidos. upload_max_filesize = 16M; Número máximo de archivos que se pueden cargar a través de una sola solicitud max_file_uploads = 20; Tamaño máximo de datos POST que PHP aceptará. post_max_size = 20M max_input_time = 60 memory_limit = 128M max_execution_time = 30
file_uploads
El valor de la file_uploads
directiva debe establecerse en En
para permitir la carga de archivos. El valor por defecto de esta directiva es En
.
upload_max_filesize
los upload_max_filesize
directiva le permite configurar el tamaño máximo del archivo cargado. De forma predeterminada, se establece en 2M
(dos megabytes), y puede anular esta configuración utilizando la .htaccess archivo también. Dos megabytes no es mucho para los estándares de hoy, por lo que es posible que tenga que aumentar esto. Si recibe un error que archivo supera upload_max_filesize
cuando intenta cargar un archivo, necesita aumentar este valor. Si lo haces, asegúrate de aumentar también post_max_size
(vea abajo).
upload_tmp_dir
Establece un directorio temporal que se utilizará para almacenar los archivos cargados. En la mayoría de los casos, no necesita preocuparse por esta configuración. Si no lo configura, se utilizará el directorio temporal predeterminado del sistema..
post_max_size
los post_max_size
directiva le permite configurar el tamaño máximo de los datos POST. Dado que los archivos se cargan con solicitudes POST, este valor debe ser mayor que lo que ha establecido para el upload_max_filesize
directiva. Por ejemplo, si su upload_max_filesize
es 16M
(16 megabytes), es posible que desee establecer post_max_size
a 20M
.
max_file_uploads
Le permite establecer el número máximo de archivos que se pueden cargar a la vez. El valor predeterminado es 20
, una cantidad razonable.
max_input_time
Es el número máximo de segundos que un script puede analizar los datos de entrada. Debe establecerlo en un valor razonable si está tratando con cargas de archivos grandes. 60
(60 segundos) es un buen valor para la mayoría de las aplicaciones.
limite de memoria
los limite de memoria
directiva indica la cantidad máxima de memoria que puede consumir un script. Si tiene problemas durante la carga de archivos grandes, debe asegurarse de que el valor de esta directiva sea mayor que el que ha establecido para la post_max_size
directiva. El valor predeterminado es 128M
(128 megabytes), así que a menos que tenga una muy grande post_max_size
y upload_max_filesize
, no tienes que preocuparte por esto.
max_execution_time
Es el número máximo de segundos que se permite ejecutar un script. Si tiene problemas durante la carga de archivos grandes, puede considerar aumentar este valor. 30
(30 segundos) debería funcionar bien para la mayoría de las aplicaciones.
Ahora vamos a construir un ejemplo del mundo real para demostrar la carga de archivos en PHP.
Una vez que haya configurado la configuración de PHP, estará listo para probar las capacidades de carga de archivos PHP.
Nuestro repositorio de GitHub tiene un código de muestra que analizaré a lo largo de este artículo. Entonces, si quieres seguirlo, adelante, descárgalo desde GitHub..
Vamos a crear dos archivos PHP: index.php y subir.php. los index.php archivo contiene código que es responsable de mostrar el formulario de carga de archivos. Por otro lado, la subir.php El archivo es responsable de subir un archivo al servidor..
Además, un archivo será subido en el archivos subidos directorio, por lo que debe asegurarse de que esta carpeta exista y de que pueda escribirla el Servidor web
usuario.
En esta sección, veremos las partes clave de la index.php expediente.
Echemos un vistazo a la index.php archivo en GitHub:
Carga de archivos PHP % s', $ _SESSION [' mensaje ']); unset ($ _ SESSION ['mensaje']); ?>
Aunque puede parecer un formulario PHP típico, hay una diferencia importante en el valor de la enctype
atributo de la etiqueta. Necesita ser configurado para
multipart / form-data
ya que el formulario contiene el campo de archivo.
los enctype
atributo especifica el tipo de codificación que se debe usar cuando se envía el formulario, y toma uno de los siguientes tres valores:
aplicación / x-www-form-urlencoded
: Este es el valor predeterminado cuando no establece el valor de enctype
atribuir explícitamente. En este caso, los caracteres se codifican antes de que se envíen al servidor. Si no tiene el campo de archivo en su formulario, debe usar este valor para el enctype
atributo.multipart / form-data
: Cuando usas el multipart / form-data
valor para el enctype
atributo, le permite cargar archivos utilizando el método POST. Además, se asegura de que los caracteres no estén codificados cuando se envíe el formulario.Texto sin formato
: Esto generalmente no se usa. Con esta configuración, los datos se envían sin codificar..A continuación, generamos el campo de archivo, que le permite seleccionar un archivo de su computadora.
Aparte de eso, hemos mostrado un mensaje en la parte superior del formulario. Este mensaje muestra el estado de la carga del archivo, y se configurará en una variable de sesión por el subir.php guión. Veremos más de esto en la siguiente sección..
% s', $ _SESSION [' mensaje ']); unset ($ _ SESSION ['mensaje']); ?>
Así que eso resume la index.php expediente. En la siguiente sección, veremos cómo manejar el archivo cargado en el lado del servidor.
En la sección anterior, creamos el formulario HTML que se muestra en el lado del cliente y le permite cargar un archivo desde su computadora. En esta sección, veremos la contraparte del lado del servidor que le permite manejar el archivo cargado.
Tire en el código de la subir.php archivo en GitHub. Repasaremos las partes importantes de ese archivo..
En el subir.php archivo, hemos comprobado si es una solicitud POST válida en primer lugar.
if (isset ($ _ POST ['uploadBtn']) && $ _POST ['uploadBtn'] == 'Upload') …
En PHP, cuando se carga un archivo, el $ _FILES
La variable superglobal se rellena con toda la información sobre el archivo cargado. Se inicializa como una matriz y puede contener la siguiente información para la carga exitosa de archivos.
tmp_name
: La ruta temporal donde se carga el archivo se almacena en esta variable.nombre
: El nombre real del archivo se almacena en esta variable.tamaño
: Indica el tamaño del archivo cargado en bytes.tipo
: Contiene el tipo mime del archivo cargado.error
: Si hay un error durante la carga del archivo, esta variable se rellena con el mensaje de error correspondiente. En el caso de una carga de archivo exitosa, contiene 0, que puede comparar utilizando el UPLOAD_ERR_OK
constante.Después de validar la solicitud POST, verificamos que la carga del archivo se realizó correctamente.
if (isset ($ _ FILES ['uploadedFile']) && $ _FILES ['uploadedFile'] ['error'] === UPLOAD_ERR_OK) …
Se puede ver que el $ _FILES
la variable es una matriz multidimensional, el primer elemento es el nombre del campo de archivo, y el segundo elemento tiene la información sobre el archivo cargado, como hemos explicado anteriormente.
Si la carga del archivo es exitosa, inicializamos algunas variables con información sobre el archivo cargado.
// obtener detalles del archivo cargado $ fileTmpPath = $ _FILES ['uploadedFile'] ['tmp_name']; $ fileName = $ _FILES ['uploadedFile'] ['name']; $ fileSize = $ _FILES ['uploadedFile'] ['size']; $ fileType = $ _FILES ['uploadedFile'] ['type']; $ fileNameCmps = explode (".", $ fileName); $ fileExtension = strtolower (end ($ fileNameCmps));
En el fragmento de código anterior, también hemos descubierto la extensión del archivo cargado y lo hemos almacenado en el $ fileExtension
variable.
Como el archivo cargado puede contener espacios y otros caracteres especiales, es mejor limpiar el nombre del archivo, y eso es exactamente lo que hemos hecho en el siguiente fragmento de código..
$ newFileName = md5 (time (). $ fileName). '.' . $ fileExtension;
Es importante que restrinja el tipo de archivo que se puede cargar a ciertas extensiones y no permita que todo use el formulario de carga. Lo hemos hecho al verificar la extensión del archivo cargado con un conjunto de extensiones que queremos permitir la carga.
$ allowedfileExtensions = array ('jpg', 'gif', 'png', 'zip', 'txt', 'xls', 'doc'); if (in_array ($ fileExtension, $ allowedfileExtensions)) …
Finalmente, utilizamos el mover_archivo_subido
Función para mover el archivo cargado a la ubicación específica de nuestra elección..
// directorio en el que se moverá el archivo cargado $ uploadFileDir = './uploaded_files/'; $ dest_path = $ uploadFileDir. $ newFileName; if (move_uploaded_file ($ fileTmpPath, $ dest_path)) $ message = 'El archivo se cargó correctamente.'; else $ message = 'Hubo un error al mover el archivo para subir el directorio. Asegúrese de que el directorio de carga se pueda escribir en el servidor web. ';
los mover_archivo_subido
La función toma dos argumentos. El primer argumento es el nombre de archivo del archivo cargado, y el segundo argumento es la ruta de destino a la que desea mover el archivo..
Finalmente, redirigimos al usuario a la index.php expediente. Además, establecemos el mensaje apropiado en la variable de sesión, que se mostrará a los usuarios después de la redirección en el index.php expediente.
No te olvides de crear el archivos subidos directorio y hacerlo escribible por el Servidor web usuario. A continuación, siga adelante y ejecute el index.php archivo, que debe mostrar el formulario de carga de archivo que se ve así:
Haga clic en el Vistazo botón: debería abrir un cuadro de diálogo que le permite seleccionar un archivo de su computadora. Seleccione un archivo con una de las extensiones permitidas en nuestro script y haga clic en el Subir botón.
Debe enviar el formulario y, si todo va bien, debería ver el archivo cargado en el archivos subidos directorio. También puede intentar cargar otros archivos con extensiones que no están permitidas y verificar si nuestro script evita dichas cargas..
Hoy, discutimos los conceptos básicos de la carga de archivos en PHP. En la primera mitad del artículo, discutimos las diferentes opciones de configuración que deben estar en su lugar para que la carga de archivos funcione. Luego vimos un ejemplo del mundo real que demostró cómo funciona la carga de archivos en PHP.
Espero que haya disfrutado de este artículo y siéntase libre de publicar sus consultas y sugerencias a continuación.!