El post que buscas se encuentra eliminado, pero este también te puede interesar

PHP - como subir archivos al servidor

Anuncios

Acá les dejo un pequeño script básico para subir archivos a un servidor, es mas que todo para ver la dinámica de como se suben archivos al server mediante PHP, no tiene validaciones, pero está de mas decir que si lo van a usar para una página deben colocar sus respectivas medidas de seguridad.

<html>
<head>
<title>Subir archivos al server</title>
<style>
.estilo_formulario{width:300px; margin:auto;} /*estilos css */
.estilo_divs{margin:auto; padding:3px;}clase de estilos css /*estilos css*/
</style>
</head>

<body>
<?php
if (isset($_POST['boton_enviar'])){ //aca validamos si se ha enviado un archivo desde el formulario
$archivo_nombre= $_FILES["archivo"]["name"]; //aca se obtiene el nombre del archivo
$archivo_tamaño = $_FILES["archivo"]["size"]; //tamaño del archivo
$archivo_temporal = $_FILES["archivo"]["tmp_name"]; //direccion temporal en la que el servidor guarda el archivo antes de copiarlo

echo "<div><b>Nombre del archivo: </b>".$archivo_nombre."</div>";
echo "<div><b>Tamaño: </b>".$archivo_tamaño." bytes </div>";
echo "<div><b>Direcci&oacute;n temporal: </b>".$archivo_temporal."</div>";

$destino = 'archivos' ; //aca se define la direccion en la que quieres que se guarden los archivos cuando los subes al servidor
copy($_FILES['archivo']['tmp_name'],$destino.'/'. $_FILES['archivo']['name']); //esta instruccion es la que copia el archivo de la carpeta temporal a su destino en el servidor
}
?>

<div class="estilo_formulario">
<fieldset><legend>Subir archivos</legend> <!-- los tag <fieldset> y <legend> son con fines decorativos hacen un recuadro con titulo alrededor del form-->
<form method="POST" action="" enctype="multipart/form-data">
<div class="estilo_divs">Archivo: <input type="file" name="archivo" size=50></div>
<div class="estilo_divs"><input type="submit" value="Subir" name="boton_enviar"></div>
</form>
</fieldset>
</div>

</body>
</html>

Anuncios

12 comentarios - PHP - como subir archivos al servidor

@Wolfmancrow
Esta bueno tu script, pero, esta diseñado para un solo archivo php, asi que deberias cambiar
&lt;form method=&quot;POST&quot; action=&quot;subir_archivos.php&quot; enctype=&quot;multipart/form-data&quot;&gt;

por
&lt;form method=&quot;POST&quot; action=&quot;&quot; enctype=&quot;multipart/form-data&quot;&gt;

todo lo demas funciona impecable!!
@watashi94
podrias subir una pagina de ejemplo para yo descargarla? es que cuando hago el php y lo subo al servidor
al principio hace como que se esta cargando el archivo y cuando termina me da un error

Request Entity Too Large The requested resource /subir.php does not allow request data with POST requests, or the amount of data provided in the request exceeds the capacity limit.
@wtd000 +1
Gracias por el aporte amigo, pero la verdad es que hay que ser muy cuidadoso a la hora de subir algún fichero a nuestro server y ese script esta algo inseguro.
no validaste el fichero, es decir, no filtraste lo que se va a subir desde el formulario. te falta validar la extencion del archivo, tamaño y demas. Tambien es mas seguro usar "move_uploaded_file" sin las comillas.

imagina que un user suba a tu servidor un fichero de 100gb, eso en el mejor de los casos, tambien se podrían mandar códigos maliciosos y demás. mira un ejemplo algo sencillo pero es mas seguro:

<?
//tomo el valor de un elemento de tipo texto del formulario
$cadenatexto = $_POST["cadenatexto"];
echo "Escribió en el campo de texto: " . $cadenatexto . "<br><br>";

//datos del arhivo
$nombre_archivo = $HTTP_POST_FILES['userfile']['name'];
$tipo_archivo = $HTTP_POST_FILES['userfile']['type'];
$tamano_archivo = $HTTP_POST_FILES['userfile']['size'];
//compruebo si las características del archivo son las que deseo
if (!((strpos($tipo_archivo, "gif" || strpos($tipo_archivo, "jpeg") && ($tamano_archivo < 100000))) {
echo "La extensión o el tamaño de los archivos no es correcta. <br><br><table><tr><td><li>Se permiten archivos .gif o .jpg<br><li>se permiten archivos de 100 Kb máximo.</td></tr></table>";
}else{
if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $nombre_archivo)){
echo "El archivo ha sido cargado correctamente.";
}else{
echo "Ocurrió algún error al subir el fichero. No pudo guardarse.";
}
}
?>

