Subir un archivo a tu servidor con PHP

Beware: This post was published 8 years ago and its content may be outdated.

Nunca biene mal saber algo más, aunque no lo vayas a usar.

Yo no pensaba que usaría un formulario para subir archivos al servidor, pero hace unos días he necesitado crear un formulario de este tipo, así que me he puesto a investigar un poco y a crear un script para subir archivos al servidor.

El objetivo del tutorial está claro: Subir un archivo al servidor con un formulario.

Para poder realizarlo necesitamos darle permisos 777 a la carpeta en la que subiremos las imágenes.

El formulario

Primero creamos un formulario con un input de tipo file. Además tenemos que darle al atributo enctype del formulario el valor multipart/form-data.

El campo de para subir el archivo lo llamaremos archivo.

El final tendremos un código así:


<form method="post" enctype="multipart/form-data">
<input type="file" name="archivo">
<input type="submit" value="Enviar">
</form>

El PHP

Ahora pasamos al PHP. Usaremos $_FILE para detectar el nombre temporal de archivo y el nombre del mismo.

Si usamos la función print_r para mostrar la matriz $_FILE, veremos que ésta tiene almacenados, entre otros datos, el archivo temporal, el tamaño y el formato del archivo.

Nosotros nos fijaremos sólo en el nombre.

Antes de seguir tenemos que comprobar que el archivo ha sido subido con el formulario, así que lo comprobamos usando la función is_uploaded_file().

Después usando la función copy() copiaremos el archivo a la carpeta que queramos.

El código quedará así:

if (is_uploaded_file($_FILES['archivo']['tmp_name'])) {
copy($_FILES['archivo']['tmp_name'], 'C:/Servidor/'.$_FILES['archivo']['name'].'');
}

Nota: Si os fijáis en la función copy, he escrto C:/Servidor/ . Esta es la carpeta en la que quiero poner los archivos subidos. Tened en cuenta que estoy trabajando en un servidor casero en Windows, y que si vosotros tenéis un servidor Linux no debéis poner C:/.

Con esto ya copiaría el archivo a la carpeta que queremos.

Últimos retoques

Por último podemos añadir una cosa más: Un aviso de si se ha subido correctamente o no. Para eso creamos una variable juesto después de la función copy (dentro de la condición), que tenga por valor true.

Luego creamos una nueva condición: Si la variable es true, se ha subido bien el archivo, si no, avisamos del error.

El código final quedaría así:

if (is_uploaded_file($_FILES['archivo']['tmp_name'])) {
copy($_FILES['archivo']['tmp_name'], 'C:/Servidor/'.$_FILES['archivo']['name'].'');
$subido = true;
}
if($subido) {
echo "<p>El archivo ha sido subido con exito</p>";
} else {
echo "<p><strong>Error:</strong> El archivo no ha sido subido</p>";
}

Y listo, con esto ya hemos acabado nuestro formulario para subir archivos.