Foros del Web » Programando para Internet » PHP »

Problema con upload en web

Estas en el tema de Problema con upload en web en el foro de PHP en Foros del Web. Buenas... Ayer ya postee un mensaje en el que buscaba un upload para php. Bueno, lo encontré, lo metí en mi web y todo bien, ...
  #1 (permalink)  
Antiguo 07/07/2006, 08:05
 
Fecha de Ingreso: julio-2006
Mensajes: 24
Antigüedad: 11 años, 5 meses
Puntos: 0
Problema con upload en web

Buenas...

Ayer ya postee un mensaje en el que buscaba un upload para php.

Bueno, lo encontré, lo metí en mi web y todo bien, el problema es que cuando intento subir archivos de 60mb (Un ejemplo) la pag. se bloquea y no sube nada, sin embargo, si sube un archivo de 4mb si te deja.

Tengo configurado el script para que suba archivos de asta 300mb.

Os dejo el código:

Cita:
<?
//configuración
$carpeta = "archivos/" ;
?>
<form action="" method="post" enctype="multipart/form-data" name="form1">

<div align="center">
<input name="archivo" type="file" id="archivo">
<input name="enviar" type="submit" id="enviar" value="Enviar">

<br>
<br>
Tama&ntilde;o m&aacute;ximo del archivo, 300 MB </div>
</form>

<div align="center">
<?
if($enviar) {
if($archivo != "" ) {
if($archivo_size > 300000000) {
echo"el tamaño de archivo supera los 300MB";
}
else {
if(!copy($archivo, "$carpeta".$archivo_name))
{
echo "Error al copiar el archivo";
}
else
{
echo "El archivo se ha subido correctamente al servidor, muchas gracias";
}
}
}
else {
echo"Seleciona un archivo";
}
}
?>
Y luego, cuando subes un archivo, quiero que te de la url de la descarga, pero no consigo hacerlo xD (Soy novato en php).

-----------

La web es animespace.eu

Saludos.

Última edición por Conan_edogawa; 07/07/2006 a las 08:41
  #2 (permalink)  
Antiguo 07/07/2006, 08:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Es PHP quien impone tu restricción sobre el tamaño de los archivos que por tu script pueden pasar.

Revisa esta FAQ al respecto .. Si no tienes acceso a la configuración de PHP no podrás hacer nada al respecto.

http://www.forosdelweb.com/showpost....&postcount=146

Recuerda también que PHP impone restricciones sobre el tiempo de proceso del script en general .. es decir .. si esos 60MB se demoran más del tiempo prefijado (unos 30 segunos por defecto) en subir .. también tendrás problemas que podrías ajustar con:

set_time_limit(0)

Como veras en esa FAQ .. también hay límite de memoria que un script puede gestionar .. esto va directamente proporcional a los recursos (memoria) de tu servidor ..

Lamentablemente en PHP todo archivo que "sube" pasa y es tomado por PHP en el proceso de "upload" .. (no como en Perl por ejemplo que va en forma independiente o no tan dependiente de este)...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 07/07/2006, 10:26
 
