rocketFileDado que me comentaron aun con el ultimo post que no se aclaraban muy bien como subir archivos esta vez no voy a poner una función si no un código de ejemplo para subir uno o varios archivos a nuestro servidor.
El código es muy fácil y esta muy comentado así que espero que no haya ningún problema en seguirlo o modificarlo.
Se trata de un formulario muy simple con una caja para subir el archivo y un botón de enviar. Se puede modificar y poner todas las cajas que queramos para subir todos los archivos que queramos. Como plus le he incorporado una sentencia que hace que si esa caja esta vacía no se envíe el formulario hasta que se complete.

la segunda parte hace una comprobación de si se ha enviado algún archivo para subir, si es así no pone nuestro formulario y en vez de eso pone todos los datos que podemos obtener de la subida del archivo. Si se ha enviado un archivo para subir pero ocurrió algún error, nos lo indicara también. En caso de no haber enviado nada pondrá el formulario.

Cada echo la lista de echo seguidos de comentarios son todas las variables que podemos usar en nuestro script. En caso de subir varios archivos a la vez este apartado se duplicara por cada archivo subido.

PHP:
  1. <html>
  2.     <head>
  3.         <title></title>
  4.     </head>
  5.     <body>
  6.         <?php
  7.         //formulario simple para subir el archivo (a traves de este mismo archivo)
  8.         $fomulario = '<form method="post" enctype="multipart/form-data" onsubmit="return (this.archivo.value!=\'\')">
  9.             <input type="file" name="archivo"/>
  10.             <button type="submit">Subir a la web</button>
  11.         </form>';
  12.        
  13.         //direccion donde queremos dejar el archivo
  14.         $path = './';
  15.        
  16.         //si se ha enviado uno o varios archivos no ponemos el formulario
  17.         if(count($_FILES)>0) {
  18.             //obtenemos todos los archivos uno por uno
  19.             foreach($_FILES as $name => $values){
  20.                
  21.                 //comprobamos que esten en la carpeta que nosotros queremos
  22.                 if( move_uploaded_file($values['tmp_name'],$path.$values['name']) ){
  23.                
  24.                     echo 'El archivo ha sido subido correctamente.<br/>';
  25.                     echo 'Otros datos del archivo:<br/>';
  26.                     echo 'Nombre del objeto del formulario: '.    $name.                    '<br/>';
  27.                     echo 'Nombre original del archivo: '.         $values['name'].      '<br/>';
  28.                     echo 'Tipo de archivo: '.                  $values['type'].      '<br/>';
  29.                     echo 'Nombre del archivo temporal: '.         $values['tmp_name'].   '<br/>';
  30.                     echo 'Error producido al subir el archivo: '.   $values['error'].    '<br/>';
  31.                     echo 'Tama&ntilde;o del archivo: '.    $values['size'].  '<br/>';
  32.                     echo '<br/>';
  33.                                    
  34.                 } else {
  35.                     //si no estan en la carpeta que nosotros queremos
  36.                     echo 'Ha ocurrido un error.<br/>';
  37.                
  38.                 }
  39.             }
  40.         } else {
  41.             //muestra el formulario si no se ha realizado ningun envio de archivo
  42.             echo $fomulario;
  43.         }
  44.         ?>
  45.     </body>
  46. </html>

El método de uso es muy sencillo. Copia el código de arriba, crea un archivo con extensión php, pega el codigo dentro y guardalo.
Una vez realizado esto solo tienes que cambiar el texto asociado a la variable $path de la linea 14 y poner la dirección de donde quieres que se guarden los archivos una vez en el servidor.
Un usuario "anónimo" ha echo un aporte a este articulo indicando que la función copy() no es la mas adecuada para este tipo de casos aun que sea la mas extendida entre los ejemplos. La mas adecuada es move_uploaded_file() como vemos en la linea 22 que realiza una comprobación previa de que el archivo que va a mover ha sido enviado por HTTP POST desde un formulario, y no es un archivo de dentro de nuestro servidor, evitando de esta manera problemas de seguridad.