El upload o subida de archivos al servidor mediante PHP es una tarea muy sencilla. Únicamente necesitamos un formulario HTML y manejar la matriz superglobal $_FILES. El formulario, que debe ser enviado utilizando el método POST, necesitará una entrada de carga de archivos de type file (type="file") con el que seleccionaremos el archivo a subir y un atributo para el tag form que indique al servidor que se va a adjuntar un archivo junto con el resto de información (enctype="multipart/form-data").
<form name="frm_upload" action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="archivo" /> </form>
Para procesar el archivo en el lado del servidor utilizaremos los siguientes elementos de la matriz $_FILES. Esta matriz toma el valor del atributo name del campo de tipo file como índice de su primera dimensión y almacena toda la información proporcionada por el archivo.
$_FILES['archivo']['tmp_name'] es la ruta temporal donde se ha guardado el archivo.
$_FILES['archivo']['name'] el nombre real del archivo en origen.
$_FILES['archivo']['size'] el tamaño del archivo en bytes.
$_FILES['archivo']['type'] tipo MIME del archivo subido al servidor.
$_FILES['archivo']['error'] código de error.
En el siguiente ejemplo cargamos un archivo en el servidor y si la operación tiene éxito informamos algunos detalles sobre el archivo subido.
//ruta donde colocaremos el archivo $archivo = $_SERVER['DOCUMENT_ROOT'] . '/libro/18/uploads/' . $_FILES['userfile']['name']; //archivo temporal cargado en el servidor $archivo_tmp = $_FILES['userfile']['tmp_name']; $archivo_size = $_FILES['userfile']['size']; $archivo_type = $_FILES['userfile']['type']; if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { if (!move_uploaded_file($archivo_tmp, $archivo)) { echo 'El archivo no ha podido ser ubicado en el directorio de destino.'; } else { echo 'Archivo guardado correctamente.<br />'; echo 'Ruta completa: ' . $archivo . '<br />'; echo 'Tamaño archivo: ' . round($archivo_size / 1024, 2) . 'KB. <br />'; echo 'Tipo: ' . $archivo_type . '<br />'; } }