Fecha de Ingreso: julio-2006
Mensajes: 24
Antigüedad: 11 años, 5 meses
Puntos: 0
Joder, pues ya lo puedo solucionar... por que como se me caiga el proyecto :(
  #4 (permalink)  
Antiguo 07/07/2006, 10:48
 
Fecha de Ingreso: julio-2006
Mensajes: 24
Antigüedad: 11 años, 5 meses
Puntos: 0
Finalmente, me voy a poner en contacto con el host y les preguntaré que es lo que pasa...

Ya os contaré.

Saludos.
  #5 (permalink)  
Antiguo 07/07/2006, 13:44
 
Fecha de Ingreso: julio-2006
Mensajes: 45
Antigüedad: 11 años, 5 meses
Puntos: 0
te van a decir que tienes un (no un son muchos) problema con el script que realmente es verda

hmm, esta funcionando ?
  #6 (permalink)  
Antiguo 07/07/2006, 13:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por exist
te van a decir que tienes un (no un son muchos) problema con el script que realmente es verda

hmm, esta funcionando ?
Cuando hagas un aviso de esas características .. por el bien de todos no está de más que indiques donde ves los problemas.

Por mi parte los que veo:

* No uso de los arrays superglobales: $_FILES (para los archivos) $_POST para el resto ...
* No usar copy() en su lugar usar move_uploaded_file()

Recomendaría (ya puestos) que modifiques tu código y lo adaptes:
http://www.php.net/manual/es/languag...s.external.php
http://www.php.net/manual/es/features.file-upload.php

Idenpendiente si el script funciona o no .. Las restricciones las impone PHP como antes he mencionado igualmente (dato a "negociar" si te aumentan esos valores con tu proveedor).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 07/07/2006, 14:17
 
Fecha de Ingreso: julio-2006
Mensajes: 45
Antigüedad: 11 años, 5 meses
Puntos: 0
Me parecia raro que a un servidor los variables globales no estan prohibidos (register_globals Off), por esto queria esperar la respuesta.

bueno:
3. Siempre tienes que upload fijados por tipo arjivos,por ejemplo para tipos de .php,.pl .... el upload hay que estar prohibido

no te ejecute un error como "Maximum execution time...." ?,pero claro si el script no funciona no te va a salir este mensaje

Última edición por exist; 07/07/2006 a las 15:30
  #8 (permalink)  
Antiguo 07/07/2006, 21:13
 
Fecha de Ingreso: julio-2006
Mensajes: 24
Antigüedad: 11 años, 5 meses
Puntos: 0
Buenas...

Finalmente, voy a simular un FTP para que los usuario se puedan conectar al ftp de la web y subir archivos únicamente a la carpeta /subidas/, no podrán, borrar ningún archivo ni entrar a otros directorios.

En la única manera que veo de subsanar los problemas con el uploader.

Saludos.
  #9 (permalink)  
Antiguo 07/07/2006, 23:21
 
Fecha de Ingreso: julio-2006
Mensajes: 24
Antigüedad: 11 años, 5 meses
Puntos: 0
Ya se cual es el problema, no me deja subir archivos superiores a 10mb... ¿cómo puedo cambiar eso?

El server no me responde y si no se puede hacer nada, con lo del ftp en la web... ¿podré hacer lo qué quiero?

Saludos y lamento ser tan plasta.
  #10 (permalink)  
Antiguo 08/07/2006, 22:08
 
Fecha de Ingreso: julio-2006
Mensajes: 24
Antigüedad: 11 años, 5 meses
Puntos: 0
Buenas...

Finalmente, hice lo del FTP.

Ahora mi duda es la siguiente..

¿Cómo puedo hacer para que los users que se conecten al server de la web mediante FTP (Sólo pueden acceder a la carpeta 'Subidas') puedan sólo subir archivos?

Digo, ni borrar, ni cambiar el nombre a los existesten y ni crear directorios.

Es que me preocupa algo eso..

Saludos
  #11 (permalink)  
Antiguo 09/07/2006, 20:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Conan_edogawa
Ya se cual es el problema, no me deja subir archivos superiores a 10mb... ¿cómo puedo cambiar eso?

El server no me responde y si no se puede hacer nada, con lo del ftp en la web... ¿podré hacer lo qué quiero?

Saludos y lamento ser tan plasta.
Ya te lo indiquè por mi parte y te mandè a una FAQ donde se explica que configuraciòn de PHP afecta al proceso.

Yo no sé si entiendes que es el protocolo FTP en sí y lo que haces cuando dices "simular un ftp por la web" .. En realidad lo que estàs haciendo es un "upload" por HTTP que es bien diferente. Otra cosa serà una vez subas el archivo al servidor "como lo mueves" a su destino definito; si han de quedar tus archivos en el mismo servidor que los sube .. no vale la pena usar el protocolo FTP (Con su conexiòn .. usuario y demàs ...). Si los archivos los vas a mover a otro servidor .. OK .. por FTP es lo ideal, seguro y factible.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 09/07/2006, 20:42
 
Fecha de Ingreso: julio-2006
Mensajes: 24
Antigüedad: 11 años, 5 meses
Puntos: 0
A ver si me explico bien... (Sorry).

Cree una cuenta FTP para que los usuarios de mi web suban cosas a una carpeta determinada, luego, quiero que los archivos que se suban a esa carpeta mediante FTP (Ni sumlar uno por web ni nada, FTP duro xD) pasen a otro directorio automaticamente (Dónde los usuarios no tienen acceso, solo yo) como medida de seguridad para que no sean borrados por personas sin nada que hacer más que tocar los egs.

¿Se puede?
  #13 (permalink)  
Antiguo 10/07/2006, 08:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Conan_edogawa
A ver si me explico bien... (Sorry).

Cree una cuenta FTP para que los usuarios de mi web suban cosas a una carpeta determinada, luego, quiero que los archivos que se suban a esa carpeta mediante FTP (Ni sumlar uno por web ni nada, FTP duro xD) pasen a otro directorio automaticamente (Dónde los usuarios no tienen acceso, solo yo) como medida de seguridad para que no sean borrados por personas sin nada que hacer más que tocar los egs.

¿Se puede?
Si se puede no es un tema directo de PHP .. consulta en foros como "Servidores web" o "Seguridad y redes".

Probablemente pase por un tema de configuración de tu servidor FTP (directorios de tus usuarios) en cuanto a permisos y/o definición de permisos de usuarios para esos directorios .. Pero, en condiciones normales, si un usuario puede subir archivos (escribir) también podrá renombrar y borrar .. otros usuarios no (es lo típico) pero si el "dueño" .. Consulta en otros foros si hay algo para solventar tu problema ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 10/07/2006, 08:48
 
Fecha de Ingreso: julio-2006
Mensajes: 24
Antigüedad: 11 años, 5 meses
Puntos: 0
Por fin alguien me entiende... gracias cluster, ahora mismo expongo mi duda en ese subforo.

Saludos.
  #15 (permalink)  
Antiguo 10/07/2006, 11:18
 
Fecha de Ingreso: septiembre-2003
Mensajes: 19
Antigüedad: 14 años, 2 meses
Puntos: 0
Ahora una pregunta relacionada.

Si subes archivos con las funciones FTP que trae el PHP, el tamaño del archivo que se puede subir se rige por la limitante que se pone en la configuracion del php o del ftp?

Espero haberme explicado.

Saludos
  #16 (permalink)  
Antiguo 10/07/2006, 11:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por broly
Ahora una pregunta relacionada.

Si subes archivos con las funciones FTP que trae el PHP, el tamaño del archivo que se puede subir se rige por la limitante que se pone en la configuracion del php o del ftp?

Espero haberme explicado.

Saludos
Según comentó nuestro amigo .. el archivo lo sube por FTP 100% .. no usa ningún script PHP para tal fin, lo hace con sus aplicaciones FTP cliente (programas) .. Por ende PHP no tiene nada que ver en todo esto.

Tal vez lo que "confunde" es que si el upload lo haces con tu página HTML con tu formulario con el campo "file" común .. ese proceso en principio es "HTTP" con las restricciones de tu servidor HTTP (algunas que impone) .. luego si el archivo lo tomas con PHP (con tu script) las limitaciones serán las própias de PHP en cuanto a tamaños y tiempos de ejecución. Luego dependerá si "mueves" el archivo finalmente por el protocolo FTP con las funciones de FTP de PHP (que actuan como "cliente") o lo haces con las de archivos (move_uploaded_file()) donde tendrás otros problemas referentes a permisos de acceso de archivos (preferentemente).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #17 (permalink)  
Antiguo 10/07/2006, 12:33
 
Fecha de Ingreso: septiembre-2003
Mensajes: 19
Antigüedad: 14 años, 2 meses
Puntos: 0
Si me referia al uso de ftp, por medio php, como este codigo menciona, ahi lo que se toma son las restricciones del php supongo, (no puse el link directo porque no me dejo)

Código PHP:
<?php
    
// Primero creamos un ID de conexión a nuestro servidor
    
$cid ftp_connect("direccion");
    
// Luego creamos un login al mismo con nuestro usuario y contraseña
    
$resultado ftp_login($cid"usuario","clave");
    
// Comprobamos que se creo el Id de conexión y se pudo hacer el login
    
if ((!$cid) || (!$resultado)) {
        echo 
"Fallo en la conexión"; die;
    } else {
        echo 
"Conectado.";
    }
    
// Cambiamos a modo pasivo, esto es importante porque, de esta manera le decimos al 
    //servidor que seremos nosotros quienes comenzaremos la transmisión de datos.
    
ftp_pasv ($cidtrue) ;
    echo 
"<br> Cambio a modo pasivo<br />";
    
// Nos cambiamos al directorio, donde queremos subir los archivos, si se van a subir a la raíz
    // esta por demás decir que este paso no es necesario. En mi caso uso un directorio llamado boca
    
ftp_chdir($cid"boca");
    echo 
"Cambiado al directorio necesario";   
    
// Tomamos el nombre del archivo a transmitir, pero en lugar de usar $_POST, usamos $_FILES que le indica a PHP
    // Que estamos transmitiendo un archivo, esto es en realidad un matriz, el segundo argumento de la matriz, indica
    // el nombre del archivo
    
$local $_FILES["archivo"]["name"];
    
// Este es el nombre temporal del archivo mientras dura la transmisión
    
$remoto $_FILES["archivo"]["tmp_name"];
    
// El tamaño del archivo
    
$tama $_FILES["archivo"]["size"];
    echo 
"<br />$local<br />";
    echo 
"$remoto<br />";
    echo 
"subiendo el archivo...<br />";
    
// Juntamos la ruta del servidor con el nombre real del archivo
    
$ruta "/srv/www/htdocs/boca/" $local;
    
// Verificamos si no hemos excedido el tamaño del archivo
    
if (!$tama<=$_POST["MAX_FILE_SIZE"]){
        echo 
"Excede el tamaño del archivo...<br />";
    } else {
        
// Verificamos si ya se subio el archivo temporal
        
if (is_uploaded_file($remoto)){
            
// copiamos el archivo temporal, del directorio de temporales de nuestro servidor a la ruta que creamos
            
copy($remoto$ruta);        
        }
        
// Sino se pudo subir el temporal
        
else {
            echo 
"no se pudo subir el archivo " $local;
        }
    }
    echo 
"Ruta: " $ruta;
    
//cerramos la conexión FTP
    
ftp_close($cid);
?>
  #18 (permalink)  
Antiguo 10/07/2006, 12:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por broly
Si me referia al uso de ftp, por medio php, como este codigo menciona, ahi lo que se toma son las restricciones del php supongo, (no puse el link directo porque no me dejo)

Código PHP:
<?php
    
// Primero creamos un ID de conexión a nuestro servidor
    
$cid ftp_connect("direccion");
    
// Luego creamos un login al mismo con nuestro usuario y contraseña
    
$resultado ftp_login($cid"usuario","clave");
    
// Comprobamos que se creo el Id de conexión y se pudo hacer el login
    
if ((!$cid) || (!$resultado)) {
        echo 
"Fallo en la conexión"; die;
    } else {
        echo 
"Conectado.";
    }
    
// Cambiamos a modo pasivo, esto es importante porque, de esta manera le decimos al 
    //servidor que seremos nosotros quienes comenzaremos la transmisión de datos.
    
ftp_pasv ($cidtrue) ;
    echo 
"<br> Cambio a modo pasivo<br />";
    
// Nos cambiamos al directorio, donde queremos subir los archivos, si se van a subir a la raíz
    // esta por demás decir que este paso no es necesario. En mi caso uso un directorio llamado boca
    
ftp_chdir($cid"boca");
    echo 
"Cambiado al directorio necesario";   
    
// Tomamos el nombre del archivo a transmitir, pero en lugar de usar $_POST, usamos $_FILES que le indica a PHP
    // Que estamos transmitiendo un archivo, esto es en realidad un matriz, el segundo argumento de la matriz, indica
    // el nombre del archivo
    
$local $_FILES["archivo"]["name"];
    
// Este es el nombre temporal del archivo mientras dura la transmisión
    
$remoto $_FILES["archivo"]["tmp_name"];
    
// El tamaño del archivo
    
$tama $_FILES["archivo"]["size"];
    echo 
"<br />$local<br />";
    echo 
"$remoto<br />";
    echo 
"subiendo el archivo...<br />";
    
// Juntamos la ruta del servidor con el nombre real del archivo
    
$ruta "/srv/www/htdocs/boca/" $local;
    
// Verificamos si no hemos excedido el tamaño del archivo
    
if (!$tama<=$_POST["MAX_FILE_SIZE"]){
        echo 
"Excede el tamaño del archivo...<br />";
    } else {
        
// Verificamos si ya se subio el archivo temporal
        
if (is_uploaded_file($remoto)){
            
// copiamos el archivo temporal, del directorio de temporales de nuestro servidor a la ruta que creamos
            
copy($remoto$ruta);        
        }
        
// Sino se pudo subir el temporal
        
else {
            echo 
"no se pudo subir el archivo " $local;
        }
    }
    echo 
"Ruta: " $ruta;
    
//cerramos la conexión FTP
    
ftp_close($cid);
?>
Si, las restricciones serán las de PHP a todo nivel. De todas formas pruebalo y nos comentas.

Ahora .. no entiendo muy bien el código que presentas .. entre otras cosas por qué se vé que se conecta a un servidor FTP X (hace su login .. y se posiciona en tal directorio ...) pero no "subes" el archivo por FTP (ftp_fput()) sino que hace un "copy()" ... cuando por esa técnica lo que correspondería es un "move_uploaded_file()".

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 22:48.