32-subir archivos con php

Con php es facil subir archivos al servidor

Ponga atencion a la subida de archivos, pues muy facil puede recebir una infection

Configurar el archivo "php.ini"

Lo primero es configurar el archivo php.ini para permitir cargas de archivos

Como se hace?

En el archivo php.ini buscamos file_uploads y lo estabelecemos como ON

...

ejemplo

file_uploads = On



Crear el formulario HTML

Lo primero creamos un formulario que nos permita subir archivos, del tipo file

ejemplo

<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
  Select image to upload:
  <input type="file" name="fileToUpload" id="fileToUpload">
  <input type="submit" value="Upload Image" name="submit">
</form>

</body>
</html>
   



Algunas reglas a seguir para el formulario HTML anterior:

  • Asegúrate de que el formulario use method="post"
  • El formulario también necesita el siguiente atributo: enctype="multipart/form-data". Especifica qué tipo de contenido usar al enviar el formulario

Sin los requisitos anteriores, la carga del archivo no funcionará.

Otras cosas a tener en cuenta:

  • El atributo type="file" de la etiqueta muestra el campo de entrada como un control de selección de archivos, con un botón "Examinar" junto al control de entrada.

El formulario anterior envía datos a un archivo llamado "upload.php", que crearemos a continuación.

Pero como he dicho en entradas anteriores si dejamos en blanco la action="" se enviara al proprio formulario




Crear sentencia de comandos para hacer el upload

El archivo "upload.php" contiene el código para cargar un archivo:


<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
  $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
  if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
  } else {
    echo "File is not an image.";
    $uploadOk = 0;
  }
}
?>
    

Script PHP explicado:

  • $target_dir = "uploads/": especifica el directorio donde se colocará el archivo
  • $target_file especifica la ruta del archivo que se cargará
  • $uploadOk=1 aún no se usa (se usará más adelante)
  • $imageFileType contiene la extensión de archivo del archivo (en minúsculas)
  • A continuación, compruebe si el archivo de imagen es una imagen real o una imagen falsa

Nota: Deberá crear un nuevo directorio llamado "uploads" en el directorio donde reside el archivo "upload.php". Los archivos subidos se guardará allí.




Comprobar si el archivo ya existe

Primero, comprobaremos si el archivo ya existe en la carpeta "uploads".

Si lo hace, se muestra un mensaje de error y $upload Ok se establece en 0:

// Check if file already exists
if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
} 

Limitar tamaño de archivo

El campo de entrada de archivos en nuestro formulario HTML anterior se llama "fileToUpload".

Ahora, queremos comprobar el tamaño del archivo. Si el archivo tiene más de 500 KB, se muestra un mensaje de error y $upload Ok se establece en 0:

// Check file size
if ($_FILES["fileToUpload"]["size"] > 500.000) {
  echo "Sorry, your file is too large.";
  $uploadOk = 0;
} 
    



Limitar tipo de archivo

El siguiente código solo permite a los usuarios cargar archivos JPG, JPEG, PNG y GIF. Todos los demás tipos de archivo da un mensaje de error antes de configurar $uploadOk a 0:

// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType
!= "jpeg"
&& $imageFileType != "gif" ) {
  echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
  $uploadOk = 0;
} 



Carga completa de archivo

Codigo completo para cargar archivo


    <?php
    $target_dir = "uploads/";
    $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
    $uploadOk = 1;
    $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
    
    // Check if image file is a actual image or fake image
    if(isset($_POST["submit"])) {
      $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
      if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
      } else {
        echo "File is not an image.";
        $uploadOk = 0;
      }
    }
    
    // Check if file already exists
    if (file_exists($target_file)) {
      echo "Sorry, file already exists.";
      $uploadOk = 0;
    }
    
    // Check file size
    if ($_FILES["fileToUpload"]["size"] > 500000) {
      echo "Sorry, your file is too large.";
      $uploadOk = 0;
    }
    
    // Allow certain file formats
    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
    && $imageFileType != "gif" ) {
      echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
      $uploadOk = 0;
    }
    
    // Check if $uploadOk is set to 0 by an error
    if ($uploadOk == 0) {
      echo "Sorry, your file was not uploaded.";
    // if everything is ok, try to upload file
    } else {
      if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], 
      $target_file)) {
 echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]
 ["name"])).
        " has been uploaded.";
      } else {
        echo "Sorry, there was an error uploading your file.";
      }
    }
    ?>
    




Publicar un comentario

0 Comentarios