Upload html

Hola mi nombre es juan
te pido si me puedes ayudar te agradeceré mucho
tengo problemas con la opcion upload html de php
encontre en www.php.netmanuales/es un formulario para que los usuarios via web envien archivos al servidor mefiante el metodo post del formulario este en la etiqueta <form action= recibir.php> yo la mando a recibir.php
Este es el código del formulario para enviar archivos:
<html>
<head>
<title>Página nueva 1</title>
</head>
<body>
<FORM ENCTYPE="multipart/form-data" ACTION="recibe.php" METHOD=POST>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="100000">
Envía este archivo: <INPUT NAME="archivo" TYPE="file">
<INPUT TYPE="submit" VALUE="Envía Archivo">
</FORM>
</body>
</html>
Lo que sigue es el script recibe.php que es lo que llama el formulario mostrado de arriba, pero no tengo idea como usar la función copy de php lo he intentado de muchas formas pero no me sale este es lo que tengo creado en el script recibe.php:
<?php
if (!copy($archivo, $archivo_name.jpg)) {
print("copia fallada $file...<br>\n");
print "$archivo</br>";
print "$archivo_name</br>";
print "$archivo_type</br>";
print "$archivo_size";
}
?>
Los print los tengo para ver si funcionan las variables enviadas desde el formulario de arriba y esto es lo que me informa el apache al ejecutar recibir.php
---------------
Warning: Unable to open '\\php2' for reading: Unknown error in c:\archivos de programa\abriasoft\abria sql\apache\htdocs\proccom\recibe.php on line 2
copia fallada ...
\\php2
xx2.jpg
image/pjpeg
77503
----------
También rebice un error con respecto al tamaño del archivo, agrande este parámetro a 100Mb en el archivo php3.ini en el parámetro MAX_FILE_SIZE yo trabajo con el soft de abría para win32 bajo ambiente win 98 tengo montado php3 y php4 y la base de datos mysql
Te pido si me puedes echar una manito necesito que los usuarios a través del web puedan enviar archivos a una carpeta de mi servidor llamada planos te agradeceré si me corriges mi error o me mandas un script o un ejemplo mucho más gráfico de como funciona el copy en php esto es lo que se referente al copy:
int copy (string source, string dest)
Makes a copy of a file. Returns true if the copy succeeded, false otherwise. Example 1. Copy() example
if (!copy($file, $file.'.bak')) {
print ("failed to copy $file...<br>\n");
}
La verdad no entiendo la sintaxis, del copy
por lo que se el $file, corresponde al nombre del archivo a copiar, luego viene la ","
(¿Coma) qué es la que separa el archivo a copiar del nombre del archivo y de donde se copiará?
Desde ya gracias

3 Respuestas

