English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En este tutorial, aprenderás cómo usar PHP para subir archivos a un servidor web remoto.
En este tutorial, aprenderemos a usar un formulario HTML simple y PHP para subir archivos a un servidor remoto. Puede subir cualquier tipo de archivo, como imágenes, videos, archivos ZIP, documentos de Microsoft Office, PDF, archivos ejecutables y otros tipos de archivos diversos.
A continuación se muestra un ejemplo de cómo crear un formulario HTML simple para subir archivos.
!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Formulario de Subida de Archivos</title> </head> <form action="upload-"manager.html" method="post" enctype="multipart/formulario-data"> <h2>Subir archivo</h2> <label for="fileSelect">Nombre de archivo:</label> <input type="file" name="photo" id="fileSelect"> <input type="submit" name="submit" value="Upload"> <p><strong>Nota:</strong>Se permiten solo los formatos .jpg, .jpeg, .gif, .png, con un tamaño máximo de5 MB.</p> </form> </html>
Atención:Además deselección de archivosAdemás de los campos, el formulario de carga debe usarHTTP postmétodo, y debe contener un "enctype="multipart/formulario-propiedad "data". Esta propiedad asegura que los datos del formulario se codifiquen en datos MIME múltiples, lo que es necesario para subir grandes cantidades de datos binarios (por ejemplo, imágenes, audio, video, etc.).
A continuación, nuestro "Upload-El código completo del archivo "manager.php". Este archivo almacenará permanentemente los archivos subidos en la carpeta "upload" y realizará algunas comprobaciones de seguridad básicas, como el tipo de archivo y el tamaño del archivo, para asegurar que el usuario suba el tipo de archivo correcto y dentro de los límites permitidos.
<?php //Verificar si el formulario se ha enviado if($_SERVER["REQUEST_METHOD"] == "POST"){ // Verificar si el archivo se ha subido con éxito if(isset($_FILES["photo"]) && $_FILES["photo"]["error"] == 0){ $allowed = array("jpg" => "image"}/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png"); $filename = $_FILES["photo"]["name"]; $filetype = $_FILES["photo"]["type"]; $filesize = $_FILES["photo"]["size"]; // Verifique la extensión del archivo $ext = pathinfo($filename, PATHINFO_EXTENSION); if(!array_key_exists($ext, $allowed)) die("Error: Por favor, seleccione un formato de archivo válido."); // Verifique el tamaño del archivo-Máximo5MB $maxsize = 5 * 1024 * 1024; if($filesize > $maxsize) die("Error: El tamaño del archivo es mayor que la restricción permitida."); // Verifique el tipo MIME del archivo if(in_array($filetype, $allowed)){ // Verifique si el archivo existe antes de subirla if(file_exists("upload/. $filename)){ echo $filename . " ya existe."; } else { move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/. $filename); echo "Su archivo se ha subido con éxito."; } } else { echo "Error: Se produjo un problema al subir su archivo. Por favor, inténtelo de nuevo."; } } else { echo "Error: " . $_FILES["photo"]["error"]; } } ?>
Atención:Este script previene la subida de archivos con el mismo nombre que los archivos existentes en la misma carpeta. Sin embargo, si desea permitirlo, simplemente agregue una cadena aleatoria o un sello de tiempo al nombre del archivo, por ejemplo $filename = time() . '_' . $_FILES["photo"]["name"];
Es posible que desee saber sobre qué se trata este código. Bueno, vamos a recorrer paso a paso cada parte de este código de ejemplo para entender mejor este proceso.
Una vez que se envíe el formulario, la información sobre la subida del archivo se puede acceder a través del array superglobal PHP $_FILES. Por ejemplo, nuestro formulario de carga contiene un campo de selección de archivo llamado photo (es decir, name = "photo"), si cualquier usuario usa este campo para subir un archivo, podemos obtener sus detalles, como nombre, tipo, tamaño, nombre temporal, o cualquier error que ocurra al intentar subir, como se muestra a continuación:
$_FILES["photo"]["name"] — Este valor del array especifica el nombre original del archivo, que incluye la extensión. No incluye la ruta del archivo.
$_FILES["photo"]["type"] — Este valor del array especifica el tipo MIME del archivo.
$_FILES["photo"]["size"] — Este valor del array especifica el tamaño del archivo en bytes.
$_FILES["photo"]["tmp_name"] — Este valor del array especifica el nombre temporal, que incluye la ruta completa asignada al archivo después de que se sube al servidor.
$_FILES["photo"]["error"] — Este valor del array especifica el error o código de estado relacionado con la subida del archivo, por ejemplo, si no hay error,则为0.
El código PHP en el siguiente ejemplo solo mostrará los detalles del archivo subido y lo almacenará en la carpeta temporal del servidor web.
<?php if($_FILES["photo"]["error"] > 0) { echo "Error: " . $_FILES["photo"]["error"] . "<br>"; } else { echo "Nombre del archivo: " . $_FILES["photo"]["name"] . "<br>"; echo "Tipo de archivo: " . $_FILES["photo"]["type"] . "<br>"; echo "Tamaño del archivo: " . ($_FILES["photo"]["size"]; / 1024) . " KB<br>"; echo "Almacenado en: " . $_FILES["photo"]["tmp_name"]; } ?>
Consejo:Después de subir con éxito el archivo, el archivo se almacenará automáticamente en la carpeta temporal del servidor. Para almacenar permanentemente este archivo, necesita usar la función move_uploaded_file() de PHP para moverlo desde la carpeta temporal a la ubicación permanente.