Upload De Archivos Con PHP
Aquí enseñaré cómo subir archivos al servidor por medio de un script de php, proceso es muy simple y sencillo.
Para
el correcto aprendizaje utilizaremos un ejemplo, en él que subiremos
un archivo. Este solo puede ser de extencion .zip y ocupar menos de 30 kb, definiendo
así las opciones del upload con php.
Primero empezaremos con el formulario html, encargado de enviar el archivo al servidor.
<form action="subir.php" method="post" name="miformu" enctype="multipart/form-data"> <input name="archivo" type="file"> </form>
Cómo se daran cuenta, este formulario tiene un parametro nuevo llamado enctype, con
el valor "multipart/form-data", informando que envía datos
y archivos, opción indispensable para el correcto upload del fichero.
También utilizamos un input "file" para que el usuario pueda explorar su respectiva
computadora en busca del archivo a subir.
Suponemos que el script al que enviamos el formulario y el encargado de procesarlo se
llama subir.php. A continuación explicare el contenido y funcionamiento
de este archivo.
Cómo vimos en el formulario, el campo de archivo se llama archivo:
<input name="archivo" type="file">
De acuerdo a este nombre sera que trabajaremos en el lado del servidor, osea en
el script.
El archivo se guarda en la carpeta temporal del servidor, dato que hay que tenerlo
en cuenta ya que no todos los servidores cuentan con esta opción y ponen
el tamaño de dicha carpeta a 0, imposibilitando subir archivos.
Para referirnos al archivo en el script lo hacemos por medio de:
$archivo
Otras propiedades que tendremos a nuestra disposicion es el tamaño (en bytes)
y el nombre del archivo.
$archivo_name
– Nombre del archivo (ej: instaladores.zip, miarchivo.zip)
$archivo_size – Tamaño
del archivo en bytes (si son 10kb serian 10000 bytes)
Nota: A este
punto cuándo nos referimos al archivo lo hacemos siempre con $archivo, debido
a que en el formulario lo denominamos de esta forma (<input name="archivo" type="file">).
La explicacion la hago suponiendo un conocimiento básico de php por parte
del lector.
Primero mostrare el script, luego explicare linea por linea el script:
<?php //formulario de upload por jorge luis martinez //http://miscodigos.jlmnetwork.com/ $extension = explode(".",$archivo_name); $num = count($extension)-1; if($extension[$num] == "zip") { if($archivo_size < 30000) { if(!copy($archivo, "archivos/".$archivo_name) { echo "error al copiar el archivo"; } else { echo "archivo subido con exito"; } } else { echo "el archivo supera los 30kb"; } } else { echo "el formato de archivo no es valido, solo .zip"; } ?>
Lo primero que haremos sera comprobar que la extencion del archivo es la permitida
(.zip).
Para ello utilizamos la funcion de php explode, la cual guardará en un array el nombre del archivo segun el primer parametro (el punto):
$extension = explode(".",$archivo_name);
Para mejor entendimiento, si el archivo se llama ficheros.zip el explode pondria
en este caso en la variable $extencion el nombre en dos partes:
$extension[0] y $extension[1]
los cuales contienen:
$extension[0] --> "ficheros" $extension[1] --> "zip"
Ahora obtendremos la longitud del array, en este caso seria de 2 (ya que contiene
2 elementos "ficheros" y "zip"), a ese numero le mermamos
1 y lo asignamos a una variable llamada $num:
$num = count($extension)-1;
Nota: Le hemos mermado 1 a la longitud por que cuando queramos llamar al array $extension[$num]
debemos de hacerlo teniendo en cuenta que los elementos van desde 0, por lo
que aunque contenga 2 elementos no podemos llamar al segundo con $extension[2],
si no que tenemos que llamarlo por su posicion $extencion[1].
Ahora haremos el condicional. Si la extencion del archivo es zip continuaremos con
el proceso de upload, de lo contrario mostraremos mensaje de error.
if($extension[$num] == "zip") { ... } else { echo "el formato de archivo no es valido, solo .zip"; }
Ahora, continuaremos con el upload, suponiendo que el archivo era el correcto.
Lo siguiente a hacer es comprobar el tamaño del archivo; para ello utilizaremos
la variable antes mencionada $archivo_size. Si el tamaño
es menor a los 30kb (recuerde, debe especificarlo en bytes, por lo que serian
30000) continuaremos con el upload, de lo contrario mostraremos un mensaje de
error:
if($archivo_size < 30000) { ... } else { echo "el archivo supera los 30kb"; }
Ahora, continuaremos con el upload, suponiendo que el tamaño del archivo es
correcto.
Utilizaremos la función copy() de php, la cual copiara el archivo
a la carpeta que especifiquemos.
Nota: El archivo que hemos subido por medio del formulario se guarda en la carpeta temporal del
servidor y se accede a él por medio de la variable $archivo, este archivo
será borrado de la carpeta temporal cuando el script finalize su ejecución,
este proceso es automatico y lo realiza el servidor, usted no tiene que preocuparse
por este aspecto.
En este caso copiaremos el archivo a una carpeta del servidor llamada archivos.
Notese que la ruta de copiado debe de ser relativa, no absoluta, y es relativa
al script. Osea, si el script se ejecuta en:
http://www.servidor.net/cuenta/carpeta/subir.php
La funcion en este caso intentara copiarlo a:
http://www.servidor.net/cuenta/carpeta/archivos/
Lo hemos puesto en un if y con signo de negación (!),
para que en caso de no poder copiar el archivo nos salga mensaje de error:
if(!copy($archivo, "archivos/".$archivo_name)) { echo "error al copiar el archivo"; } else { echo "archivo subido con exito"; }
En este caso el archivo ha sido copiado a la carpeta archivos y con el mismo nombre
que tenía, osea, si el archivo se llamaba "ficheros.zip",
el archivo ha quedado en la carpeta con el mismo nombre "archivos/ficheros.zip".
Notese que esto no es obligatorio, y podemos ponerle el nombre que queramos, si hubieramos
querido que el archivo se llamara "jlmm.zip", simplemente
pondriamos en el copy() lo siguiente:
copy($archivo, "archivos/jlmm.zip")
Bien, espero haya quedado claro, y espero tus comentarios.
Suerte y hasta el proximo tutorial!
no quiero incluir texto.. solo quiero decir que me parece excelente
algo lioso para conbinar con tu codigo, pero muy bien explicado.
felicidades, pero me gustaria saber como se gestionaria algo paresido a los egroups de yahoo con los archivos y todo…porcierto el error que tiene es solo un parentesis al final del if…espero me puedan ayudar
Muy bueno, pero en el script la propiedad $archivo_name aparece con mayuscula ($Archivo_name) . Gracias por su ayuda.
Un artículo muy bueno, hacía tiempo que buscaba esta función y nunca había encontrado una explicación tan clara y sencilla. Me gustaría saber si es posible mostrar el contenido de una carpeta con un script php. Si alguien sabe como le agradecería que me enviara la respuesta a: [email protected] GRACIAS.
hola a todos
pero esto como convina la seguridad es seguro?????
Solo quisiera saber si tambien lo puedo utilizar para imagenes ok
Como “tutorial” de lo que describe el código está bien .. Pero ya ha quedado un poco desfasado .. ademas que plantea algunos problemas:
1) Asume como globales todas las variables .. Es decir, no funciona este script de Upload en sistemas con register_globals a OFF ..
Solución:
Usar el array asociado $_FILES (disponible para PHP >= 4.1.x) .. Sería cambiar las llamadas tipo:
$Archivo_name .. $Archivo_size .. y los que use similar a:
$_FILES[‘Archivo’][‘name’] .. etc ..
De esta forma sería mas seguro el “Upload” .. ademas que funcionará con la directiva de PHP indicada a ON o a OFF .. siendo recomendable usarlo a OFF …
2) usando copy() para mover el archivo que se ha subido al servidor plantea un error de acceso (permisos) en configuraciones de PHP como CGI y algunas otras mas restrictivas. Ademas .. deja el archivo orien en el directorio temporal de nuestro servidor a la espera que por otro médio lo borremos …
Solución:
Usar en vez de copy() —> move_uploaded_file()
3) .. La extensión del archivo lo obtiene desglosando el nombre del Archivo que se sube y obteniendo su .extension … Así como está no detectaría nombres de archivos tipo config.inc.php .. correctamente.
Por otro lado .. el formato exacto del Archivo es solo “aproximado” y creyendo en la buena voluntad del que lo subió .. (podria cambiar la extension de un .exe a un .txt y el sistema nos diria q es un “texto” …)
Solución:
Via: $_FILES[‘Archivo’][‘type’] .. obtenemos el formato MIME del archivo que subimos .. del tipo categoria/detalle :
text/plain .. para un .txt comun …
image/gif .. jpg .. png .. para imagenes en estos formatos ..
application/zip .. Para los zip …
(mas formatos MIME en: http://www.isi.edu/in-notes/iana/assignments/media-types/media-types )
Esto es realmente util usarlo si por otro medio nos guardamos el “tipo” de archivo que es (para tal vez envialo como cabeceras HTTP al navegador).
Un saludo,
sini
Tendrias que ver la configuración de tu servidor .. (en un php.ini o en un phpinfo() …)
Puede ser que tengas desactivada el upload o que no tengas configurado el directorio temporal donde PHP guarda lo que subes via HTTP ..
De todas formas .. revisalo y aquí mismo en forosdelweb.com en el foro PHP puedes hacer tus preguntas si nos indicas que estas usando esté código y los detalles de configuración de tu servidor (de PHP) como:
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
; Whether to allow HTTP file uploads.
file_uploads = On (que no esté a OFF porsupuesto)
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir = alguna ruta . no “no value”
; Maximum allowed size for uploaded files.
upload_max_filesize = 2M ( que sea algun valor M = Megabyte)
Creo q estas cosas deberia indicarlas un buen manual sobre el tema .. En muchos casos que funcione o no .. depende de muchaaa configuración de PHP . habría que hacer mención a estos detalles.
Un saludo,
Buenisimo el tutorial :arriba:
Ahora solo hace falta uno para mandar por php un archivo a un email
no esta mal
Me parece que un buen tutorial
Eztopa …
Para eso usa alguna classe para tal fin .. ejemplo:
PHP Mailer
http://phpmailer.sourceforge.net
Te permite enviar e-mails multiparte (HTML y texto plano) ademas de enviar archivos adjuntos (attachments) sin problemas e incluso imagenes incrustados en tus mails HTML .. Y para “rematarlo” .. puede usar mail() de PHP, SMPT directo y sendmail o el MTA que se use en el servidor directo.
Un saludo,
Muy buenos tips los que has incluido Cluster. En especial la parte del safe_mode que me estaba causando problemas al implementarlo.
Un saludo.
Muy bueno
Saludos, a mi me funciona bien, sube los archivos a mi servidor, es solo que me marca un error de un max de 30 seg al subir, en lugar de mostrarme que el archivo a sido subido con éxito, cuando me muestra este mensaje del error, checo mi servidor y efectivamente subio el archivo, y este esta integro…espero pudieran ayudarme…mil gracias
jrbscorpion
Si tu servidor te lo permite .. usa:
set_time_limit(1200);[/PHP]
Al principio del script … Eso ajusta el tiempo de ejecución de ese script en concreto. El valor va expresado en segundos. 0 (cero) indicaría “tarde lo que tarde en ejecutarse” .. NO es recomendable usalo así (a cero) .. en su defecto dá tiempos largos (creo q con 1200:60=20 minutos va bien . no?)
Un saludo,
que es los medios externos del navegador
Muy bueno, gracias por ayudarnos a solucionar nuestros problemas
Gracias Cluster, en verdad que la ayuda aqui brindada es excelente, me sirvio, mil gracias estamos en contacto. Si te interesa que difunda tu foro por medio de mi estacion de radio por internet escribeme a [email protected]
Hola, el tutorial me parecio muy bueno, pero no puedo hacer funcionar el upload.
el codigo lo he modificado para mis necesidades y nunca me sube el archivo al servidor, uso apache y ya revise que todo este configurado ok (upload=on, tempdir configurado y size tambien)
el codigo es el siguiente, espero me puedan ayudar a corregirlo
< ?
//set_time_limit(1200);
echo “Nombre: “.$nombre=$_FILES[‘archivo’][‘name’];
echo “
“;
echo “Tamaño: “.$tamano=$_FILES[‘archivo’][‘size’];
echo “
“;
echo “Archivo Temporal: “.$_FILES[‘archivo’][‘tmp_name’];
echo “
“;
$extension = explode(“.”,$nombre);
$num = count($extension)-1;
if($extension[$num] == “gif” || $extension[$num] == “GIF”)
{
if($tamano < 100000)
{
if(!move_uploaded_file($_FILES[‘archivo’][‘tmp_name’], “Imagenes/”))
{
echo “error al copiar el archivo”;
}
else
{
echo “archivo subido con exito”;
}
}
else
{
echo “el archivo supera los 100kb”;
}
}
else
{
echo “el formato de archivo no es valido, solo .gif”;
}
?>
cuando ejecuto me sale este error por ejemplo
Nombre: chino.GIF
Tamaño: 1126
Archivo Temporal: C:\PHP\uploadtemp\php15C.tmp
error al copiar el archivo
ahora nunca he visto que el archivo llegue a subir ni al temp, es mas no se en que parte del codigo el archivo es subido al temp, solo veo que lo mueve desde el temp al directorio que yo quiero.
Esta de mas decir que solo llevo 2 dias programando con php pero es algo que me han solicitado hacer y todavia no puedo resolver este problema.
gracias a los que me puedan ayudar
saludos
Carlos
Nota : no se si sea necesario pero aca esta el formulario
Pero nosé que pasa con mi sitio en el servidor de http://www.tripod.lycos.es.
me muestra el sigiente Error:
Parse error: parse error in /data/members/free/tripod/es/r/e/a/realizador/htdocs/archivos.php on line 97
/*estas son las lineas 96 en adelante
if(!copy($archivo, “archivos/”.$Archivo_name)
{
*/
Hola, tengo el mismo problema con el upload de archivos, la configuracion del php esta correcta pero no sube el fichera al servidor, por favor ayudemne que esto es muy importante para mi
graicas anticipadas
Igual me sucede, sera el PHP? no creo, que dicen nuestros amigos expertor gracias de antemano tambien por la respuesta.
WOW!!!!!!!! ke manual!!!!!!!! eres un genio!!!!!
kieres ke te solucione la vida o ke pedo? no mames!!!!
jajajaja ok entra esta pagina el codigo esta mejor explicado:
http://webexperto.com/articulos/articulo.php?cod=149
muy bueno, me es de muchisima utilidad, te agradezco que te preocupes por nosotros los webmaster, que aveces necesitamos intercambiar conceptos. Un abrazo Patricio
Realmente muy claro!
Muchas gracias por hacer tutoriales como este para los q recien empiezan y mucho no entienden…
ya q siempre estan los q recien empiezan y a veces hay tutoriales q los lees y es como q ya tendrias q saber ciertas cosas…
Muchas gracias!
Un saludo,
Hey y que pasa cuando en un formulario tengo otros campos, ademas del archivo que quiero subir ??
Tengo uno y no me esta funcionando cuando lleva mas campos.
AYUDA PLEASE
bueno, esta fuerte y claro
muy bien explicado
…No lo consigo
Npo me funciona
es una porqueria y no tiene lo que necesito
se me hizo un poco interesante pero para lo que yo necesitaba no me sirvio de mucha ayuda. Sigan mejorando.
Si el servidor no acepta subir archivos, se puede subir un archivo utilizando por ejemplo ftp://usuario:contraseñ[email protected]
Srs … (y Sras.. ) ..
En lugar de decir cosas como “no es lo que buscaba” .. DIGAN!!! que es lo que necesitan .. Tal vez el autor lo lea y edite otro tutorial con sus requerimientos.
De todas formas, piensen que los TUTORIALES son para que uno entienda el concepto básico (en este caso “subir” las imagenes al servidor) .. La aplicación que le dé final .. es cosa de cada uno.
Si desean scripts de”upload” de archivos visiten sitios como hotscripts.com y busquen algo que se les acomode ..
Un saludo,
hola, yo tengo la misma necesidad pero necesito subir archivos .xls(excel), si puedes ayudarme te lo agradeceria muchisimo
que bueno son estos tutoriales exelente esplicacion sigan mostrando mas informacion sobre php y maysql
ok, esto ya lo entendi bien , pero que pasaria si necesito subir una imagen a una base de datos mysql, el script seria de la misma manera o tengo que hacer otra cosa para almacenarla en la base de datos ?, por otro lado , si fueran mas de 10,000 imagenes para subir, que seria lo mas recomendable , guardar la ruta donde las estoy guardando o como ?
gracias
hola esta muy bueno, si pudieras ayudarme, yo quisiera subir varios archivos a la vez al servidor…
no sirve, ademas se deja muchas explicasiones en el aire
Muy Claro, Gracias!
Y el usuario y contraseña?? donde los pongo de lo contrario no podre subir los archivos a mi server
Hola !!
Mi problema es el siguiente:
Tengo ya hecha la forma y mando correos con la funcion mail() de PHP pero ahora necesito ke se le puedan adjuntar mensajes y mandarlos junto con el correo.
Espero que se comprenda mi problema y tenga una respuesta GRACIAS !!
es muy buneno este progama pero yo tengo un problema en particular
Necesito mandar datos adjuntos mediante la funcion mail() de php
Ya tengo funcionando la aplicacion pero no manda adjuntos y necesito ke lo haga
Si pueden decirme como hacerlo lo agredecere
muy buen PHP
Me ha ayudado!!!
asias tronk!
1. hola, he estado investigando sobre subir archivo al servidor usando PHP. Pero me pregunto porque este script no utiliza la funcion FTP_PHP como seria lógico; ya que me estoy conectando al servidor?
2. En otra pagina lei sobre usar la funcion FTP_PHP, para subir archivos al servidor:
$ftp_ip = “el ip”;
$ftp_login = “login”;
$ftp_password =”clave”;
$conn_id = ftp_connect($ftp_ip);
// login con su user y password FTP
$login_result = @ftp_login($conn_id,$ftp_login,$ftp_password);
$upload = ftp_put($conn_id,”datos.txt”, $archivo_temp , FTP_BINARY);
todo me funciona bien, pero cuando reviso en el servidor, el archivo esta vacio, alguien me podria decir a q se debe?
saludos
Hola de nuevo
¿En que caso podria dar el error al copiar el archivo? a mi me manda ese mensaje
Por que no nos mandas un ejemplo como el anterior, pero con todas las modificaciones que mencionas, te lo agradeceria muchisimo y seguro q varios tambien ok?
gracias
———————————-
tengo error en el copy, esta bien que Archivo_name vaya con mayuscula?, porque?
es bacan tu articulo
buen articulo
pero seria bueno tener mas ejemplos.
canda ver inteto hacer me sale este error
Warning: Unable to create ‘ade.JPG’: Permission denied in /home/iramos/public_html/subearchivo.php on line 14
Warning: Unable to move ‘/tmp/phpUSJq78’ to ‘ade.JPG’ in /home/iramos/public_html/subearchivo.php on line 14
Ocurrió algún error al subir el fichero. No pudo guardarse.
que significa y que puedo hacer.
utilice el codigo pero me da el siguente error Parse error: parse error, unexpected ‘{‘ in d:\sitiosphp\nicron\subir.php on line 9
alguien sabe porque pasa esto
Alguien podria ayudarme por favor me inicio en PHP y el codigo no me funciona tengo el register_global en On y nada.. me aparece lo siguiente :
Notice: Undefined index: archivo in c:\inetpub\wwwroot\php\noticias\agrega.php on line 8
y la linea de programacion es esta :
$arch = $HTTP_POST_VARS[“archivo”];
y viene del siguiente formulario :
Hola! Primero de todo enorabuena por tu artículo, ya q he estado mirando por todo internet y ha sido el mejor que he encontrado. Soy un poco novata con php. He provado el script, y me da error en la función copy y no logro averiguar porque. Te agradeceria si me pudieras decir algo. Ya se que no soy muy explicita, pero es q estoy un poco perdida. Gracias
Soy lila104
Lo siento, pero he respondido al artículo sin ver antes el foro, me he precipitado….
gracias!! esta bien claro
tengo un problemita nose ke pueda ser o si es problema de configuracion de php pero las propiedasdes name y size no me funcionan es decir
$archivo_name
$archivo_size
no me estan funcionando sera alguna idiotes de mi parte o algo ke alguien le haya pasaso y solucionado?
gracias de antemano
Si usas register_globals a OFF .. las propiedades de un archivo que sube por “Upload HTTP” están en los arrays asociados $_FILES[‘archivo’][‘propiedad’] .. (Si revisas los comentarios de este mensaje verás que yo mismo he hablado sobre ese tema) ..
Un saludo,
gracias por la respuesta… pero nada que me funciona es decir, tengo las register_globals on y las propiedades name y size no me contienen nada, los arrays ya los probe y pasa exactamente = si le digo que me imprima el archivo sin ninguna propiedad especifica me muestra la ruta completa de el mismo pero las propiedades no me contiene nada quesiera saber si ademas de las configuraciones para subir archivos de php.ini hay algo que me pueda estar afectando me lei todas los treads y nada. pues nose si algunas configuraciones en el apache afecten esto.
de antemano muchas muchas pero muchas gracias
saludos
PD: toy casi seguro ke es algo de configuracion antes habia trabajado con subidas de archivos y me funcionaba cambie mi version de php por la ke usan en el server donde hospedo las paginas y no tener problemas. de nuevo gracias
aclaro el PD sorry me equivoque al final la version que tenia era 4.3.2 pero cambie a a la misma del server y empesaron los problemas no en el server sino en mi maquina
Muy claro el asunto. Saludos.
Amigo me sirvio 100% Gracias
muy bueno, pero me gustaria que alguien me dijera si hay posibilidad de crear una carpeta mediante php,lo digo pq no me gustaria mezclar los archivos de distintos usuarios que los suban al Servidor.Muchas gracias.
mira si se pueden crear carpetas utilizando codigo php
solo tienes que utilizar las instrucciones o comandos de DOS y funcionan igual:
mkdir(‘path’, permiso);
ejemplo (‘C:\nuevaCarpeta’, 0700);
suponiendo que ya esxiste el directorio entonces te quedaria asi
$path= “C:/nuevaCarpeta/nombrenuevoDirectorio/”;
mkdir ($path, 0700);
y se creara dentro de nueva carpeta el directorio ‘nombrenuevodirectorio’;
muy buen manual… los felicito…
chabon, sos un capo….recien me meto a programar en php, por suerte tengo algo de base de “c” ke me resulta muy familiar eesto. Esta muy bien explicado, felicitaciones. hay algun texto mas tuyo por aca??
salu3
ZAK
un programa para descargar archivos PHP
[email protected]
buen tutorial,muy bien estructurado y comentado. Me ha servido de mucha ayuda.
Enhorabuena Jorge
Esta muy bueno eso, pero tengo un pequeño problema quiero subir varios archivos a la vez como le hago??
Haber si me pueden ayudar
Realmente el código si funciona pero tengo una duda yo tengo Red Hat 9.0 y quiero subir archivos de mas de 2 Mb ya cambie todas las configuraciones enel php.ini pero sin embargo no funciona. Si alguien puede ayudarme se lo agradecería [email protected]
Muy bueno. Me gustaria que tambien pongan un script que funcione con el safe mode prendido, que trabaje con ftp en vez de la funcion copy()
Se te olvidó el boton de subir el archivo, ya que solo está incluido el boton Examinar.
Gracias
pues si esto es uno de los manuales mas bien explicados … miedo tengo de los demas :/
Warning: move_uploaded_file(avatar/avatar.gif): failed to open stream: Permission denied in /home/adcsite/public_html/amodavatar.php on line 36
Warning: move_uploaded_file(): Unable to move ‘/tmp/phpfvEoSe’ to ‘avatar/avatar.gif’ in /home/adcsite/public_html/amodavatar.php on line 36
:::::::::::::::
me sale este error me podrian ayudar o decirme como lo soluciono 😀 muchas gracias de antemano
y los permisos??
El tutorial es buenisimo pero habria alguna forma de que el nombre del archivo fuera autonumerico y pasara una variable pasa ser guardado en una tabla mysql? si alguin lo sabe pido por favor me lo informen [email protected]
saludos
Si deseas subir varios archivos a la vez solo tienes que manejar el textfile como un vector, aqui tienes un ejemplo
**************************************************
//GuardarArchivo.php
for ($i=0; $i < = 10; $i++){
$archivo_name= $HTTP_POST_FILES[‘archivo’][‘name’][$i];
$archivo_size= $HTTP_POST_FILES[‘archivo’][‘size’][$i];
$archivo_type= $HTTP_POST_FILES[‘archivo’][‘type’][$i];
$archivo= $HTTP_POST_FILES[‘archivo’][‘tmp_name’][$i];
echo “
$archivo_name“;
echo “
$archivo_type“;
if ($i==0 && $archivo_name !=””)
{
echo “paso”;
$dir_uniA = $dir_uniA.$archivo_name;
}
//$archivo_type == “htm”
if ( $archivo_type == “htm” || $archivo_type == “text/html”)
{
echo “El archvo es html”;
echo $archivo_type;
if (copy ($archivo, $path.$archivo_name))
{
$confirmar1 =”transferido el archivo”+ “$archivo_name”;
echo “
$confirmar1
“;
$confirmar2 =”Su+tamaño+es:+$archivo_size+bytes”;
echo “
$confirmar2
“;
echo “
“;
}
}
if (($archivo != “none”))
{}
else
{ $error1 = “No+ha+podido+transferirse+el+fichero”;
echo “
$error1
“;
$error2 = “su+tamaño+no+puede+exceder+de+$archivo+bytes”;
echo “
$error2“;
header(“Location: ../Tutorial/ErrorIngresarArchivo.htm?e1=$error1&e2=$error2”);
}
}
Espero que les sirva este ejemplo….
Para quienes el script les da este error:
Warning: move_uploaded_file(avatar/avatar.gif): failed to open stream: Permission denied in /home/adcsite/public_html/amodavatar.php on line 36
Warning: move_uploaded_file(): Unable to move ‘/tmp/phpfvEoSe’ to ‘avatar/avatar.gif’ in /home/adcsite/public_html/amodavatar.php on line 36
El problema es que la carpeta a la que intentan mover sus archivos no tiene permiso de escritura a “Otros”. Esto se puede cambiar en el soporte de su cuenta FTP o bien con el comando chmod() de PHP. Esto último lo estoy estudiando todavía, pero me imagino que se puede agregar unas líneas para que el script controle si la carpeta está protegida y cambiar los permisos.
Vle callampa este manual no puedo subir archivos de mas de unos 500 kb php version 4.2.2 – linux 9 – apache- tengo configurado a 8 m toda la guea y nada
debes asegurarte de colocar en el php.ini
upload_max_filesize = 8M
El script está bien diseñado, pero no funciona correctamente! No puede encontrar en ningín caso el archivo de origen. Dice que el archivo (Y el nombre que muestra existe) no lo puede encontrar y produce un error.
Gabriel – [email protected]
No sólo PHP en su configuración (php.ini):
upload_max_filesize
post_max_size
(si no me equico)
Restringe el tamaño del archivo a subir por médio de PHP vía HTTP.
El servidor HTTP en sí también restringe el tamaño del archivo y eso lo hace en su configuración ( php.conf al parecer ) bajo la directiva:
(esto debería explicarlo en el tutorial si no lo hace ya .. por qué por ahí vienen algunos problemas junto con los problemas típicos sobre permisos de directorios o un mínimo de configuración “a revisar” de PHP para que sepamos que va a funcionar el tema del “upload” de archivos ..)
mas información y lectura -obligada-:
http://www.php.net/manual/en/features.file-upload.php
Fijesen en el comentario de:
travis dot lewis at amd dot com
04-Dec-2002 02:58
Sobre el tema de dicha limitación.
Un saludo,
hola Gabriela,
Queria informarles que hay un pequeño detalle en el codigo que deben acomodar es que el archivo GuardarArchivos.php debe estar en el mismo directorio que el archivo CargarArchivos.php (o .htm es lo mismo), en dado caso en el ACTION del formulario se debe indicar es asi:
ACTION:GuardarArchivo.php ………y no ../GuardarArchivo.php
Espero que eso te sirva, quizas ese sea el archivo que te dice que no encuentra..
¿y como le harias para darle un valor inicial a la etiqueta file?, por que yo valido otros datos en la misma pagina y quiero que el archivo que escogi no desaparezca al volver a cargar la pagina, por ejemplo ” name=”txtNombre”>
OYE ESTA EXCELENTE PERO ME QUEDA UNA DUDA SI QUIERO QUE LOS ARCHIVOS QUEDEN EN UNA CARPETA EN ESPECIFICO
Si detallas tu consulta veras que tendras mayor atencion. Una pregunta bien elaborada encontrara una respuesta certera.
:arriba:
Hola, muy buenas.. en repetidas ocasiones he tirado de vuestra sabia experiencia y ayuda para poder resolver este tipo de conflictos de codigo.. ahora me veo negro con un problema al cual no soy capaz de dar solucion.
Uso el EasyPHP para gestionar todo, ya que es mas sencillo, y en repetidas ocasiones siempre me marca lo mismo
Notice: Undefined variable: archivo_name in v:\program files\easyphp1-7\www\www\2.php on line 2
y a continuacion me da el error de que es incorrecto el formato del archivo que trato de subir.. ya tengo el php.ini preparado, con la ruta, y en on y bueno, no estoy seguro si deberia acceder a apache y poner esta carpeta en modo 777 de escritura, lectura..
Que puedo hacer? estoy en un aprietillo, creo que montare apache por un lado, php por otro.. no se.. me podriais indicar que posible solucion tomar?
Un cordial saludo y muchas gracias. Sois unos fenomenos!!
Debes usar los arrays superglobales: $_FILES .. no $archivo_name sino $_FILES[‘archivo’][‘name’] ..
mas información y lectura -obligada-:
http://www.php.net/manual/en/features.file-upload.php
Un saludo,
Es muy bueno el script me funciona de manera perfecta, lo he modificado incluso para que se adapte a mis necesidades (tipo de archivo, peso, errores propios, directorios, etc) pero realmante me gustaria saber si hay alguna forma de leer las propiedades del archivol. Al grano, si subo una imagen ya sea jpg o gif que es de mas de 150 X 150 pixels, no me dejara subirla o la borrara o me diera un error.
Agradezco la ayuda que pudieran brindar,
Gracias de antemano.
Como introducción al upload está bien, pero en mi opinión y como pasa en casi todas las web que aportan código, ya me da igual que sea php,java,c,etc, no se le informa al usuario que lo está leyendo es sólo un ejemplo aplicable al tutorial y que lógicamente no es código fiable, para ello como para todo lo que se programe es necesario realizar un análisis previo.
Tan sólo comento esto porque la gran mayoria de webs de diseño son perfectas pero de programación son nefastas, y quisiera con este comentario, abrir un debate sobre la funcionalidad vs. el diseño, cosas que a dia de hoy no se aplican como se debiera.
Gracias por este espacio.
[email protected]
Cambia los permisos del directorio a donde suben sus archivos, denle permisos de escritura, con eso se soluciona el problema (la mayoria de las veces).
una duda sobre la funcion move_uploaded_file
hay alguna otra forma que pueda subir un archivo de mas de 100 Kb es que estoy en un hosting gratiniano pa probar ne la web pewro por lo visto ta limitado ya que no lel el tamaño y no sube nada , de tal forma que no puedo editar el php.ini ni toquetear las opciones de configuracion
por favor quisiera saber los archivosa que necesito subir no superan los 200 Kb solo x 100 y no puedo hacer nada
quisiera saber si me podrias mandar un script donde se puedan mandar archivos adjuntos con php mailer
Aqui dejo una modificacion del script original con las sugerencias hechas por el moderador para quienes deseen ver como funciona usando _FILES
Este script solo permite el envio de archivos en formato gif o jpg (imagenes), para otro tipo de archivos cambiar las especificaciones MIME segun los requisitos particulares
Primero lo que debe ir en el formulario:
*********************************
< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
method=”post” name=”form1″>
****************************************
Y luego el php que procesa la imagen enviada a traves del formulario:
****************************************
< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
< ?php
//formulario de upload por jorge luis martinez
//modificado por Mauricio Fernandez
//http://miscodigos.jlmnetwork.com/
$extension = explode(“.”,$_FILES[‘archivo’][‘tmp_name’]);
$num = count($extension)-1;
if(($_FILES[‘archivo’][‘type’] == “image/pjpeg”) or ($_FILES[‘archivo’][‘type’]== “image/gif”)) {
if(!move_uploaded_file($_FILES[‘archivo’][‘tmp_name’], “fotos/”.$_FILES[‘archivo’][‘name’])) {
echo “error al copiar el archivo”;
}
else {
echo “el archivo se ha subido con exito”;
}
}
else {
echo “el formato de archivo no es valido, solo se admiten imagenes gif o jpg”;
}
?>
************************************
Hace mucho de esto, pero para los que no an savido, solo agreguen un “)” parentesis al final, eso es el unico inconbeniente…
###Con error####
if(!copy($archivo,”carpeta_upload/”,$archivo_name)
###Sin error###
if(!copy($archivo,”carpeta_upload/”,$archivo_name))
Si no tienes acceso a la configuración del servidor no tienes forma de aumentar dichas restricciones que te están aplicando.
Un saludo,
Tenes que ponerle un nombre de destino
proba con:
if (!move_upload_file($_FILES[‘archivo’][‘tmp_name’], “Imagenes/”.$_FILES[‘archivo’][‘name’]))
{
…
Saludos!
lo que puedes hacer es usar la funcion
if(!move_uploaded_file($archivo,[/QUOTE]……..
con esto lo arregle yo
espero que esto ayude a otros como yo, ya que “los Foros del Web” me han sacado de muchos aprietos, gracias
alguien sabe como enviar correo con archivos adjuntos en php sin utilizar la clase phpmailer
pues ami el unico que me ando fue este codigo porque el anterior paranada debe tener algun error de sintaxis o algo por el estilo
este es el codigo que me ando ami
< ? if($boton) {
if (is_uploaded_file($HTTP_POST_FILES[‘archivo’][‘tmp_name’])) {
if($HTTP_POST_FILES[‘archivo’][‘size’] < 85000) {
if($HTTP_POST_FILES[‘archivo’][‘type’]==”image/gif” || $HTTP_POST_FILES[‘archivo’][‘type’]==”image/jpeg” || $HTTP_POST_FILES[‘archivo’][‘type’]==”image/pjpeg”) {
copy($HTTP_POST_FILES[‘archivo’][‘tmp_name’], $HTTP_POST_FILES[‘archivo’][‘name’]);
$subio = true;
}
}
}
if($subio) {
echo “El archivo subio con exito”;
} else {
echo “El archivo no cumple con las reglas establecidas”;
}
die();
}
?>
copien esto en un archivo de texto y despues lo renombran como archivo php
bueno el scrip es asi detodos modos gracias al amogo de arriba que digo que le faltava el “)” pero con la unica que anda es asi
< ?php
//formulario de upload por jorge luis martinez
//http://miscodigos.jlmnetwork.com/
$extension = explode(“.”,$archivo_name);
$num = count($extension)-1;
if($extension[$num] == “zip”)
{
if($archivo_size < 85000)
{
if(!copy($archivo, “archivos/”.$archivo_name))
{
echo “error al copiar el archivo”;
}
else
{
echo “archivo subido con exito”;
}
}
else
{
echo “el archivo supera los 85kb”;
}
}
else
{
echo “el formato de archivo no es valido, solo .zip”;
}
?>
ok saludos
Miren este mejorado que les Acepta “gif” y “jpg” lo que quieran meterle sin tanto problema eee
< ?php
//formulario de upload por jorge luis martinez
//http://miscodigos.jlmnetwork.com/
$extension = explode(“.”,$archivo_name);
$num = count($extension)-1;
if($HTTP_POST_FILES[‘archivo’][‘type’]==”image/gif” || $HTTP_POST_FILES[‘archivo’][‘type’]==”image/jpeg” || $HTTP_POST_FILES[‘archivo’][‘type’]==”image/pjpeg”)
{
if($archivo_size < 85000)
{
if(!copy($archivo, “archivos/”.$archivo_name))
{
echo “error al copiar el archivo”;
}
else
{
echo “archivo subido con exito”;
}
}
else
{
echo “el archivo supera los 85kb”;
}
}
else
{
echo “el formato de archivo no es valido, solo .jpg”;
}
?>
Despues en la Raiz de tus servidor te armas una Carpeta nueva con el nombre
“archivos” sin las comillas y tu upload.htm que lo explico Jorge Luis Martinez
y ya
Con el mismo estilo de comparacion por el type puedes restringir los archivos
Hola a todos:
Tengo un problema, en un programa estoy untilizando la función readfile a la que le mando parámetros para ubicar el archivo que deseo abrir, a la hora de desear abrir dicho archivo me lo abre en el navegador, cómo puedo hacerle para que me lo abra en el formato adecuado al archivo.
Les agradesco de antemano su atención.
Talina.
Quiero saber cómo acceder a un archivo de texto desde un formulario web.
la verdad no tengo ni idea de qué es eso y tengo que hacer un trabajo sobre eso.
Si alguna persona me pudiera colaborar quedaría agradecida totalmente.
Me dicen que es con ASP… qué es eso.
Please ayuda
Hola!!
De antemano digo q tengo las nociones basicas de php.He intentado modificar el codigo para subir archivos a servidor pero no me funciona.
No se si me explico correctamente pero lo q necesito es insertar una foto q se obtiene de un “campo” examinar, en un campo blob de mysql.
Si me podeis hechar una mano o indicarme algun manual lo agradeceria muxisimo
Gracias.Ro
muy bueno, pero me gustaria que alguien me dijera si hay posibilidad de crear una carpeta mediante php,lo digo pq no me gustaria mezclar los archivos de distintos usuarios que los suban al Servidor.Muchas gracias.
Mi duda esta en hasta cuantos mb se pueden subir utilizando este sistema y cuales son sus ventajas frente a una aplicación asp que realice la misma función.
He intentado seguir las instrucciones del formulario.html y subir.php pero al acceder al formulario.html desde internet… dónde está el botón “enviar”?
Algo hago mal…
Saludos,
me he perdido.. cuando cuelgo:
1- formulario.html
2- subir.php
3- archivos (directorio bacio)
…y desde Internet accedo a formulario.html, no hago mucha cosa sin un botón “enviar”…
Pido disculpas si no lo entendí bién. Aleguien me lo puede aclarar?
Gracias
HOla, sabes tengo todo eso configurado y aun asi no puedo subir mas de 2 mB sera algo del Mysql, Que puedo hacer
Quisiera saber como puede resolver el problema, me aparece un nanuncio
Warning: copy(archivos/buscador.zip): failed to open stream: Permission denied in /home/clap/public_html/subir.php on line 8
Es muy fácil:
La carpeta en la que quieres copiar el archivo está protejida. Necesitas hacerla “writable”, es decir, que se pueda acceder a ella.
hazle un chmod 775 a esa carpeta
Buenas,
excelente SCRIPT, pero me queda una duda…
¿¿Como puede subir o anexar archivos con formato PDF??
< < enviarme contestaciones por favor a la dirección "[email protected] >>
GRACIAS de antemano.. me salvaría de un gran APURO !!
Soy nuevo en esto del php, pero este articulo me parecio excelente
yo puedo subir tranquilamente archivos en mi servidor pero quiero subir en otro servidor y no me permite me da un error de que la carpeta no tiene permisos pero ya estan dados los permisos, si alguien puede ayudarme les agradesco
Hola, es la primera vez que ingreso a un foro, por eso no se si dí clic donde debía, el caso es que necesito que me lleguen a mi correo unas imágenes que el “usuario” envie, junto con una informacion que se le solicita al usuario, todo por medio de un PHP es para la Universidad, pero la verdad e intentado agragando lineas al codigo pero no me funcionan. gracias.
[email protected]
aki yo les dare un pekeño manual sobre esto, espero ke les sirva
archivo upl2.php
< ?
///////////////////////
// Upload de Archivos//
// akuatik 03′ //
// http://akuatik.net//
// for PHP > 4.2.x //
///////////////////////
// Configuración //
///////////////////
// $extensiones=array(“1ªext”,”2ªext”,”….”);
// Aqui debes poner las extensiones que NO admitas
// por ejemplo si no quieres admitir .html , .exe ni .gif :
// $extensiones=array(“html”,”exe”,”gif”);
///////////////////////////////////////
$extensiones=array(“html”,”exe”,”php”);
/////////////////
// $path=”/ruta/ta/ta”;
// Si el server rula bajo LinuX toda la ruta completa /var/etc/..
// Si rulas bajo WindoWs C:/midirectorioroot/tal..
// Nota: Sin el último / ej: C:/miweb NO C:/miweb/
////////////////
$path=”C:”;
$nombre=$HTTP_POST_FILES[‘archivo’][‘name’];
$tamanio=$HTTP_POST_FILES[‘archivo’][‘size’];
$tipo=$HTTP_POST_FILES[‘archivo’][‘type’];
$var = explode(“.”,”$nombre”);
$num = count($extensiones);
$valor = $num-1;
for($i=0; $i< =$valor; $i++) {
if($extensiones[$i] == $var[1]) {
echo “Tipo de Archivo no admitido”;
exit;
}
}
if (is_uploaded_file($HTTP_POST_FILES[‘archivo’][‘tmp_name’]))
{
copy($HTTP_POST_FILES[‘archivo’][‘tmp_name’], “$path/$nombre”);
echo “El archivo se ha subido correctamente al servidor, muchas gracias
“;
echo “Nombre: $nombre
“;
echo “Tamaño: $tamanio
“;
echo “Tipo: $tipo”;
}
else { echo “Error al subir el archivo”; }
?>
archivo upload.php
< ?
///////////////////////
// Upload de Archivos//
// akuatik 03′ //
// http://akuatik.net//
// for PHP > 4.2.x //
///////////////////////
?>
probe el scrip que y me sigue tirando errores ya no se que hacer, les paso mi scrip con el error qeu tira, salvenme de esta, gracias les dejo mi mail [email protected]
< ?
///////////////////////
// Upload de Archivos//
// akuatik 03′ //
//
// for PHP > 4.2.x //
///////////////////////
// Configuración //
///////////////////
// $extensiones=array(“1ªext”,”2ªext”,”….”);
// Aqui debes poner las extensiones que NO admitas
// por ejemplo si no quieres admitir .html , .exe ni .gif :
// $extensiones=array(“html”,”exe”,”gif”);
///////////////////////////////////////
$extensiones=array(“html”,”exe”,”php”);
/////////////////
// $path=”/ruta/ta/ta”;
// Si el server rula bajo LinuX toda la ruta completa /var/etc/..
// Si rulas bajo WindoWs C:/midirectorioroot/tal..
// Nota: Sin el último / ej: C:/miweb NO C:/miweb/
////////////////
$path=””;
$nombre=$HTTP_POST_FILES[‘archivo’][‘name’];
$tamanio=$HTTP_POST_FILES[‘archivo’][‘size’];
$tipo=$HTTP_POST_FILES[‘archivo’][‘type’];
$var = explode(“.”,”$nombre”);
$num = count($extensiones);
$valor = $num-1;
for($i=0; $i< =$valor; $i++) {
if($extensiones[$i] == $var[1]) {
echo “Tipo de Archivo no admitido”;
exit;
}
}
if (is_uploaded_file($HTTP_POST_FILES[‘archivo’][‘tmp_name’]))
{
copy($HTTP_POST_FILES[‘archivo’][‘tmp_name’], “$path/$nombre”);
echo “El archivo se ha subido correctamente al servidor, muchas gracias
“;
echo “Nombre: $nombre
“;
echo “Tamaño: $tamanio
“;
echo “Tipo: $tipo”;
}
else { echo “Error al subir el archivo”; }
?>
archivo upload.php
< ?
///////////////////////
// Upload de Archivos//
// akuatik 03′ //
//
// for PHP > 4.2.x //
///////////////////////
?>
el errorrrr es el siguiente::::::
Warning: copy(/t1.jpg): failed to open stream: Permission denied in /www/elrefugi/public_html/upl2.php on line 38
El archivo se ha subido correctamente al servidor, muchas gracias
usando la funcion move_uploaded_file me tira estos errores, ya no se qeu hacer…………………….
Warning: move_uploaded_file(images/checkerboard.gif): failed to open stream: Permission denied in /www/elrefugi/public_html/subi.php on line 16
Warning: move_uploaded_file(): Unable to move ‘/nuting/upl/phpY7K8Fk’ to ‘images/checkerboard.gif’ in /www/elrefugi/public_html/subi.php on line 16
error al copiar el archivo
dale permiso 775 o 777 a la carpeta images
Yo utilize este codigo para subir fotos a un servidor pero al ejecutarlo en el servidor, no funciona, creo que no tengo derechos para subir fotos o datos de esa manera, ¿como puedo solucionar eso? carlos eduardo [email protected]
Hola a todos bueno ami = me aparecia ese error pero..
con este codigo
________________________________________________________________
formulario.htm
________________________________________________________________
upload.php
< ?
$directorio = ‘/archivos_upload/’;
if (move_uploaded_file($_FILES[‘archivo_usuario’][‘tmp_name’], $directorio . $_FILES[‘archivo_usuario’][‘name’]))
{
print “El archivo fue subido con éxito.”;
}
else
{
print “Error al intentar subir el archivo.”;
}
?>
_________________________________________________________________
bueno en primer lugar me dava este error
Warning: move_uploaded_file(uploadhosting.gif): failed to open stream: Permission denied in /home/djadicto/public_html/upload.php on line 4
Warning: move_uploaded_file(): Unable to move ‘/tmp/phpbofQgm’ to ‘uploadhosting.gif’ in /home/djadicto/public_html/upload.php on line 4
Error al intentar subir el archivo.
____________________________________________________________
lo que hice fue en el archivo upload le cabie asi
$directorio = ‘/archivos_upload/’; si no le resulta asi intenten asi
$directorio = ‘/home/djadicto/public_html/upload/
asi me funko altiro ami.. bueno eso era… saludos
________________________________________________________________
lo
Me parece muy bien, no he probado el código pero creo que funcionará sin problemas.
Ahora mi duda es: suponemos que es un usuario o varios los que están subiendo imagenes para que luego sean mostradas en una página haciendo referencia en la base de datos, por ejemplo ¿no?.
Bien , imaginemos que esa base de datos se actualiza continuamente con sus respectivos ingresos, bajas y modificaciones. Con lo cual al cabo de un largo tiempo habremos acumulado una exagerada cantidad de imagenes en el servidor que no se utilizan para nada, de todos aquellos registros que hayan sido dados de baja ¿no?.
Mi pregunta es : ¿como se pueden borrar esas imagenes?¿es posible?.¿hay alguna manera de acceder a ellas para borrarlas?.
Por ejemplo: Si un usuario borra un registro determinado de una tabla de la base de datos, pues que también se borren las imagenes que estan por ejemplo en el directorio imagenes y que corresponden a este registro.
¿Me habeis entendido?.Espero que si.
No puedo subirlo, necesito usar el método GET. E intento que al subirlo le ponga un nombre determinado, por ejemplo, que el archivo se asocie a una persona, y siendo una imagen, cuando se copie a la carpeta correcta se copie con el nombre de la persona seguido de “.jpg”
Sé que no es seguro pero sólo es para probar y poco a poco mejorarlo.
lo que tengo ahora en la página que inserta en la base de datos:
$foto=$HTTP_GET_VARS[‘foto’];
if(!move_uploaded_file($foto, “fotos/”.$nombre.”.jpg”))
echo “error al copiar el archivo”;
else
echo “archivo subido con exito”;
$query=”insert into alumnos (alumno, curso, direccion, foto) values (‘$nombre’, ‘$curso’, ‘$direccion’, ‘$foto’)” ;
Parse error: parse error in /data/members/free/tripod/es/j/a/i/jaime84625/htdocs/remoting/gateway.php on line 16
que quiere decir eso
[email protected]
Muy buenos los scripts, hasta que tamaño pudieron subir los archivos?, yo mas de 1.8 mb no pude hay alguna forma de ampliarlo? ya modifiqué en el php.ini el limite para el upload.
saludos
Como se puede saltar esta limitacion ?
He visitado otras páginas para ver scripts similares y este lo deja todo muy claro. También he visto en otros sripts que se utiliza la variable $HTTP_POST_FILES para realizar ciertas funciones, como obtener el nombre y tamaño del archivo.
(Para los otros posteadores: Es muy dificil que en un tutorial obtengamos exactamente lo que necesitemos, así tendría que haber un tutorial para cada uno de nosotros. Con estos tutoriales nosotros sabemos lo básico, es nuestro deber el ingeniarnos cómo adaptarlo a lo que queremos, no nos acostumbremos a buscar en internet todo hecho).
Mmmm, mi pequeño aporte, encontré otro script y lo apliqué en mi página y me funcionó:
Subir.php
Hasta aquí está todo igual, aquí viene lo distinto:
Recibir.php
< ?php
if($upload)/*Comprobamos si existe el boton*/
{if (is_uploaded_file($HTTP_POST_FILES[‘archivo’][‘tmp_name’]))/* Si es que se intentó subir el archivo continuamos */
{if($HTTP_POST_FILES[‘archivo’][size]<10000)/*Comprobamos tamaño*/
{if($HTTP_POST_FILES[‘archivo’][type]==”image/jpeg”)/*El tipo*/
/*Si es que se dieron todas las condiciones podemos copiar el archivo al destino desde la carpeta temporal*/
{copy($HTTP_POST_FILES[‘archivo’][‘tmp_name’], “archivos/”.$HTTP_POST_FILES[‘archivo’][‘name’]);
$subio = true;/*Una variable booleana nos ayudará en la validación para comprobar que todo anda bien*/
}
else
{echo “Error al intentar subir el archivo, compruebe que la extensión sea .JPG”;/*Error si el formato no es el correcto*/
}
}
else
{echo “Error al intentar subir el archivo, compruebe que su tamaño sea menos a 10KB”;/*Error si el tamaño es muy grande*/
}
}
if ($subio) /*Si $subio es true desplegamos un mensaje de éxito*/
{ echo “El archivo subio con exito”;
}
else
{echo “Error al subir el archivo, compruebe su tamaño y formato o contáctese con el administrador de la página”;/* Si $subio es False entonces desplegamos el mensaje de error, este mensaje se despliega junto con los anteriores*/
}
die();
}
?>
$HTTP_POST_FILES es una variable de php que nos permite manejar distintas funciones de los archivos que subimos a nuestra página.
Saludos..
Para insertar archivos .exe a mi Base de Datos, como lo puedo realizar.. De tal forma que cada columna que tengo en excel quede en cada campo de la tabla…. Agradezco cualquier ayuda posible..
Hola, qué tal? bueno, en realidad me sirvió mucho el script… me funcionó correctamente hasta que lo agregué a otro script que yo hice para que funcionaran en conjunto. El otro script, se trata de uno que añade registros a una base de datos MySQL… y uno de los datos que necesito añadir, es el nombre del archivo subido, ya que el mismo se muestra cuando muestro los registros de la base de datos…
Cuando lo tenía x separado, el script de Upload funcionaba a la perfección, pero cuando lo agregué a mi otro script, me daba el error de que el formato de archivo no era correcto… pero el archivo si tenía el formato especificado en el código PHP…
A continuación copio el código de mi script junto con el Upload, tal cual quedó.. para ver si alguien me puede dar una mano…
[PHP]< ?php
//formulario de upload por jorge luis martinez
$extension = explode(“.”,$archivo_name);
$num = count($extension)-1;
if($extension[$num] == “gif”){
if($archivo_size < 30000){
if(!copy($archivo, “archivos/”.$archivo_name)){
echo “error al copiar el archivo”;
} else {
echo “archivo subido con exito”;
}
} else {
echo “el archivo supera los 30kb”;
}
} else {
echo “el formato de archivo no es valido, solo .gif”;
}
$nombre = $_POST[‘nombre’];
$tipo = $_POST[‘tipo’];
$descripcion = $_POST[‘descripcion’];
$domicilio = $_POST[‘domicilio’];
$telefono = $_POST[‘telefono’];
$email = $_POST[‘email’];
$web = $_POST[‘web’];
$contacto = $_POST[‘contacto’];
$periodo = $_POST[‘periodo’];
if ($nombre == “”) die(“No se ha ingresado el NOMBRE de la Empresa.”);
if ($tipo == “”) die(“No se ingresado el TIPO de la Empresa.”);
if ($descripcion == “”) die(“No se ingresado la DESCRIPCION de la Empresa.”);
if ($telefono == “”) die(“No se ingresado el TELEFONO de la Empresa.”);
if ($contacto == “”) die(“No se ingresado la PERSONA DE CONTACTO de la Empresa.”);
if ($periodo == “”) die(“No se ingresado el PERIODO DE PAGO de la Empresa.”);
require(“conectar.php”);
$consulta = “insert into empresas (nombre, tipo, img, descripcion, domicilio, telefono, email, web, contacto, periodo) values (\”$nombre\”, \”$tipo\”, \”$archivo_name\”, \”$descripcion\”, \”$domicilio\”, \”$telefono\”, \”$email\”,\”$web\”,\”$contacto\”,\”$periodo\”);”;
$cons = mysql_query($consulta) or die(“Error al realizar la consulta”);
if (!($cons)){
printf(‘
No se pudo completar la petición. Volver.
‘);
} else {
printf(‘
Empresa agregada con éxito a la base de datosVolver.
‘);
}
?>[/PHP]
El script de la base de datos sigue funcionando a la perfección… con eso no hay problema… pero quiero que funcione el Upload también….
Espero que me puedan ayudar… muchas gracias..
Facundo…
He leído tu artículo y me parece muy bueno pero yo lo he probado y encuentro un problema. Si subes un archivo con el nombre imagen.jpg por primera vez no hay problema. Ahora bien, si subes otro archivo (distinto) con el nombre imagen.jpg entonces te lo sustituye por el anterior y no te avisa que ya existe. ¿Cómo solucionar este problema?
man, eso tenés que manejarlo con file system, antes de subir el archivo, te fijas que si no existe, y si existe das un mensaje y anulas la operacion o lo que quieras. fijate que hay mucha documentacion respecto a este tema, usa el google.
saludos
Lo que deberias hacer es no subir el nombre del archivo tal cual si no usar un serial number o usar la identity del registro correspondiente en la bd
hola que tal, alguien sabe como modificar los permisos del directorio para poder subir mis archivos??
[email protected]
Gracias!!
He implementado el código de upload en una web que estoy haciendo. El upload me funciona muy bien, pero tengo un problema, y es que cuando subo un archivo, este coge el nombre que tiene (p.e. imagen.jpg). Si decido subir otro archivo que tiene el mismo nombre, entonces me lo cambia por el ya existente y no me avisa si ya existe ese archivo, o lo que sería más cómodo, que cuando suba un archivo, no se duplique el nombre y le de uno de forma aleatoria. ¿Cómo puedo hacer esto? Gracias
que bueno que existan tutoriales tan bien explicados…. este codigo me sirvirá mucho.. gracias.
Me da un error y creo que es porque mi servidor no permite subir archivos.
Como puedo saber si puede hacerlo?
me gusta mucho este script, pero tengo que mirar como hacer que en vez de la primera cadena despues del punto mire la ultima, pero eso ya es problema mio y de mi poca idea de programacion ^^
Buenas, he retocado un poco el script después de todas las modificaciones que he visto a lo largo del foro y haciendole algunos añadidos. La idea es que se puedan subir archivos de cualquier tipo, añadiendo título y una descripción del archivo, éstos se almacenan en una base de datos(llamada archivos) para después mostrarlos en una página de documentos ordenados por fecha y que puedan ser descargados.
El código es un poco chapucero, pero funciona así que espero que me den algunos consejillos para mejorarlo 😉
Código subir.htm (formulario para enviar archivos)
Código upload.php (procesa el formulario)
Código docs. php (muestra los documentos)
Y eso es todo. Cómo veis es una cutrería, pero funciona. Si a alguno os sirve pues mejor que mejor y, para los más expertos, si pueden echarme una mano para mejorarlo, siempre es de agradecer
necesito saber como asigarle un nombre de archivo ya existente al input
El problema puede ser que cuando subes el archivo este tiene como dueño y grupo el usuario WWW, y lo subes a una carpeta /tmp con otro dueño y al intentar moverlo a tu sitio da error de permisos ya que no estas autorizado a mover o copiar de una carpeta a la otros.. ufff no sé si me explique bien
lo he probado, pero solo me permite subir archivos de menos de un mega, si es de mayor tamaño pues no lo sube, se demora y todo pero al final no lo sube
que puede estar mal??
Pues en el archivo subir.htm en la siguiente línea:
[COLOR=”Red”][/COLOR]
Tines como máximo archvios de 1Mb, cambialo al tamaño máximo que desees y si aún así no funciona, prueba a configurar el tamaño máximo de archivos del php.ini
me ayudo mucho tu articulo, muchas gracias
Hola gracias, estoy empezando en esto del desarrollo web y en mi trabajo me pidieron una opcion que permita subir fotos directamente a la pagina, me podrian ayudar con esto..espero que si, les agradezco
Tengo un problema, tengo el script un poco modificado y me funciona a la perfeccion pero el problema es cuando trato de acceder a la foto desde la URL, por ejemplo si quiero verla en w ww.servidor.com/fotos/foto1.jpg me sale que no tengo el permiso suficiente para poder verla,
Forbidden
You don’t have permission to access /fotos/foto1.jpg on this server.
lo mismo me pasa si intento incluir esa foto en una pagina por medio de
Si entro al panel de control del servidor que uso (pandela.com) reviso en l carpeta que lmacena las fotos y estas no me parecen con los permisos necesarios con lo cual tengo que darselos yo manualmente.
Ahora lo que yo quiero es que al subir la foto desde el scrip, automaicamente me la deje con los permisos necesarios para ser visualizada por cualquier usuario, como se hace eso??, mi problema es problema de script o de configuracion del servidor??
si alguien puede ayudarme y orientarme estaria agradecido.
Saludos
esta muy bien solo que no puedo hacer lo de las carpetas yo hice lo siguiente en un sitio del wamp5 www cree una carpeta sellama uenic 2 luego cree una carpeta que sellama Archivos y elabore una sola pagina que sellama subir que contiene el formulario del boton examinar y el script
pero en el codigo html le falta el codigo de un boton q diga enviar sino como va a cargar si el codigo no se carga solo
Muchas gracias amigo es justo lo que andaba buscando le he modificado algunas cosillas para que se ajusten en mi caso y exclui el uso de la base de datos XD por dos razones, la primera me daba un error (creo que es de mi host) y la segunda porque no necesito de la base de datos ya que solo necesito subir el archivo y dar el link al uploader (algo asi como rapidshare etc..) de cualqueir forma tu codigo me aclaro un par de dudas y me sirvio de mucho para lograrlo. Gracias.
Creo que tu problema es de configuración del servidor
hola amigos, alguien q me pueda ayudar a resolver el problema de cargar archivo desde un formulario ami servidor.
espero q me ayuden.
Warning: move_uploaded_file(../imagenes/marcas/maxterhosting_08.gif): failed to open stream: Permission denied in /home/tgcistro/public_html/sigecoweb/webmaster/mprocesarm.php on line 35
Warning: move_uploaded_file(): Unable to move ‘/tmp/phpIHQ6Ar’ to ‘../imagenes/marcas/maxterhosting_08.gif’ in /home/tgcistro/public_html/sigecoweb/webmaster/mprocesarm.php on line 35
esto es el codigo q he realizado…
< ?php
$ruta_logo_name = $HTTP_POST_FILES[‘ruta_logo’][‘name’];
$ruta_logo_type = $HTTP_POST_FILES[‘ruta_logo’][‘type’];
$ruta_logo_size = $HTTP_POST_FILES[‘ruta_logo’][‘size’];
$ruta_logo= $HTTP_POST_FILES[‘ruta_logo’][‘tmp_name’];
$newimage = sprintf (“/imagenes/marcas/%s”, $ruta_logo_name);
$cadena = “/home/tgcistro/public_html/sigecoweb”.$newimage;
$link=conectarse();
if (!(mysql_query(“insert into marca (nombre,logo,url,id_empresa) values (‘$nombre’,’$newimage’,’$url’,’$id_empresa’)”,$link)))
{
echo “error :”.mysql_error();
exit();
}
if (!((strpos($ruta_logo_type, “gif”) || strpos($ruta_logo_type, “jpeg”)) && ($ruta_logo_size < 100000))) {
echo “La extensión o el tamaño de los archivos no es correcta.
“;
}else{
if (move_uploaded_file($ruta_logo, $cadena)){
echo “El archivo ha sido cargado correctamente.”;
}else{
echo “Ocurrió algún error al subir el fichero. No pudo guardarse.”;
}
}
gracias …
No va este codigo lo probe reparece un error if(!copy($archivo, “archivos/”.$archivo_name)) que le falta cerrar un ) y sigue sin ir el explode no me explora el archivo.
Interesante, pero que pasa cuando el archivo tiene puntos en el medio, antes de la extension?
// http://www.top-keywords.com.ar //
perdon, postie ese mensaje desde la pagina maestrosdelweb, no se como llegue a este foro, mi comentario anterior fue sin leer todos estos posts.
Quisiera saber como hago para que que comprobara las extenciones gif,jpeg y jpg tambien ?
// http://www.ociovirtual.com.ve //
Hola quisiera saber como hago para que solo se puedan subir imagenis de cierto tamaño, osea que la imagen no se pueda subir si no es del tamaño que yo especifique
Si man tabien la explicacion he chevre man …
espero que funcione tu codigo
esta parte se asemeja a lo que estoy buscando, me podrian ayudar, resulta que yo tengo una tabla llamada cursos con los siguientes campos id,nom_curso, sencilla..
resulta que cuando yo creo un curso quiera tambien crear una carpeta con el id o nombre del curso para despues cuando vaya a subir archivos al sitio pueda guardarla sobre el curso requeridos, es decir que cada curso tenga su carpeta donde se guardaran sus respectivos archivos, alguien me podria colaborar con alguna idea al respecto se los agradecería de corazon
Agradezco de antemano la colaboracion prestada
Sabe alguien cuanto es el maximo valor para upload_max_filesize ???
Gracias, estaba teniendo problemas con el upload de un archivo, pero con este tutorial lo he podido resolver
Se debe usar la funcion move_uploaded_file() en lugar del Copy()
La diferencia es que copy no borra el temporal del servidor. Por más que el server luego lo borre, por ética debe usarse la funcion creada para tal fin.
Saludos.
Una consulta, tengo un servidor corriendo sobre linux red hat enterprise y mi problema es que me deja subir solo archivos menores a 500K aprox, ya configure el php.ini para que acepte hasta 5M pero nada, cuando se supone debe hacer el upload aparece como si no encontrara la pagina, Uds me podrian decir que puede estar saliendo mal? Gracias por su ayuda
esta muy bueno, pero se utiliza el mismo metodo para subir mas de un archivo desde el mismo formulario?
amigo puedes desirme en q programa escribo el script del php,
por ejemplo el de html es en pront page o block de notas con extencion.html y el de php en donde lo escribo??
[COLOR=”Blue”]Cualquier editor de texto te sirve para eso, lo unico que haces es guardar con extensión.php[/COLOR]
quisiera subir un texto escrito en un formulario y enviarlo al servidor de mi web, que lo transforme en un archivo ejemplo.txt para luego hacerle un include desde un sector desde una página para que se vea.
muchas gracias
Yo lo hecho y no funciona, y no es por tema de permisos, es muy raro.
arto rasca el upload.. ni siquiwra explicas la configuracion de apache.. o el servidor en cuestion. y parametros de seguridad.. la idea es enseñar peor bien.
Bueno para que no le pase a nadie :), tenia un upload que restringuia por el tipo de archivo que se queria cargar , como por lo general utilizo mozila este upload funcioaba de las mil maravillas pero por una casualidad lo probe en IE y los formatos jpg no me funcionaban asi tambien los rtf no los podia cargar y no sabia por que hasta que buscando y buscando ley que los tipos de archivo los navegadores los reconocen de forma distinta.
osea que jpg doc rtf gif en IE es :
$_FILES[‘fichero’][‘type’]==”image/pjpeg”
$_FILES[‘fichero’][‘type’]==”application/msword”
$_FILES[‘fichero’][‘type’]==”image/gif”
para mozila es :
$_FILES[‘fichero’][‘type’]==”image/jpeg”
$_FILES[‘fichero’][‘type’]==”text/richtext”
$_FILES[‘fichero’][‘type’]==”application/msword”
$_FILES[‘fichero’][‘type’]==”image/gif”
Bueno si quieren restringuir para los dos navegadores solo los restringuen por todo pues :
if($_FILES[‘fichero’][‘type’]==”application/msword” || $_FILES[‘fichero’][‘type’]==”application/pdf” || $_FILES[‘fichero’][‘type’]==”image/gif” || $_FILES[‘fichero’][‘type’]==”image/jpeg” || $_FILES[‘fichero’][‘type’]==”image/pjpeg” || $_FILES[‘fichero’][‘type’]==”text/richtext”)
espero que este sea un aporte maestros.
Atte.
Pegaso
Muchas gracias por el tutorial, de todas formas apesar de haber configurado el php.ini sigo teniendo problemas para subir los archivos. Espero poder solucionarlo.
salu2
y como puedo determinar esto
Pregunta… como obtuviste el valor que le asignas a $archivo_name?? sobre todo buen tutorial, muchisimas gracias
El tutorial esta buenicimo, debes seguir implementando mas tutoriales y veras que tu web sera el mas visitado gracias por la ayuda…!!!!!!!
Realmente es un excelente articulo, solo recalcarl en el codigo completo falta un parentesis ) al dinal del if para copiar el archivo
Realmente es un excelente articulo, solo recalcarl en el codigo completo falta un parentesis ) al dinal del if para copiar el archivo
que tan importamante es tener configurado este dato
Temporary directory for HTTP uploaded files
Es posible meter esto dentro de una funcion ?? eh hecho varios intentos pero no eh podido conseguirlo por su ayuda mil gracias !!
he usado el codigo para subir un archivo y poner su nombre en una base de datos, pero al hacer una pagina similar que me actualice, me da error, me dice que las variables del archivo no estan definidas..a que se puede deber?
lo anterior me ha satisfacido por completo al punto que lo he leido dos veces
Mí consulta es como puedo hacer algo similar a esto peor con fotos es decir subo la descripción de una foto a una base de datos y la foto en una carpeta del servidor
Lo e echo pero no me resulta si algien me puede ayudar agradecido
creo que le falta el boton submit al formulario
Muy buen script, tenia ya rato buscando algo asi, muy bien comentado y una excelente retroalimentación. Felicidades!. Saludos desde Caracas – Venezuela.
Felicitaciones y muchas gracias por la claridad en sus explicaciones, me gustaria conocer como hago para subir archivos de mas de 100kb porque no me permite, gracias
Me ha parecido estraordinario.
Se puede cambiar el tamaño a 2, 3, 5 MB? o es recomendable no modificar el documento, pregunto porque de momento no tengo oportunidad de subirlo ami servidor ya que estoy en un ciber y eso cuesta mucha plata, pero teniendo la respuesta checaré en casa.
me parece bueno el aporte, pero quisiera saber como puedo validar el upload de imágenes de determinado tamaño
Gracias.
¿Alguien sabe como hacer para que cuando subas una imagen al servidor, con upload, esta tenga un nombre aleatorio y no pueda sustituir a otra ya existente?
ESTA MUY BIEN SOLO TE FALTA QUE AL TERMINAR DE SUBIR EL ARCHIVO AL SERVIDOR LO ENVIE A UN CORREO AUTOMATICAMENTE
muy interesante los comentarios
Gracias, fuiste de gran ayuda..
Gracias!
creo que puede ser que en la definicion de cadena te falta una barra para indicar donde se separa la carpeta de la imagen.
$cadena = “/home/tgcistro/public_html/sigecoweb”.$newimage;
seria:
$cadena = “/home/tgcistro/public_html/sigecoweb/”.$newimage;
No funciona bien el script.
No es tan sencillo al final de cuentas…
no hayo somo solucionar este error:
failed to open stream :…..
No sirve para nada,
Da errores, no se, antes de publicar una cosa pues ay k asegurarse k vaya.
que chafa script no sirve
Muchas gracias por esto, la verdad es que adaptandolo un poco me ha servido de mucho.
GRACIAS DE NUEVO
Muy bien amigo gracias,me funciona corectamente bien,si posoble podria explicar la creacion de un libro de visitas,saludos cordiales
la verdad no entendi nada xq no entiendo nada de php. alguien me puede explicar, mandar ejemplos,
msn: [email protected]
pregunta ¿sirve en geocities?
me da este error: failed to open stream: Permission denied , es solo cuestion de chmod???
gracias.
a mi me dice lo mismo
que sera
me da este error: failed to open stream: Permission denied , es solo cuestion de chmod???
menuda escoria de codigo
se supone que esto hace uploads , menuda chapuza de mierda
Lo que quiere la gente es poder seleccionar varios archivos de una sola vez, no tener que seleccionarlos de uno en uno
Me parece una puta mierda que deberias de eliminar
Esto solo les vale a los principiantes
Me salvaron la vida…. Gracias
Solo una pregunta a ver si alguien me puede ayudar… si tengo una ruta especifica, se en donde se encuentra el archivo, por ejemplo c:\archivo\prueba.zip como le hago para dejarlo fijo?. Gracias
BUENA LA AYUDA… ME SIRVIÓ DE MUCHO PARA ACLARAR MIS CONCEPTOS
Buenas:
Me vale por ahora, pero necesito guardar el nombre, y sólo el nombre del archivo en una base de datos (lo digo porque me guarda todo el path de donde se encuentra el archivo, y eso no me vale). ¿Cómo depuro la entrada del archivo hasta quedarme con el nombre y la extension del archivo?Gracias
Hola, esta explicación me ayudo bastate con lo que tenia que hacer esta muuuuuyyyy buena
me sale este error: el formato de archivo no es valido, solo .zip, como que nunca esta entrando a if($extension[$num] == “zip”), y el archivo si es un .zip; otra duda, la variable $archivo_name la tengo que cachar con $_POST ???
Puse esta ayuda y no tardaron mucho y me hackearon el sitio, ahora por un contrato deley necesito subir imagenes y no se como hacerlo que sea seguro sin hackeadas pueden ayudarme
Santiago Borja
Ecuador
hola., disculpa, hice un cambio en tu codigo, para insertar imagenes, en lugar de zip coloqué jpg, JPG pero no me acepta las imagenes que tiene como extension JPG… y no entiendo porque… me podrias ayudar o dar algun dato?
Deseo conocer sobre las velocidades. Nose si 500K es mayor que 10,0 mbps
Hola, quisiera sabes como se hace algo al estilo de esta pagina http://www.subelo.net respondanme por mail a [email protected] o a traves de mi pagina http://www.tumodeo.com.ar
me aparece este error : Parse error: syntax error, unexpected ‘{‘ in /var/www/archivos/subir.php on line 18… soy novato en esto..que estoy haciendo mal?
Al parece como dice el mensaje solo es un error de sintaxis talves un punto y como que te falto poner al final de alguna asignacion de variables bueno espero haberte ayudado cualquier consulta haganlo en mi mail: [email protected]
a “el q + sabe”:
Si alguien pierde el tiempo y se toma la molestia de forma altruista de poner un código y explicarlo para compartir conocimentos, lo menos que puedes hacer es darle las gracias.
Y SI EL CÓDIGO SÓLO SUBE UN FICHERO, PUES YA QUE ERES EL QUE MÁS SABE, HACES TÚ LA RUTINA PARA SUBIR VARIOS FICHEROS.
Un respeto para el autor, que NO tiene obligación ninguna de hacer esto.
cuando subo un archivo al servidor me sale este error mi pregunta es si no tengo permiso para subir un archivo al servidor???
Warning: copy(/var/www/PRISMA/WEB/borrar.php) [function.copy]: failed to open stream: Permission denied
[…] Re: hay formularios para enviar archivos en javascript? Si con PHP y las sub�s a la web; con javascript no es posible, siquiera con ajax (que es una convinaci�n de tecnologias); te paso un sitio que tiene esto: Subir archivos con PHP […]