Foros del Web » Programando para Internet » PHP »

Formulario subida de archivos

Estas en el tema de Formulario subida de archivos en el foro de PHP en Foros del Web. Buenas estoy programando un formulario para subir archivos al servidor, pero le he dado mil vueltas y no veo el fallo. El codigo es este: ...
  #1 (permalink)  
Antiguo 03/07/2015, 13:26
 
Fecha de Ingreso: julio-2015
Mensajes: 2
Antigüedad: 9 años, 4 meses
Puntos: 0
Exclamación Formulario subida de archivos

Buenas estoy programando un formulario para subir archivos al servidor, pero le he dado mil vueltas y no veo el fallo. El codigo es este:
Código PHP:
<?
//datos del arhivo
$nombre_archivo $HTTP_POST_FILES['archivo']['name'];
$tipo_archivo $HTTP_POST_FILES['archivo']['type'];
$tamano_archivo $HTTP_POST_FILES['archivo']['size'];
//compruebo si la extension es correcta
if (!((strpos($tipo_archivo"pdf") ))) {
    echo 
"<p>La extension <b>$tipo_archivo</b> no es correcta.</p>";
    echo 
"<p>Solo pueden subir archivos con extension .pdf";
}else{
//compruebo si el tamaño es correcto
if (!($tamano_archivo 600000)) {
    echo 
"<p>El tamño del archivo debe ser inferior a <b>600KB</b> (<b>600Kb</
b>).</p>"
;
}else{
    if (
move_uploaded_file($HTTP_POST_FILES['archivo']['tmp_name'], $nombre_archivo)){
echo 
"<p>El archivo subido correctamente</p>";
    }else{
       echo 
"<p>Error al subir el archivo. Intenta subirlo nueva
mente</p>"
;
    }
}
}
?>
Y Este el formulario HTML

Código HTML:
<html>
<form enctype="multipart/form-data" action="http://127.0.0.1/upload.php" method="POST">

    Enviar este archivo: <input name="archivo" type="file" />
    <input type="submit" value="Send File" />
</form>
</html> 
El problema es que siempre me dice que la extension es incorrecta, obviamente subiendo pdf, y el echo de la variable $tipo_archivo no imprime nada. Todo apunta como si no se enviara bien el archivo. Ya se que es vulnerable pero aun no quiero complicar el codigo y es solo para uso local.
Les agradezco su ayuda
Un saludo
  #2 (permalink)  
Antiguo 03/07/2015, 14:06
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Formulario subida de archivos

Bienvenido a FDW.

De plano, te aconsejo dejar de usar la variable obsoleta $HTTP_POST_FILES y empezar a usar $_FILES. También deberías de empezar a poner el nombre completo de la etiqueta de PHP que es <?php.

Por otro lado, ¿por qué envuelves el resultado de la función strpos entre tantos paréntesis? Debes saber también que dicha función puede devolver 0 como resultado, lo cual podrías ser erróneamente interpretado como false y, por ende, nunca se ingresaría al otro bloque de la condición. Esto es lo que dice el manual oficial al respecto; léelo y corrige lo que has hecho.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 03/07/2015, 14:14
 
Fecha de Ingreso: julio-2015
Mensajes: 2
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Formulario subida de archivos

Cita:
Iniciado por Alexis88 Ver Mensaje
Bienvenido a FDW.

De plano, te aconsejo dejar de usar la variable obsoleta $HTTP_POST_FILES y empezar a usar [URL="http://php.net/manual/es/reserved.variables.files.php"][inline]$_FILES[/inline][/URL]. También deberías de empezar a poner el nombre completo de la etiqueta de PHP que es <?php.

Por otro lado, ¿por qué envuelves el resultado de la función strpos entre tantos paréntesis? Debes saber también que dicha función puede devolver 0 como resultado, lo cual podrías ser erróneamente interpretado como false y, por ende, nunca se ingresaría al otro bloque de la condición. [URL="http://php.net/manual/es/function.strpos.php#refsect1-function.strpos-returnvalues"]Esto[/URL] es lo que dice el manual oficial al respecto; léelo y corrige lo que has hecho.

Saludos
Gracias por contestar, he probado a cambiar por la funcion mas nueva como me dijiste y a arreglar lo del strpos pero aun asi sigue sin funcionar. Parece omo si fuera el error mas arriba. Creo que el formulario esta bien pero parece que no envia el archivo correctamente ya que sigue sin imprimirme la variable $tipo_archivo que supongo que quiere decir que no se ha pasado el archivo como parametro.
Saludos
  #4 (permalink)  
Antiguo 03/07/2015, 14:21
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Formulario subida de archivos

¿Y en qué parte lo imprimes? ¿Puedes mostrarnos el código actualizado?
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 03/07/2015, 16:55
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Formulario subida de archivos

Tal vez debas usar stripos() para no hacer distinción entre mayúsculas y minúsculas; además, debes verificar el estado de error para saber qué hacer:

Código PHP:
Ver original
  1. $error = $_FILES['archivo']['error'];
  2. if(error == 0) {
  3.     // El archivo se subio correctamente, ahora sí revisa tipo y peos
  4. } else if($error == 4) {
  5.     // El usuario no seleccionó un archivo para enviar
  6. } else {
  7.    // Cualquier otro error
  8. }

Si quieres "ponerte guapo" considerando el resto de errores en tu script: http://php.net/manual/es/features.fi...oad.errors.php
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 05/07/2015, 14:41
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 9 meses
Puntos: 69
Respuesta: Formulario subida de archivos

Y si en vez de usar

Código PHP:
Ver original
  1. $tipo_archivo = $HTTP_POST_FILES['archivo']['type'];

Usas

Código PHP:
Ver original
  1. $tipo_archivo = $_FILES['archivo']['name'];
  2. $tipo_archivo = strtolower($tipo_archivo);
  3. if (!strpos($tipo_archivo, ".pdf")) {
  4.     echo "<p>La extension <b>$tipo_archivo</b> no es correcta.</p>";
  5.     echo "<p>Solo pueden subir archivos con extension .pdf";
  6. }else{
  7. ...
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #7 (permalink)  
Antiguo 06/07/2015, 09:17
 
Fecha de Ingreso: julio-2015
Ubicación: Palma de Mallorca
Mensajes: 10
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Formulario subida de archivos

Hola,

Puedes usar esta expresión para comparar la extensión de archivo:

Código:
if (mb_strtolower(pathinfo($_FILES['archivo']['name'], PATHINFO_EXTENSION), "UTF-8") === "pdf") {
    // aquí va el resto del código
}
mb_strtolower te permitirá comparar archivos con caracteres multi-idiomáticos, mientras que pathinfo te permitirá extraer la extensión sin tener que preocuparte por el punto.

Usar strpos es tendente a falsos positivos porque un nombre de archivo como 'la guía de la cría del caracol.pdf.docx' te diría que el archivo es correcto, pero no lo sería.

Espero que esto te ayude :)

Saludos,
Julio

Etiquetas: subida, upload
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 21:39.