Subida de archivos PHP
- Página anterior Creación/escritura de archivos PHP
- Página siguiente Cookies en PHP
A través de PHP, se puede subir archivos al servidor.
Crear un formulario de subida de archivos
Permitir que los usuarios suban archivos desde el formulario es muy útil.
Vea a continuación este formulario HTML para subir archivos:
<html> <body> <form action="upload_file.php" method="post" enctype="multipart/form-data"> <label for="file">Nombre de archivo:</label> <input type="file" name="file" id="file" /> <br /> <input type="submit" name="submit" value="Enviar" /> </form> </body> </html>
Por favor, tenga en cuenta la siguiente información sobre este formulario:
La propiedad enctype del etiqueta <form> especifica qué tipo de contenido se debe usar al enviar el formulario. Cuando el formulario necesita datos binarios, como el contenido de un archivo, utilice "multipart/form-data".
La propiedad type="file" del etiqueta <input> especifica que se debe manejar la entrada como un archivo. Por ejemplo, al previsualizar en el navegador, se verá un botón de navegación junto a la caja de entrada.
Notas:Permitir que los usuarios suban archivos es un riesgo de seguridad considerable. Por favor, permita solo que usuarios confiables ejecuten operaciones de subida de archivos.
Crear un script de subida
"upload_file.php" archivo contiene el código para subir archivos:
<?php if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Subida: " . $_FILES["file"]["name"] . "<br />"; echo "Tipo: " . $_FILES["file"]["type"] . "<br />"; echo "Tamaño: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Almacenado en: " . $_FILES["file"]["tmp_name"]; } ?>
Al usar el array global de PHP $_FILES, puedes subir archivos desde la computadora del cliente al servidor remoto.
El primer parámetro es el nombre del input del formulario, el segundo índice puede ser "name", "type", "size", "tmp_name" o "error". Algo así:
- $_FILES["file"]["name"] - Nombre del archivo subido
- $_FILES["file"]["type"] - Tipo del archivo subido
- $_FILES["file"]["size"] - Tamaño del archivo subido, en bytes
- $_FILES["file"]["tmp_name"] - Nombre de la copia temporal del archivo almacenado en el servidor
- $_FILES["file"]["error"] - Código de error causado por la subida de archivos
Esta es una manera muy simple de subir archivos. Por consideraciones de seguridad, debe aumentar las restricciones sobre qué usuarios tienen permiso para subir archivos.
Restricciones de subida
En este script, hemos agregado restricciones a la subida de archivos. El usuario solo puede subir archivos .gif o .jpeg, y el tamaño del archivo debe ser menor de 20 kb:
<?php if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 20000)) { if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Subida: " . $_FILES["file"]["name"] . "<br />"; echo "Tipo: " . $_FILES["file"]["type"] . "<br />"; echo "Tamaño: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Almacenado en: " . $_FILES["file"]["tmp_name"]; } } else { echo "Archivo inválido"; } ?>
Notas:Para IE, el tipo de archivo jpg debe ser pjpeg, para FireFox debe ser jpeg.
Guardar archivo subido
El ejemplo anterior creó una copia temporal del archivo subido en la carpeta temporal de PHP del servidor.
Este archivo de copia temporal desaparecerá al finalizar el script. Para guardar el archivo subido, necesitamos copiarlo a otra ubicación:
<?php if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/pjpeg")) && ($_FILES["file"]["size"] < 20000)) { if ($_FILES["file"]["error"] > 0) { echo "Código de retorno: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Subida: " . $_FILES["file"]["name"] . "<br />"; echo "Tipo: " . $_FILES["file"]["type"] . "<br />"; echo "Tamaño: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Archivo temporal: " . $_FILES["file"]["tmp_name"] . "<br />"; if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " ya existe. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "Almacenado en: " . "upload/" . $_FILES["file"]["name"]; } } } else { echo "Archivo inválido"; } ?>
El script superior verificó si el archivo existe, y si no existe, copió el archivo al carpeta especificada.
Notas:Este ejemplo guardó el archivo en una nueva carpeta llamada "upload".
- Página anterior Creación/escritura de archivos PHP
- Página siguiente Cookies en PHP