este código no es mio pero explica claramente la manera de hacerlo correctamente.
@wtd000
DesarrolloWeb.com > Manuales > Gestión de archivos en PHP
Upload de archivos con PHP


09 de noviembre de 2003
Compartir en redes sociales
Valoración del artículo:
1 voto
Enviar un comentario
Ver comentarios del artículo (64)


Realizamos unas páginas PHP que reciben un archivo del discoduro del visitante y lo suben al servidor remoto.
Por Miguel Angel Alvarez

En PHP tenemos muchas funcionalidades desarrolladas desde el principio y sin necesidad de instalar ningún añadido en nuestro servidor. Es el caso de subir archivos a un servidor web por HTTP y a través de una página con un formulario, donde se permite seleccionar el archivo que queremos cargar de nuestro disco duro.

El ejemplo se encuentra bien documentado en un montón de páginas para desarrolladores, sin ir más lejos en la página de la propia tecnología: http://www.php.net/manual/es/features.file-upload.php. Nosotros en este caso vamos a intentar ir un poco más allá, realizando un par de comprobaciones al subir el fichero y combinando en el mismo formulario campos de tipo file y tipo text.

El formulario para subir seleccionar los archivos

Es un formulario cualquiera, pero tiene una serie de particularidades y campos file, que no solemos utilizar habitualmente.

<form action="subearchivo.php" method="post" enctype="multipart/form-data">
<b>Campo de tipo texto:</b>
<br>
<input type="text" name="cadenatexto" size="20" maxlength="100">
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
<br>
<br>
<b>Enviar un nuevo archivo: </b>
<br>
<input name="userfile" type="file">
<br>
<input type="submit" value="Enviar">
</form>

Para empezar vemos que se ha colocado un nuevo atributo en el formulario: enctype="multipart/form-data", necesario para subir en un mismo formulario datos y archivos.

También tenemos el campo hidden MAX_FILE_SIZE, que sirve para indicar el tamaño en bytes de los archivos a subir. Este campo algunos navegadores no tienen porqué entenderlo o hacerle caso. Además, es fácil saltarse esa protección, por lo que deberemos en las propias páginas PHP comprobar que el archivo tenga el tamaño que deseamos.

Por último, tenemos el campo tipo file, donde se seleccionará el archivo a subir. También hemos colocado un campo de tipo text, para subir datos por POST de tipo texto acompañados a los datos binarios del archivo.

Página que sube los archivos

Esta página debe hacer las comprobaciones necesarias para saber si las características del archivo a subir son las que deseamos y realizar la copia del archivo en un directorio del servidor.

Para hacer las comprobaciones, PHP nos crea una serie de variables que podemos acceder con la información del archivo enviado.

$HTTP_POST_FILES['userfile']['name']
El nombre original del fichero en la máquina cliente.

$HTTP_POST_FILES['userfile']['type']
El tipo mime del fichero (si el navegador lo proporciona). Un ejemplo podría ser "image/gif".

$HTTP_POST_FILES['userfile']['size']
El tamaño en bytes del fichero recibido.

$HTTP_POST_FILES['userfile']['tmp_name']
El nombre del fichero temporal que se utiliza para almacenar en el servidor el archivo recibido.

Nota: En este momento (a partir de PHP 5) el array $HTTP_POST_FILES ha sido sustituido por el array $_FILES. En realidad es exactamente lo mismo, con la diferencia que $_FILES es más corto de escribir. Dependiendo de la configuración de tu PHP el nombre de variable antigua $HTTP_POST_FILES puede existir o no, pero en cualquier caso te recomendamos utilizar $_FILES para que tus scripts funcionen en cualquier servidor, independientemente de la configuración. Por ejemplo, usa $_FILES['userfile']['tmp_name'] en lugar de $HTTP_POST_FILES['userfile']['tmp_name'].
@jazleo
gracias amigo buen post
pero tengo una pregunta
¿como harías que agarre uno o dos formatos en especifico?? ya sabes, que no deje subir ningún otro tipo de formato
@eleze33
Hola, está perfecto! pero como puedo hacer para que, al subir el archivo, me mustre la url de donde está exactamente almacenado?? Muchas gracias desde ya