Cargar archivos

Esta página explica cómo hacer que un formulario envíe un archivo al servidor y cómo hacer que éste lo procese.

Configuración de PHP

Para poder recibir archivos, debes tener establecidas las siguientes directivas de configuración en el archivo PHP.ini

Formulario

Un formulario puede enviar un archivo al servidor mediante un control de tipo file. El formulario sería:

<form action="carga_archivos.php" method="post" enctype="multipart/form-data">
  <input type="file" name="archivo_cliente"><br>
  <input type="submit" name="enviar" value="Enviar">
</form>

Es importante que el atributo method tenga el valor post y que el atributo enctype tenga el valor multipart/form-data.

El aspecto del formulario dependerá del navegador que utilices. En este navegador sería:

Script PHP

Cuando PHP recibe el archivo, lo almacena en el directorio upload_tmp_dir y rellena la matriz asociativa superglobal $_FILES["archivo_cliente"] (el nombre que se haya dado al control en el formulario). Esa matriz contiene los siguientes elementos:

Como el archivo del directorio temporal desaparecerá al acabar el script, es necesario copiar el archivo a otro lugar. Para ello utiliza la función move_uploaded_file($origen, $destino), en la que $origen es el nombre del archivo cargado en el directorio temporal (normalmente puedes utilizar directamente $_FILES['archivo_cliente']['tmp_name']) y $destino el nombre del archivo que contendrá la copia.

Codigo de subida

Comprobamos que la subida se realiza con exito

if (isset($_FILES['archivo_cliente']) && $_FILES['archivo_cliente']['error'] === UPLOAD_ERR_OK) {
...
}
    

Si la carga del archivo es exitosa, inicializamos algunas variables con información sobre el archivo cargado.

  // obtenemos detalles del archivo
$fileTmpPath = $_FILES['archivo_cliente']['tmp_name'];
$fileName = $_FILES['archivo_cliente']['name'];
$fileSize = $_FILES['archivo_cliente']['size'];
$fileType = $_FILES['archivo_cliente']['type'];
$fileNameCmps = explode(".", $fileName);
$fileExtension = strtolower(end($fileNameCmps));
        
        

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, usamos la función move_uploaded_file para mover el archivo cargado a la ubicación específica de nuestra elección.

 // directory in which the uploaded file will be moved
$uploadFileDir = '/ficheros_subidos/';
$dest_path = $uploadFileDir . $fileName;
 
if(move_uploaded_file($fileTmpPath, $dest_path))
{
  $message ='El fichero se ha subido satisfactoriamente.';
}
else
{
  $message = 'Ha habido un problema al mover el archivo. Asegurese que el directorio esta activo en el servidor.';
}
echo $message
    

La función move_uploaded_file 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.

carga_archivos.php

Aqui tenemos la construccion completa

 <?php
$message="ok";
if (isset($_FILES['archivo_cliente']) && $_FILES['archivo_cliente']['error'] === UPLOAD_ERR_OK) {
 // obtenemos detalles del archivo
$fileTmpPath = $_FILES['archivo_cliente']['tmp_name'];
$fileName = $_FILES['archivo_cliente']['name'];
$fileSize = $_FILES['archivo_cliente']['size'];
$fileType = $_FILES['archivo_cliente']['type'];
$fileNameCmps = explode(".", $fileName);
$fileExtension = strtolower(end($fileNameCmps));
    
$allowedfileExtensions = array('jpg', 'gif', 'png', 'zip', 'txt', 'xls', 'doc');
if (in_array($fileExtension, $allowedfileExtensions)) {
// directory in which the uploaded file will be moved
$uploadFileDir = '/ficheros_subidos/';
$dest_path = $uploadFileDir . $fileName;
 
if(move_uploaded_file($fileTmpPath, $dest_path)){
  $message ='El fichero se ha subido satisfactoriamente.';
}else{
  $message = 'Ha habido un problema al mover el archivo. Asegurese que el directorio esta activo en el servidor.';
}
echo $message;
}
}
?>
       
        

Ampliar informacion