Carga de archivos PHP
Con PHP, es fácil cargar archivos al servidor.
Sin embargo, con la facilidad viene el peligro, ¡así que siempre tenga cuidado al permitir la carga de archivos!
Configurar el archivo "php.ini"
Primero, asegúrese de que PHP esté configurado para permitir la carga de archivos.
En su archivo "php.ini", busque la file_uploads
directiva y establézcala en On:
file_uploads = On
Crear el formulario HTML
A continuación, cree un formulario HTML que permita a los usuarios elegir el archivo de imagen que desean cargar:
<!DOCTYPE html>
<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 <input> 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.
Crear la secuencia de comandos PHP del archivo de carga
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 cargados se guardarán allí.
Comprobar si el archivo ya existe
Ahora podemos agregar algunas restricciones.
Primero, comprobaremos si el archivo ya existe en la carpeta "uploads". Si es así, se muestra un mensaje de error y $uploadOk 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 $uploadOk se establece en 0:
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
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 archivos dan un mensaje de error antes de establecer $uploadOk en 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 del script PHP del archivo
El archivo completo "upload.php" ahora se ve así:
<?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.";
}
}
?>
Referencia completa del sistema de archivos PHP
Para obtener una referencia completa de las funciones del sistema de archivos, vaya a nuestra referencia completa del sistema de archivos PHP .