El mejor tutorial de Subir archivos PHP en 2024. En este tutorial podrás aprender Crear un formulario de carga de archivos,Crear script de carga,límite de subida,Guarde el archivo sea cargado,

Subir archivos PHP

Por PHP, puede cargar archivos en el servidor.

Los ejemplos en esta sección bajo el proyecto de prueba se ha completado, la estructura de directorios:

test
|-----upload             # 文件上传的目录
|-----form          # 表单文件
|-----upload_file.php    # php 上传代码

Crear un formulario de carga de archivos

Permite a los usuarios subir archivos de una forma útil.

Considere el siguiente formulario HTML para subir archivos:

<html>
<head>
<meta charset="utf-8">
<title>本教程(w3write.com)</title>
</head>
<body>

<form action="upload_file.php" method="post" enctype="multipart/form-data">
	<label for="file">文件名:</label>
	<input type="file" name="file" id="file"><br>
	<input type="submit" name="submit" value="提交">
</form>

</body>
</html>

Guarde el código anterior para form archivo.

Algunos artículos relacionados con el formulario HTML anterior se enumeran a continuación:

  • <Form> El atributo de etiqueta enctypeespecifica el contenido al enviar un formulario qué tipo de uso. Cuando formulario requiere datos binarios, tales como el contenido del archivo, utilice el"multipart / form-data".
  • <Input> tipo deetiqueta=atributo"archivo"especifica la entrada debe ser tratado como archivos. Por ejemplo, en la vista previa en un navegador, verá al lado de la caja de entrada tiene un botón Examinar.

Nota: Permitir a los usuarios subir archivos es un gran riesgo para la seguridad.Por favor, sólo se permite a los usuarios de confianza para llevar a cabo la carga de archivos.


Crear script de carga

"Upload_file.php" archivo contiene el código para subir archivos:

<?php
if ($_FILES["file"]["error"] > 0)
{
	echo "错误:" . $_FILES["file"]["error"] . "<br>";
}
else
{
	echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
	echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
	echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
	echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
}
?>

Mediante el uso de matrices de PHP globales $ _FILES, puede cargar archivos en un servidor remoto desde el equipo cliente.

El primer parámetro es el nombre de entrada de un formulario, el segundo subíndice puede ser un "nombre", "tipo", "tamaño", "tmp_name" o "error". En la siguiente manera:

  • $ _FILES [ "Archivo"] [ "nombre"] - el nombre del archivo subido
  • $ _FILES [ "Archivo"] [ "tipo"] - Subir los tipos de archivos
  • $ _FILES [ "Archivo"] [ "tamaño"] - tamaño de archivo de carga en bytes
  • $ _FILES [ "Archivo"] [ "tmp_name"] - una copia temporal se almacena en el nombre del servidor de archivos
  • $ _FILES [ "Archivo"] [ "error"] - el código de error resultante de la carga de archivos

Esta es una manera muy sencilla la carga de archivos. En base a las consideraciones de seguridad, se debe aumentar las restricciones en los cuales se permite a los usuarios subir archivos.


límite de subida

En este script, hemos añadido al límite de carga de archivos. Los usuarios sólo pueden subir .gif, .jpeg, .jpg, .png, el tamaño del archivo debe ser inferior a 200 kB:

<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);        // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800)    // 小于 200 kb
&& in_array($extension, $allowedExts))
{
	if ($_FILES["file"]["error"] > 0)
	{
		echo "错误:: " . $_FILES["file"]["error"] . "<br>";
	}
	else
	{
		echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
		echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
		echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
		echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
	}
}
else
{
	echo "非法的文件格式";
}
?>


Guarde el archivo sea cargado

El ejemplo anterior es crear una copia temporal del archivo cargado en una carpeta temporal del servidor de archivos PHP.

La copia temporal del archivo desaparecerá al final de la secuencia de comandos. Para guardar un archivo subido, tenemos que copiarlo en otra ubicación:

<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension = end($temp);     // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800)   // 小于 200 kb
&& in_array($extension, $allowedExts))
{
	if ($_FILES["file"]["error"] > 0)
	{
		echo "错误:: " . $_FILES["file"]["error"] . "<br>";
	}
	else
	{
		echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
		echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
		echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
		echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
		
		// 判断当期目录下的 upload 目录是否存在该文件
		// 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
		if (file_exists("upload/" . $_FILES["file"]["name"]))
		{
			echo $_FILES["file"]["name"] . " 文件已经存在。 ";
		}
		else
		{
			// 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
			move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
			echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
		}
	}
}
else
{
	echo "非法的文件格式";
}
?>

El script anterior detecta si el archivo ya existe, si no, poner los archivos se copian en un directorio llamado "carga" de.

la operación de carga de archivos de demostración es la siguiente:

Subir archivos PHP
10/30