Estás en Inicio / Editorial / PHP
26.05.2002
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!
Califica esta nota:
Jorge Luis Martinez M
Encargado del sitio de Mis códigos en Jlmnetwork.com
Si eres nuevo en Maestros del Web y te agradan nuestras publicaciones, te invitamos a suscribirte a nuestro Feed.
Sindícanos en: Google Reader, Bloglines, My Yahoo o My MSN | ¿Qué es el Feed?
227 comentarios en total.
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: speedweb@airtel.net 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:
[php]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 jrbscorpion@radiofussionexplosiva.com
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:
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ña@sitio.com
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
———————————-
Mensaje Original por Cluster
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,
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 :
es un script simple pero no se en que me caigo…
agradecido.
PABLICIO
Unregistered 04-12-2003 11:47 AM
En php.net tienes un ejemplo completo, también en las FAQ’s del foro PHP de forosdelweb.com
Te dejo links:
El manual oficial de PHP sección “upload HTTP”:
http://www.php.net/manual/en/features.file-upload.php
(incluye las técnicas de multiple upload que preguntan algunos y las directivas de configuración de PHP que ha de tener habilitadas).
FAQ’s foro PHP:
(para archivos múltiples .. usa $HTTP_POST_FILES hay otra FAQ más sobre el tema .. pero usa variables globales como este tutorial).
http://www.forosdelweb.com/showthread.php?postid=296636#post296636
Un saludo,
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
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 seg_remache@hotmail.com
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 atx_forever@yahoo.com.ar
saludos
Si deseas subir varios archivos a la vez solo tienes que manejar el textfile como un vector, aqui tienes un ejemplo
| Principal: |
Para cargar o Adjuntar Imagenes y otros archivos
Imagen 1:
Imagen 2:
Imagen 1:
Imagen 2:
**************************************************
//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 “
“;
$confirmar2 =”Su+tamaño+es:+$archivo_size+bytes”;
echo “
$confirmar2
“;
echo “
“;
}
}
if (($archivo != “none”))
{}
else
{ $error1 = “No+ha+podido+transferirse+el+fichero”;
echo “
“;
$error2 = “su+tamaño+no+puede+exceder+de+$archivo+bytes”;
echo “
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 - geq@cqsoft.com.ar
Mensaje Original por Unregistered
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
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:
LimitRequestBody
(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
Mensaje Original por ro0x
y los permisos??
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.
pisote@mixmail.com
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:
*********************************
****************************************
Y luego el php que procesa la imagen enviada a traves del formulario:
****************************************
< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
$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”;
}
?>
************************************
1 trackbacks en total.
Maestros del Web es el punto de encuentro para los entusiastas de la red.
Creative Commons by-nc-sa 3.0 | Política de Privacidad | CMS: Wordpress