Respuesta
1
Hace algunos meses tuve un problema similar. Intentaré explicarte como funciona esta historia.
El código HTML está bien, y el archivo se recibirá dentro de la variable $archivo al copiarlo, hasta ahí perfecto.
El tamaño máximo del archivo no importa en principio (por defecto PHP lo pone en 2 Mb) así que para subir la mayor parte de las cosas te sirve... además... (y no sé si es fallo de PHP) no te comprueba el tamañio del archivo hasta que ya está subido (por ejemplo, tienes un archivo de 3 Mb y hasta que haya subido los 2 Mb de límite no te presentará el error) todavía estoy buscando una solución a eso (como siempre aprovéchate de lo que otros hayan resuelto ya... la filosofía del Open Source, y comparte lo que ya tengas).
Los archivos subidos van a parar al directorio temporal que PHP tenga definido en php.ini. Por defecto es el directorio /tmp (busca uploaddir). En linux por defecto ya tienes el directorio /tmp creado. En Windows tendrás que crearte un directorio c:\tmp.
COPY necesita la ruta completa del archivo destino... o sea con un copy ($archivo, "c:\\apache\\htdocs\\upload.file") debería funcionar.
En resumen... puede fallar por:
- No tener directorio uploaddir asignado, o en su defecto, no tener un directorio tmp creado (siempre colgando de C:)
- No usar la doble barra \\ para separar directorios.
Si al recibir el archivo usar simplemente print $archivo y no te sale ningún nombre lo más probable es que no encuentre directorio temporal para grabarlo.
Hola gracias por tu valiosa ayuda mi problema es que no encuentra el directorio temporal y es debido a esto:
Tengo problemas para configurar el directorio temporal de almacenamiento en el archivo php3.ini esto es lo que pasa
yo trabajo con un soft que me permite montar el servidor apache, php3 y 4 . mysql todo de una vez es el abría es para win98, mi problema como anteriormente te contaba es que necesito que los usuarios suban archivos desde la web a mi servidor los srcipt están bien ya los he revisado me faltaba arreglar la sintaxis del copy, pero eso esta solucionado, ahora mi problema es este
En el archivo php3.ini que es donde se asigna los parámetro para php,
en la sección de directotios en esta:
;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
include_path = ; UNIX: "/path1:/path2" Windows: "\path1;\path2"
doc_root = ; the root of the php pages, used only if nonempty
user_dir = ; the directory under which php opens the script using /~username, used only if nonempty
upload_tmp_dir= ; temporary directory for HTTP uploaded files (will use system default if not specified)
upload_max_filesize = 50971520 ; 2 Meg default limit on file uploads
extension_dir = ./ ; directory in which the loadable extensions (modules) reside
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
El parametro upload_tmp_dir=c:\tmp\;
Estaba con un punto y coma (;) al inicio lo cual lo inhabilita, lo he habilitado quitándole el punto y coma, pero como no especifique directorio me asigno el directorio por defecto que es //php2 y se su pone esta en la raíz en mi caso en
c:php2 pero al buscarlo no figura (tengo habilitado mostrar todos los archivos en windows), entonces se me ocurrió crear esta carpeta en c:php2 pero mi gran sorpresa fue que al momento de ejecutar copiar.php el cual tiene un
print "$archivo"(para ver el dir temporal de almacenamiento); y me mostró el directorio temporal que resulto ser: ://php3
y si creo una carpeta php3 el temporal de php pasa a ser file://php4
a la final decidí asignarle un directorio temporal al php3.ini en parámetro
El parametro upload_tmp_dir=c:\tmp\; y mi gran sorpresa es que al hacer un
print "$archivo" (esta variable me entrega la ubicacion del directorio temporal) en copiar, me resulta lo siguiente el valor de "$archivo"=c:\\tmp\\php2 (con dos rayas)siendo que, la cree con una raya y ese es mi problema ya que esa direccion no es entendible para el sistema operativo y por lo cual no realiza la copia no se como sacar una de esas rayas o como asignar el directorio temporal de php a c:\temp\ y que al momento de hacer un print "$archivo"; me haga arroje esto c:\temp\,
si al php3.ini configuro el parametro upload_tmp_dir=c:tmp; (sin raya) no lo reconoce y asigna el directorio temporal a //php2
Si sabes como solucionar este problema por favor ayudame
espero me puedas echar una manito
la idea de estoy es transferir archivos de 8 a 10 megabyte de tamaño en una intranet no en internet de un modo amistoso para el usuario como lo ofrece el upload html de php si hay otra al ternativa mediante php por favor dime
como te explicaba esto esta orientado a una intranet local (un edificio)
Ups... pulsé donde no debía... y se me fue lo que ue había escrito... te lo repito por si no te ha llegado.
Los ficheros upload de php se copian en el directorio definido en upload_tmp_file del php.ini. PHP asigna un nombre temporal al fichero del formato phpxxxxxxxxxxxx, aunque desde php lo usamos con sus nombre real (guardado en $archivo).
Por lo tanto... ya que tienes creado un directorio tmp haz esta prueba:
- Comenta la línea de upload_tmp_dir, para que te asigne por defecto c:\tmp
- Vaciía el directorio tmp, ahí solo van a dar los datos de sesiones y temporales de PHP, por lo que no creoq ue tengads mucho más.
- Pruebna a subir un fichero, da igual que tu script te produzca error.
- Ve a ver el directorio c:\tmp y si tienes ahí un fichero con nombre phpxxxxxxxxx (phpLoQueSea) el upload de archivos va bien.
Si esta parte te ha fallado... (que sería muy raro) tendrás que revisar todos los parámetros del php.ini... puede que se te haya colado algo, o tengas que crear algún directorio.
Si no falla, el problema está en la copia.
Supongo que el directorio de destino del archivo lo crearás asignando el valor del directorio a una variable de cadena, por ejemplo $pathDestino = "c:\\destino\\dir". Las dos barras son necesarias ya que php utiliza un tratamiento de cadenas similar a C, C++, es decir... la \ es una caracter de control y si necesitas introducir en una cadena "\" tendrás que ponerlo doble.
Imagina que tienes el archivo en c:\tmp y tu directorio destino es c:\destino\dir...
La cadena a pasar al copy sería:
copy ($archivo, $pathDestino."\\".$NuevoNombre)
PathDestino ya te la había definido más arriba y NuevoNombre es una cadena con el nombre que le quieres asignar al archivo. Si quieres que mantenga el nombre que tiene elimina "\\". $NuevoNombre de la línea.
Problemas que puedes tener... por ejemplo usar la barra simple en la cdena de directorio destino \ o poner barra al final del nombre del directorio destino.
A ver si esto te sirve
Respuesta
1
Creo que el problema esta en que en la linea 2 de recibe.php usted escribe
if (!copy($archivo, $archivo_name.jpg)) {
y yo creo que debe ser:
if (!copy($archivo, $archivo_name.'.jpg')) {
como dice el ejemplo que pones más tarde.
de lo contrario puedes hacer esto:
<?php
if (is_uploaded_file($userfile)) {
copy($userfile, "/place/to/put/uploaded/file"); // o sea a un archivo
} else {
echo "Possible file upload attack: filename '$userfile'.";
}
/* ...or... */
move_uploaded_file($userfile, "/place/to/put/uploaded/file");
?>
Bueno espero que esto te ayude en algo, sino, por favor escribe otra vez si con lo que te envío todavía no resuelves.
Chao Raidell
Gracias por el dato referente a alcopy ya lo he solucionado ahora copio archivos de disco duro indicándolo donde esta y que archivo debe copiar sin problemas
Y sobre el upload html :
Ya descrubi mi problema pero no encuentro una solución, voy a abusar de tu buena voluntad te explico:
Tengo problemas para configurar el directorio temporal de almacenamiento en el archivo php3.ini esto es lo que pasa
yo trabajo con un soft que me permite montar el servidor apache, php3 y 4 . mysql todo de una vez, es el abría y es para win98, mi problema como anteriormente te contaba es que necesito que los usuarios suban archivos desde la web a mi servidor (la idea es transferir archivos de más o menos 8 a 9 megas en la intranet no en internet pero de un modo amistoso por eso upload html de php) los srcipt están bien ya los he revisado me faltaba arreglar la sintaxis del copy, pero eso esta solucionado gracias a ti, ahora mi problema es este
En el archivo php3.ini que es donde se asigna los parámetro para php,
en la sección de directotios en esta:
;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
include_path = ; UNIX: "/path1:/path2" Windows: "\path1;\path2"
doc_root = ; the root of the php pages, used only if nonempty
user_dir = ; the directory under which php opens the script using /~username, used only if nonempty
upload_tmp_dir= ; temporary directory for HTTP uploaded files (will use system default if not specified)
upload_max_filesize = 50971520 ; 2 Meg default limit on file uploads
extension_dir = ./ ; directory in which the loadable extensions (modules) reside
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
El parametro upload_tmp_dir=c:\tmp\;
Estaba con un punto y coma (;) al inicio lo cual lo inhabilita, lo he habilitado quitándole el punto y como, pero como no especifique directorio me asigno el directorio por defecto que es //php2 y se su pone esta en la raíz en mi caso en
c:php2 pero al buscarlo no figura (tengo habilitado mostrar todos los archivos en windows), entonces se me ocurrió crear esta carpeta en c:php2 pero mi gran sorpresa fue que al momento de ejecutar copiar.php ejecute un
print "$archivo"; y me mostró el directorio temporal que resulto ser: ://php3
y si creo una carpeta php3 el temporal de php pasa a ser file://php4
a la final decidí asignarle un directorio temporal al php3.ini en parámetro
El parametro upload_tmp_dir=c:\tmp\; y mi gran sorpresa es que al hacer un
print "$archivo" (esta variable me entrega la ubicacion del directorio temporal) en copiar, me resulta lo siguiente c:\\tmp\\php2 (con dos rayas)siendo que, la cree con una raya y ese es mi problema ya que esa direccion no es entendible para el sistema operativo y por lo cual no realiza la copiaa no se como sacar una de esas rayas o como asignar el directorio temporal de php a c:\temp\ y que al momento de hacer un print "$archivo"; me haga arroje esto c:\temp\,
si al php3.ini configuro el parametro upload_tmp_dir=c:tmp; (sin raya) no lo reconoce y asigna el directorio temporal a //php2
Si sabes como solucionar este problema por favor ayudame
espero me puedas echar una manito
Ya te respondí este mensaje pero no se que pasa que se me mantiene como mensaje nuevo, creo que seria bueno que finalizaras la pregunta y después si quieres preguntarme de nuevo me envías otra, disculpa las molestias
bueno en el mensaje anterior, por si no te llego, te agradecía por tus preguntas porque me siento muy útil.
También te respondía a to problema con lo siguiente:
El problema debe estar en que el path no lleva el backslash atrás pero si al inicio o sea:
upload_tmp_dir=c:\tmp;
Prueba así a ver
Porque incluso después busqué en mi php.ini y estaba así:
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
file_uploads = On ; Whether to allow HTTP file uploads
upload_tmp_dir = D:\PHP\uploadtemp ; temporary directory for HTTP uploaded files (will use system default if not specified)
upload_max_filesize = 2M ; Maximum allowed size for uploaded files
Claro encontraras algunas diferencias porque yo uso apache, php, mysql en d: e instalados por separado y IIS y Asp en c: que es en la pc servidor de prueba win 2000 adv server
porque mi sitio en realidad que es el de la Universidad de Cienfuegos, Cuba, esta en linux con apache que viene ya con un módulo incluido el php,
bueno espero no te moleste si ya recibiste este mensaje, pero quería estar seguro de haberte respondido a tu pregunta.
Chao Raidell
Gracias por tu ayuda si la verdad ya me habías respondido solo que yo te pregunte sobre lo mismo así que ingrese a la sección pedir una aclaración
Respuesta
1
Prueba las siguientes configuraciones en php.ini y dime si te funciona alguna:
upload_tmp_dir = /Windows/Temp/
upload_tmp_dir = \windows\temp
upload_tmp_dir = c:\Windows\Temp\
upload_tmp_dir = c:/Windows/Temp
upload_tmp_dir = "c:\Windows\Temp\"
upload_tmp_dir = "c:/Windows/Temp/"
Lo de después, o sea,
; temporary directory for HTTP uploaded files (will use system default if not specified)
O bien lo eliminas totalmente, o bien lo mantienes con el punto y coma delante.
Y sí, la mejora manera que conozco de hacer lo que me indicas es efectivamente con Upload de PHP, solo que yo lo haría en un servidor Linux, nunca en un Windows.
Suerte!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas