Foros del Web » Programando para Internet » PHP »

Uploader Ayuda

Estas en el tema de Uploader Ayuda en el foro de PHP en Foros del Web. Hola!!! encontre este script en esta misma pagina, y quería agregar formatos para que puedan ser subidos pero no se como hacer.... probe agregando esto ...
  #1 (permalink)  
Antiguo 22/10/2005, 19:01
 
Fecha de Ingreso: julio-2004
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
Uploader Ayuda

Hola!!!
encontre este script en esta misma pagina, y quería agregar formatos para que puedan ser subidos pero no se como hacer.... probe agregando esto pero no pude hacer que funcionase strpos($tipo_archivo, "doc")
alguien me aydua???
saludos!!

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

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

Última edición por venetus; 23/10/2005 a las 20:35
  #2 (permalink)  
Antiguo 22/10/2005, 20:00
Avatar de Nefertiter  
Fecha de Ingreso: enero-2003
Ubicación: Rosario
Mensajes: 1.316
Antigüedad: 14 años, 11 meses
Puntos: 8
yo que vos usaria ereg('gif',$tipo_archivo) en vez de strpos

Suerte
  #3 (permalink)  
Antiguo 22/10/2005, 22:26
 
Fecha de Ingreso: julio-2004
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
Modifique lo que me dijiste pero ahora me dice que "Ocurrió algún error al subir el fichero. No pudo guardarse." Esto pasa con los pdf y con los .exe....
como lo soluciono????
saludos!!
Código PHP:
<?
if (!((ereg('gif',$nombre_archivo)|| ereg('jpeg',$nombre_archivo)|| ereg('exe',$nombre_archivo)|| ereg('pdf',$nombre_archivo) || ereg('doc',$nombre_archivo)) && ($tamano_archivo 10000000)))
?>
Gracias!!

Última edición por venetus; 23/10/2005 a las 20:36
  #4 (permalink)  
Antiguo 23/10/2005, 02:03
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
... es raro que llegues a ese punto con los PDF. Es probable que suceda con los .exe ya que tu servidor podría impedir subieras ese tipo de archivo... en principio no es recomendable. ¿con los otros tipos de archivo no hay ese comportamiento??.

Fuera de eso, tu validación es erronea. Estás buscando en todo el nombre del archivo esas coincidencias (gif, jpg, etc...), ve qué un archivo de nombre --por ejemplo-- exentrico.loquesea pasaría esa validación.

Además, según se ve es lo que pretendes hacer, una validación por extención no es segura, tienes que hacerlo por el tipo de archivo y sugiero una busqueda exácta de tal.

http://www.forosdelweb.com/showpost....08&postcount=7 << dejé una validación donde permitiría subir archivos .pdf, .jpg y .gif. Ve los comentarios que hago (y se repiten constantemente). Solo faltaría agregar que el MIME-TYPE de un .doc es "application/msword". Ve la FAQ sobre cómo subir archivos (creo es la #12).

Un saludo!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 23/10/2005, 12:05
 
Fecha de Ingreso: julio-2004
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
gracias por la ayuda!!
muy bueno el f.a.q no lo habia visto....
pero igualmente no puedo hacer andar el script, asi es como esta actualmente despues de las modificaciones.
$tipo_archivo = $HTTP_POST_FILES['userfile']['type'];
Código PHP:
<?
if (($tipo_archivo !="image/gif" && $tipo_archivo !="image/jpeg" && $tipo_archivo !="application/pdf" && $tipo_archivo !="application/msword")
 && (
$tamano_archivo 10000000)) {
    echo 
"<br><big><big>La extensión o el tamaño de los archivos no es correcta.</big></big> <br><br><table><tr><td><li>Se permiten archivos .gif , .jpg , .pdf y .doc<br><li>se permiten archivos de 100 Kb máximo.</td></tr></table>";
}else{
    if (
move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'],$directorio.$nombre_archivo)){
       echo 
"<big><big>El archivo ha sido cargado correctamente.</big></big>";
?>
Algunas imagenes me las deja subir otras no, por ejemplo las imagenes .gif, hay algunas que me deja subir y otras que no....
lo que hice despues fue hacer un "echo $tipo_archivo" y note que cuando me da error al subir archivos esta variable esta vacia, es como que no reconoce el tipo de archivo mime que es....
alguien tiene alguna idea???
saludos!

Última edición por venetus; 23/10/2005 a las 20:37
  #6 (permalink)  
Antiguo 23/10/2005, 19:57
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Seguro que no es problema del tamaño del archivo??. Como qu eesa condicional esta el revés ¿no crees?; devolveria TRUE cuando es mejor de la cantidad que colocaste... y si te devuelve TRUE estás mostrando el mensaje de error...

Eso de que la variable te llegue vacia... ¿dónde haces la impresión?. ¿sucede siempre con un mismo archivo ó solo "algunas veces"?...

PD: Procura ocupar las etiquetas correspondientes para el código... se lee mucho mejor.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #7 (permalink)  
Antiguo 23/10/2005, 20:01
 
Fecha de Ingreso: julio-2004
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
esta al revez el condicional??
si me deja subir archivos, pero no todos....
hago la impresion al principio del script y siempre que se puede subir me muestra el tipo de archivo mime, osea me pone que es image/jpeg o lo que sea, pero hay veces que trato de subir una imagen y da error y no aparece el tipo de archivo, la impresion de la variable la hago al principio asi que siempre tendria que mostrarse....
saludos y gracias por la ayuda!!
  #8 (permalink)  
Antiguo 23/10/2005, 20:10
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Cita:
esta al revez el condicional??
Según lo veo...
Si tu condicional es $tamano_archivo < 10000000 va a ser cierta cuando el tamaño de los archivos sean menores que esa cantidad (que no son 10Kb), pero para cuando se cumple esa condición tú estás mostrando: "se permiten archivos de 100 Kb máximo."... ¿no está al reves?.
Cita:
hay veces que trato de subir una imagen y da error y no aparece el tipo de archivo
... daz a entender la variable aparece vacia cuando te "da error". ¿qué error?, ¿qué tan "al principio"?... muestra tu código.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #9 (permalink)  
Antiguo 23/10/2005, 20:17
 
Fecha de Ingreso: julio-2004
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
Aca esta todo el codigo...
Lo que hace es tomar las variables de un formulario
y despues sube los datos que tomo de los archivos a una base de datos....
Marque con negrita cuando imprimo el tipo de los archivos...
gracias por la ayuda!!! me esta volviendo loco este script
Código PHP:
<html>

<head>
  </head>

<body>
    <?
    $connection
=mysql_connect("localhost","------","------"//abro conexion mysql
or die ("No funciono la conexion");

$db mysql_select_db("proyecto",$connection//conecto con la base de datos
or die ("Fallo conexion con base de datos");

                       
//tomo el valor de un elemento de tipo texto del formulario
$cadenatexto $_POST["cadenatexto"];
$directorio "c:/appserv/www/archivos/"//directorio donde se guardan los archivos


$archivo_tipo $_POST["archivo_tipo"];
$nombre $_POST["nombre"];

$nombre_archivo $HTTP_POST_FILES['userfile']['name'];
$tipo_archivo $HTTP_POST_FILES['userfile']['type'];
$tamano_archivo $HTTP_POST_FILES['userfile']['size'];
//compruebo si las características del archivo son las que deseo
$nombre_archivo ereg_replace(" """$nombre_archivo); //borra espacios libres en nombre de archivo

[B]echo "Tipo de archivo: ".$tipo_archivo."<BR>";[/B]

if ((
$tipo_archivo !="image/gif" && $tipo_archivo !="image/jpeg" && $tipo_archivo !="application/pdf" && $tipo_archivo !="image/pjpeg" && $tipo_archivo !="application/msword")
 && (
$tamano_archivo 10000000)) {
    echo 
"<br><big><big>La extensión o el tamaño de los archivos no es correcta.</big></big> <br><br><table><tr><td><li>Se permiten archivos .gif , .jpg , .pdf y .doc<br><li>se permiten archivos de 100 Kb máximo.</td></tr></table>";
}else{
    if (
move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'],$directorio.$nombre_archivo)){
       echo 
"<big><big>El archivo ha sido cargado correctamente.</big></big>";

        
$query "INSERT INTO archivos (nombre,tipo,tamano,descripcion,nombrearchivo)
        VALUES ('$nombre','$archivo_tipo','$tamano_archivo','$cadenatexto','$nombre_archivo')"
;
         
$result mysql_query($query)
          or die (
"<BR>No pudo agregar las cosas a la base de datos"); //agrego los datos obtenidos

     
echo "<br><br>";
echo 
"<TABLE><TR><TD><b>Nombre</b></TD><TD>".$nombre."</TD></TR>";
echo 
"<TR><TD><b>Tipo de archivo</b></TD><TD>".$tipo_archivo."</TD></TR>";
echo 
"<TR><TD><b>Tamaño de archivo</b></TD><TD>".$tamano_archivo."</TD></TR>";
echo 
"<TR><TD><b>Nombre de archivo</b></TD><TD>".$nombre_archivo."</TD></TR></TABLE>";

    }else{
       echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse.";
    }
}



 
?>
<br><br><br><br><br><A href="index.php"><div align="center">Inicio</div></a><A href="mostrararchivos.php"><div align="center">Base de datos</div></a>
</body>

</html>

Última edición por venetus; 23/10/2005 a las 20:37
  #10 (permalink)  
Antiguo 23/10/2005, 20:28
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
... utiliza la función is_uploaded_file() antes de intentar extraer las propiedades del archivo (lo menciona la FAQ que dije en un inicio). Puede ser que el archivo no haya sido cargado (quizá por alguna configuración del servidor).

Repito: mencionaste que te "da error"... ¿cuál?, ¿en dónde?.

E insistir en que se lee mejor si ocupas las etiquetas corresponientes (ve mi firma)... comenta en vez de usar "negritas".
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #11 (permalink)  
Antiguo 23/10/2005, 23:28
 
Fecha de Ingreso: julio-2004
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
El error que me da cuando quiero ,por ejemplo, subir un pdf es este "Ocurrió algún error al subir el fichero. No pudo guardarse."
ya arregle lo de las etiquetas, ahora se lee mucho mejor, no conocia esos tags...
y lo de comentar tenes razon, es que soy bastante nuevo en esto de la programacion y recien me estoy acostumbrando... vengo bastante bien con lo que quiero lograr hacer excepto por subir los archivos que se me esta complicando mucho....
saludos y gracias!!!
  #12 (permalink)  
Antiguo 24/10/2005, 03:27
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Cita:
El error que me da cuando quiero ,por ejemplo, subir un pdf es este "Ocurrió algún error al subir el fichero. No pudo guardarse."
Ok, entonces con eso sabes que la función move_uploaded_file() no pudo ejecutarse. Ya te había dicho antes hicieras un is_uploaded_file().... mencioné que "tu dimensión" era incorrecta (aunque dije 10 cuando son 100 , la idea es la misma); 1000 (en realidad 1024) bytes es un Kbyte por lo que 100Kb son 100000 bytes... porque el tamaño lo recibes en bytes. Por último, la validación es (traducida al español):
Código:
SI((no es archivo permitido) Ó (el tamaño exéde los 100KB)) {
      mostramos mensaje de error
}
... no es "Y" sino "O"... por ahí hay otro error más...

Prueba con:
Código PHP:
<html>

<head>
  </head>

<body>
    <?
    $connection
=mysql_connect("localhost","------","------"//abro conexion mysql
or die ("No funciono la conexion");

$db mysql_select_db("proyecto",$connection//conecto con la base de datos
or die ("Fallo conexion con base de datos");

                       
//tomo el valor de un elemento de tipo texto del formulario
$cadenatexto $_POST["cadenatexto"];

$directorio "c:/appserv/www/archivos/"//directorio donde se guardan los archivos


$archivo_tipo $_POST["archivo_tipo"];
$nombre $_POST["nombre"];

if(!
is_uploaded_file($_FILES['userfile']['tmp_name'])
      echo 
"No se pudo cargar el archivo";
else {
$nombre_archivo $HTTP_POST_FILES['userfile']['name'];
$tipo_archivo $HTTP_POST_FILES['userfile']['type'];
$tamano_archivo $HTTP_POST_FILES['userfile']['size'];
//compruebo si las características del archivo son las que deseo
$nombre_archivo ereg_replace(" """$nombre_archivo); //borra espacios libres en nombre de archivo

echo "Tipo de archivo: ".$tipo_archivo."<BR>";

if ((
$tipo_archivo !="image/gif" && $tipo_archivo !="image/jpeg" && $tipo_archivo!="application/pdf" && $tipo_archivo !="image/pjpeg" && $tipo_archivo !="application/msword")
|| (
$tamano_archivo 100000)) { // cambié el tamaño y coloco ||
    
echo "<br><big><big>La extensión o el tamaño de los archivos no es correcta.</big></big> <br><br><table><tr><td><li>Se permiten archivos .gif , .jpg , .pdf y .doc<br><li>se permiten archivos de 100 Kb máximo.</td></tr></table>";
}else{
    if (
move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'],$directorio.$nombre_archivo)){
       echo 
"<big><big>El archivo ha sido cargado correctamente.</big></big>";

        
$query "INSERT INTO archivos (nombre,tipo,tamano,descripcion,nombrearchivo)
        VALUES ('$nombre','$archivo_tipo','$tamano_archivo','$cadenatexto','$nombre_archivo')"
;
         
$result mysql_query($query)
          or die (
"<BR>No pudo agregar las cosas a la base de datos"); //agrego los datos obtenidos

     
echo "<br><br>";
echo 
"<TABLE><TR><TD><b>Nombre</b></TD><TD>".$nombre."</TD></TR>";
echo 
"<TR><TD><b>Tipo de archivo</b></TD><TD>".$tipo_archivo."</TD></TR>";
echo 
"<TR><TD><b>Tamaño de archivo</b></TD><TD>".$tamano_archivo."</TD></TR>";
echo 
"<TR><TD><b>Nombre de archivo</b></TD><TD>".$nombre_archivo."</TD></TR></TABLE>";

    }else{
       echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse.";
    }
}
// por el else que agregué


?>
<br><br><br><br><br><A href="index.php"><div align="center">Inicio</div></a><A href="mostrararchivos.php"><div align="center">Base de datos</div></a>
</body>

</html>
... espero sirva. Si sale el mensaje de "No se pudo cargar el archivo" (que agregué) el problema podría estar en la configuración de tu servidor...

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 24/10/2005 a las 03:33
  #13 (permalink)  
Antiguo 24/10/2005, 10:05
 
Fecha de Ingreso: julio-2004
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
"No se pudo cargar el archivo", que puede estar mal configurado del servidor???
Mi php.ini esta asi:

; Whether to allow HTTP file uploads.
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
upload_max_filesize = 2M

post_max_size = 8M

Hay que cambiar algo mas para poder subir archivos (algo del apache??)????

Saludos!!!
y gracias!!
  #14 (permalink)  
Antiguo 25/10/2005, 07:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Creo que alguna vez usé dicha función "is_uploaded_file()" pero me falló también, .. es decir, el archivo estaba en el temporal (con su nombre temporal correcto) .. de hecho lo movía con move_uploaded_file() sin problemas (integro el archivo .. nada corrupto).

Sé que dicha función teóricamente hace lo que comentas .. pero no sé por qué (bug? .. sólo en windows? (así lo probé .. no lo ví en Linux)), no funciona correctamente al parecer, tendrían que hacer pruebas.

Verifiquen el archivo simplemente (ya sé que esto no asegura 100% que el archivo subió al servidor por completo) con:

Código PHP:
if (!empty($_FILES['userfile']['tmp_name'])){
move_uploaded_file(.....);
} else {
echo 
"error";

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:31.