Como subir archivos a servidor con PHP

Subir archivos a un servidor web no es nada del otro mundo, de hecho es algo muy sencillo de hacer, y podemos hacerlo utilizando una sencilla forma de HTML y un programa en PHP que guarde el archivo en donde nosotros queramos.

Lo primero que necesitaremos sera el archivo html donde tendremos la forma de subida.

El siguiente codigo representa esta forma. Lo que se tiene que hacer es crear una forma, establecer el parametro de “action” donde especificaremos el script php que guardara nuestro archivo, también el parametro “method” en el cual he seleccionado post, y “enctype”, que basicamente especifica que tipo de datos vamos a subir, esto es necesario.

Forma de subida en html

<!DOCTYPE html>
<html>
	<head>
	</head>
	<body>
		<form action="file.php" method="post" enctype="multipart/form-data">
			<input type="file" name="archivo" id="archivo"></input>
			<input type="submit" value="Subir archivo"></input>
		</form>
	</body>
</html>

 

Recuerden especificar el “name” del archivo, el cual es necesario para poder encontrar el archivo en nuestro script PHP.

Del lado del servidor…

Ahora vamos con el PHP, es la parte mas importante ya que desde aqui accederemos a nuestro archivo y seremos capaces de ver sus propiedades, asi como de guardarlo en una ruta especifica. Para esto tenemos el arreglo bidimensional “$_FILES” donde se puede acceder al archivo y sus propiedades (como ‘error’, ‘name’,’tmp_name’).

Archivo PHP para controlar la subida del archivo

if ($_FILES['archivo']["error"] > 0)
  {
  echo "Error: " . $_FILES['archivo']['error'] . "<br>";
  }
else
  {
  echo "Nombre: " . $_FILES['archivo']['name'] . "<br>";
  echo "Tipo: " . $_FILES['archivo']['type'] . "<br>";
  echo "Tamaño: " . ($_FILES["archivo"]["size"] / 1024) . " kB<br>";
  echo "Carpeta temporal: " . $_FILES['archivo']['tmp_name'];

  /*ahora co la funcion move_uploaded_file lo guardaremos en el destino que queramos*/
   move_uploaded_file($_FILES['archivo']['tmp_name'],
      "subidas/" . $_FILES['archivo']['name']); 

A continuación un pequeño video tutorial de como hacer este ejercicio

Acerca del autor:

Mi nombre es Jorge Villalobos, soy Colombiano de nacimiento y resido en México desde 2005,actualmente soy el creador de codigoprogramacion.com Soy ingeniero en tecnologías de información y comunicaciones y trabajo de tiempo completo desarrollando aplicaciones web. En general me considero un tipo normal, me gusta salir, divertirme, y uno de mis hobbies es programar y hacer tutoriales para compartir conocimiento, me gusta la pizza, el ajedrez y tomar una que otra cerveza los fines de semana. Espero que este proyecto ayude a ayudar a los demás.

Twitter del autor:

32 comments

  1. […] 1 min ago 0 View Share Tweet Pinit Google+ Email (adsbygoogle = window.adsbygoogle || […]

  2. andres says:

    buenas tardes, mira lo que pasa es que el codigo me funciona muy bien pero localmente ya a la hora de usarlo en un servodor muestra el mensaje y todo pero no sube les agradeceria la ayuda ya ni se que hacer gracias

  3. hola, intento subir 15 archivos, pero me reconoce 10 … raro no?

  4. Tamy says:

    Muchísimas gracias por tu ayuda, funciona de mil maravillas el código!!!

  5. ontario romero says:

    Hola buenos dias, donde podria contactarte para la realizacion de un trabajo?

    Espero me puedas apoyar.

  6. Jovany says:

    Hola jorge gracias pro el tutorial una duda me da error al correrlo

    mira :

    Notice: Undefined index: archivo in C:\xampp\htdocs\xtream\file.php on line 4

    no entiendo por que si es el nombre que le puse al name del input si me pudieras ayudar te lo agradeceria Saludos!!

  7. Omar says:

    Hola Jorge.
    Me parece muy completa tu presentación. Estoy tratando de subir un archivo. el formulario funciona bien, es decir puedo selecionar el archivo a subir, pero el php no sube nada. Muestra los títulos, pero no el archivo ni el tamaño.
    No genera error. Habrá que hacer algo en el php.ini? trabajo sobre linux con xampp y mozilla.
    Gracias.

  8. mauricio herrera says:

    hola sabes tengo el siguiente problema, contrate un espacio en amazon cloud drive pero no tiene la opcion de crearte una carpeta compartida en el pc y luego zincronizar los archivos para levantarlos al portal. es por eso que quisiera saber si tienes alguna alternativa como para realizar un script que tome un archivo y lo suba directo al espacio que tengo contratado con amazon..

  9. YUGHI says:

    Excelente todo funciona muy bien y en la ruta que yo quiera =)

  10. David Duran says:

    quisiera saber como hacer un formulario de consulta para poder descargar o vizualizar archivos subidos en una carpeta x! de mi sitio web

  11. galltengo says:

    cuanto es lo maximo a subir

  12. galltengo says:

    de cuanto es lo maximo

  13. Frank says:

    hola que tal gracias pòr el turorial 2 preguntas ¿como hago para buscar los archivos ya subidos dentro de la misma web? y por ende ¿como hago para visualizarlos dentro de la misma web?

  14. Allan says:

    Hola que tal ya hice todo y no me manda error pero al acceder a la carpeta que debe contener el archivo esta vacía (todo esto lo hice en un servidor web). Que debo hacer o que me falta.
    Gracias

    • Angel says:

      habia un error de sintaxis estaban unas comillas dobles donde deben haber comillas simples y faltaba el cierre de una lave y el cierre del php.

      file.php:

      0)

      {

      echo “Error: ” . $_FILES[‘archivo’][‘error’] . “”;

      }

      else

      {

      echo “Nombre: ” . $_FILES[‘archivo’][‘name’] . “”;

      echo “Tipo: ” . $_FILES[‘archivo’][‘type’] . “”;

      echo “Tamaño: ” . ($_FILES[“archivo”][“size”] / 1024) . ” kB”;

      echo “Carpeta temporal: ” . $_FILES[‘archivo’][‘tmp_name’];

      /*ahora co la funcion move_uploaded_file lo guardaremos en el destino que queramos*/

      move_uploaded_file($_FILES[‘archivo’][‘tmp_name’],

      ‘subidas/’.$_FILES[‘archivo’][‘name’]);

      }

      ?>

  15. DAvid says:

    Sube bien el archivo, pero las imagenes no se ven correctament…

  16. alex says:

    Buen aporte no tenia idea de como hacer esto

  17. kevin says:

    Eres un teso. Orgullo colombiano hey :)

  18. arnaldo heresmann says:

    hola no me funciona por favor ayúdame copie tu código exactamente igual tengo instalado xamp por lo que cree en la carpeta htdocs una carpeta llamada cantantes y dentro de eso cree el HTML mas el php mas la carpeta subidas pero no me funciona por fa me puedes ayudar he estado muchos días con esto y no lo logro saludos de chile

  19. gabriel says:

    como podria subir archivos a otro servidor (linux) que no sea el localhost, he tratado de hacerlo pero no funciona.

  20. David says:

    Excelente , aporte. Muy bien explicado.
    Felicitaciones

  21. enrique says:

    buen dia jorge queria saber como puedo hacer subir archivos mayores a 5mb espero tu respuesta gracias

  22. Daniel says:

    Como se llama el editor, ya que te muestra los codigos de php. Existira para otros lenguajes de programacion?

    • Richard Cerón says:

      Se llama sublime text, y si hay un editor que mas que editor es un IDE para java y lenguajes de programación web se llama Netbeans es muy muy bueno
      Saludos!

  23. marco says:

    intente algo así pero solo lo sube a mi servidor localhost ya cuando intento subirlo a mi servidor web no lo hace por que?

  24. kanfor says:

    Oooh! Me has arreglado una mañana de perros que llevo intentando subir archivos. Mi problema era que no había añadido el multipart/form-data!

    A seguir así y gracias!

  25. VictorN says:

    Que Pena contigo, ya lo Solucione, el problema que me estaba presentando es porque faltaba cerrar el ELSE, como copie tu código tal cual de la pagina y me confié, no vi que le faltaba la llave para cerrar el ELSE, era solo eso… y la carpeta subidas, la creedentro de mi proyecto de NetBeans y Listo.

  26. VictorN says:

    Veo que lo estas haciendo en Linux, yo lo estoy realizando en Windows y o se donde crear la carpeta SUBIDAS… y me esta generando error de sintaxis

Leave a Reply

Your email address will not be published. Required fields are marked *