Cómo subir archivos con PHP al servidor

Cómo subir archivos con PHP al servidor. Siempre cuando estemos trabajando en un sitio web y/o proyecto web nuestro usuario desea incorporar un sistema para subir archivos al servidor. Así que pensando en este detalle a continuación aprenderemos a crear un módulo para subir archivos. Para lograr nuestro cometido usaremos la función move_uploaded_file(). Buscamos en la página oficial del PHP
Descripción de la función
bool move_uploaded_file ( string $filename , string $destination )
En este pequeño articulo veremos cómo podemos realizar una carga de archivos en PHP a nuestro servidor, esta excelente función es de gran utilidad para subir ficheros, sin embargo, no todo es muy elegante, ya que requiere de mucho cuidado, por lo tanto, es una entrada fehaciente de los hackers, proteger y limitar nuestras subidas es prioridad, de este tema de seguridad ya hablaremos en otro artículo:
Cómo subir archivos con PHP al servidor
Ejemplo #1 Subida de archivos
Necesitaremos 2 ficheros y una carpeta para hacer funcionar este ejemplo:
- Crear una carpeta en nuestro servidor, en este ejemplo colocaremos «archivos». Es la carpeta donde se subirán los archivos.
- Un archivo (cargar.html), es en donde estará nuestro formulario.
- Un archivo (upload.php), Donde albergara los códigos PHP para subir los ficheros.
Código de cargar.html:
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Enviar un Archivo con PHP</title> <style type="text/css"> *{ font-family:Segoe, "Segoe UI", "DejaVu Sans", "Trebuchet MS", Verdana, sans-serif} .main{ margin:auto; border:1px solid #7C7A7A; width:40%; text-align:left; padding:30px; background:#85c587} input[type=submit]{ background:#6ca16e; width:100%; padding:5px 15px; background:#ccc; cursor:pointer; font-size:16px; } </style> </head> <body bgcolor="#bed7c0"> <div class="main"> <h1>Enviar un Archivo</h1> <br> <form enctype="multipart/form-data" action="upload.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="512000" /> <p> Enviar mi archivo: <input name="subir_archivo" type="file" /></p> <p> <input type="submit" value="Enviar Archivo" /></p> </form> </div> </body> </html>

Código de upload.PHP:
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Procesando el archivo enviado</title> <style type="text/css"> *{ font-family:Segoe, "Segoe UI", "DejaVu Sans", "Trebuchet MS", Verdana, sans-serif} .main{ margin:auto; border:1px solid #7C7A7A; width:50%; text-align:left; padding:30px; background:#85c587} input[type=submit]{ background:#6ca16e; width:100%; padding:5px 15px; background:#ccc; cursor:pointer; font-size:16px; } table td{ padding:5px;} </style> </head> <body bgcolor="#bed7c0"> <div class="main"> <h1>Subir archivo con PHP:</h1> <?php $directorio = 'archivos/'; $subir_archivo = $directorio.basename($_FILES['subir_archivo']['name']); echo "<div>"; if (move_uploaded_file($_FILES['subir_archivo']['tmp_name'], $subir_archivo)) { echo "El archivo es válido y se cargó correctamente.<br><br>"; echo"<a href='".$subir_archivo."' target='_blank'><img src='".$subir_archivo."' width='150'></a>"; } else { echo "La subida ha fallado"; } echo "</div>"; ?> <br> <div style="border:1px solid #000000; text-transform:uppercase"> <h3 align="center"><div align="center"><a href="cargar.html">Volver </a></div></h3></div> </div> </body> </html>
El resultado al intentar subir un archivo nos mostrará la siguiente ventana:


Espero que esta breve explicación les sirva a todos ustedes, saludos a la distancia. Bueno, dejare un enlace para que se descarguen los archivos donde podrás descargar tus archivos.
Me pasa lo mismo que muchos comentarios los archivos suben y se guardan en el directorio correspondientes peroo… no se abren luego, se ven como si estuviesen dañados o sin permisos suficientes
Algo sucede, los archivos ya subidos, no los puedo ni leer ni borrar de la carpeta del servidor. Agradezco ayuda.
Y esos errores ?
Warning: Undefined array key «uploadedFile» in /home/lanacionalcajama/public_html/pruebas/upload.php on line 8
Warning: Trying to access array offset on value of type null in /home/lanacionalcajama/public_html/pruebas/upload.php on line 8
Hola Danny
El script ha sido testeado en PHP 8 y localhost con PHP 8 y funciona muy bien, seria genial que comentaras que versión de PHP estas usando.
Por otro lado, tambien verifica que la carga de archivo sea superior a 2mb y aumentar el tiempo de ejecucion del PHP.
Saludos
Excelente aporte, gracias dos dudas: hay algun limite de tamaño de archivo? como podría aumentar el tiempo de ejecución?
Hola jes
El limite de archivo y tiempo de ejecución lo determina la configuración del PHP
Revisa el php.ini de tu servidor, saludos.
Esto no funciona con servidor web. Solo es para localHost?
Hola Ronald
El script funciona en localhost y tambien en un servidor de producción, lo acabo de probar y sin problemas con PHP 8
Verifica que la carpeta de destino exista en su servidor (archivos)
saludos.
Gracias, si, ya funciona, sin embargo, luego que copia bien, los archivos que subo, ya en carpeta servidor, no permite ni abrirlos ni borrarlos. Me puede, por favor, indicar qué pudo pasar. Gracias
Me pasa exactamente lo mismo nose como solucionarlo
Hola Joel
He testeado en localhost y en servidor web de internet y funciona muy bien con PHP8
Es preciso que verifique su php la carga maxima, generalmente suele ser 2mb y quiza por ahi subio un archivo dañado.
En cargar.html puede eliminar esta linea:
< input type=hidden name=MAX_FILE_SIZE value=512000 >
Para evitar estricciones de carga.
Espero haber ayudado, saludos
Me salvaste la vida muchísimas gracias por tu aportación de corazón.
Un placer Ismael, saludos a la distancia.
Serias tan amable de poder solucionar el problema de limite de cargar archivo.. es decir solo me permite cargar archivos de 5 MB y yo quisiera cargar un archivo de por lo menos 100 MB y si logras solucionar este problema te voy a AMAR de por vida.. un saludo desde Croacia
edita el php.ini y cambiar los valores.
sencillo, gracias, resolví mi problema.
chevere, me sirvio, gracias
Las imagenes si me suben pero cuando quiero subir un archivo ya sea word o pdf me marca error, qué hago?
Buenísimos hermano, son orientaciones que me ayudan mucho en mi trabajo, escuela primaria, donde atiendo niños de 4to a 6to grado… Dios te bendiga!!!
Hola bro, cuando pongo los archivos en mi servidor y hago la prueba sale la subida a fallado, que error tendría ahí?