Foros del Web » Programando para Internet » PHP »

No copia archivo al servidor

Estas en el tema de No copia archivo al servidor en el foro de PHP en Foros del Web. Buenas noches a todos! Hace rato ya que me estoy dando la cabeza para saber porque no anda mi codigo, pero no logro dar con ...
  #1 (permalink)  
Antiguo 24/06/2009, 19:13
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 16 años, 2 meses
Puntos: 1
No copia archivo al servidor

Buenas noches a todos!

Hace rato ya que me estoy dando la cabeza para saber porque no anda mi codigo, pero no logro dar con la solucion. El problema es el siguiente:

Estoy trabajando con un formulario en AJAX que lo que hace es procesar archivos en una cola y, segun el codigo php que se le indique, hace lo que diga. EN mi caso, elegi subir los archivos a mi servidor.

En mi localhost, funciona perfectamente. Crea el id aleatorio, copia la extension, crea un nuevo nombre y los copia en el directorio indicado.

El problema es que no funciona de la misma forma en mi servidor. El codigo PHP es el siguiente:

Código PHP:
<?php
    
    $chivo
=$_FILES['Filedata']['name']; 
    
$id md5(uniqid(rand(), true)); 
    
$extsubstr(strrchr($chivo"."),1); 
    
$nvo$id"."$ext
    
$ruta"./fotos/"$nvo;  
    
move_uploaded_file($_FILES['Filedata']['tmp_name'], $ruta);

    
?>
El codigo en si, esta bien? Hay algun error que pueda hacer que el script no este funcionando?

De ser asi, les paso el link de mi sitio para que vean lo que les menciono: Link. Una vez que prueben con su imagen (no les permitira de mas de 500 kb), ingresen a aqui: ese es el directorio donde, supuestamente, se suben las mismisimas fotos. Pero, como podran ver, no sube nada!

Alguna idea de que es lo que puede estar ocurriendo?? Desde ya, muchisimas gracias por su ayuda!

Pablo
  #2 (permalink)  
Antiguo 24/06/2009, 19:23
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: No copia archivo al servidor

¿Tu servidor tiene habilitado el Upload de archivos?
  #3 (permalink)  
Antiguo 24/06/2009, 19:29
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: No copia archivo al servidor

Asi es. De hecho, aqui pueden ver una detalle del phpinfo(). Podran ver que file_uploads esta en ON. Es mas, yo subo archivos en otra seccion de mi web, pero no con JS, simplemente con html y php. Por eso me extraña que esto suceda, pq mover los archivos lo hace.

Eso si, tengo problemas con archivos grandes: por mas que el limit sea de 2 mb, si pasa cierto tamaño, no los sube (digamos, 400 kb). Pero a pesar de eso, sube.

Que puede andar mal con este codigo, entonces?
  #4 (permalink)  
Antiguo 24/06/2009, 19:33
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: No copia archivo al servidor

Cita:
max_execution_time = 10
Tu tiempo maximo de ejecucion es de 10 segundos, en tu servidor local te funcionaba perfectamente porque los archivos estaban en tu mismo computador y solamente se "copiaban", en tu servidor externo, estos si se suben en realidad, y pueden tomar mas de 10 segundos en subirse.

Puedes cambiar esta directiva en tiempo de ejecucion con:
http://www.php.net/manual/es/functio...time-limit.php
  #5 (permalink)  
Antiguo 24/06/2009, 23:45
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: No copia archivo al servidor

no sabia que existia tal funcion, y de hecho es muy interesante!...

Lo malo es que, si lees bien mi php.ini, esa funcion, por cuestiones de seguridad esta desabilitada. Y al preguntar a mis amigos del servidor, me respondieron que no pueden modificar dichas configuraciones ya que comparto el servidor con otros tantos usuarios.

Entonces, que podria hacer al respecto, para tener un mayor tiempo de respuesta? Pues ni siquiera tengo los 30 de defecto, solo 10, y es muy poco para subir una imagen de, digamos, 1mb!

Alguna solucion??

Desde ya, muchas gracias por su ayuda, un saludo!

Pablo
  #6 (permalink)  
Antiguo 24/06/2009, 23:48
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: No copia archivo al servidor

De todas formas, he tratado con imagenes pequeñas, que no requieran gran tiempo de execucion, y mi problema principal sigue en pie: me muestra como si el archivo hubiese sido subido, pero al ir al directorio, no estan subidas.

Que es lo que puede andar mal??

Gracias!
  #7 (permalink)  
Antiguo 25/06/2009, 01:19
Avatar de Tx
Tx
 
Fecha de Ingreso: enero-2002
Ubicación: Cba - Arg
Mensajes: 188
Antigüedad: 22 años, 10 meses
Puntos: 1
Respuesta: No copia archivo al servidor

Hola locoxcacho,
prueba en vez de move_uploaded_file, con copy([origen],[destino]), y corrobora que tienes permisos de escritura en tu directorio de destino y que esta bien la ruta en tu servidor.

unos retoques al codigo:
Código php:
Ver original
  1. <?php
  2. $chivo=$_FILES['Filedata']['name'];
  3. $id = md5(uniqid(rand(), true));
  4. $ext= substr(strrchr($chivo, "."),1);
  5. $nvo= $id. ".". $ext;
  6. $ruta= "./fotos";
  7. if(file_exists($ruta)){
  8.     if(is_writable($ruta)){
  9.         if(is_uploaded_file($_FILES['Filedata']['tmp_name'])){
  10.             if(!copy($_FILES['Filedata']['tmp_name'],$ruta.'/'.$nvo)){
  11.                 die('No se pudo copiar el archivo');
  12.             }
  13.         }else die('No se puedo subir el archivo');
  14.     }else die('Sin permisos de escritura.');
  15. }else die('El directorio no existe.');
  16. ?>

Saludos!
  #8 (permalink)  
Antiguo 25/06/2009, 09:01
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: No copia archivo al servidor

nada, he copiado el mismo codigo (de paso, te agradezco las modificaciones que le has hecho: nunca tuve en cuenta los posibles errores que pudiera llegar a tener! :S), cambie la ruta para ver si era eso (varias veces me paso que la ruta estaba mal escrita) e hice que se suba en el mismo directorio que en el que estaba actualmente y... nada.

Lo mas raro de todo que el codigo en si, funciona: en localhost y en otro servidor externo, funciona, pero no en este. Pero en este servidor, SI funcionan copy() y move_upload_file(): por tanto, no se qué es lo que puede estar generando que no se copien los archivos. Es mas, me de la impresion que se suben al servidor temporal, pero luego no son copiados correctamente. Que otra cosa podria ser?

Y con respecto a la otra duda, es posible extender el tiempo de ejecucion maxima si esta desabilitada la funcion set_time_limit()??

Gracias por su ayuda, saludos!

Pablo
  #9 (permalink)  
Antiguo 25/06/2009, 09:10
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 9 meses
Puntos: 29
Respuesta: No copia archivo al servidor

He leído en desarrolloweb no hace mucho que con Ajax no se pueden subir archivos. Hace tiempo ideé una solución a no tener que aprender ajax y resulta que ya lo habían utilizado los de gmail para "emular" ajax en los archivos adjuntos para subirlos. El detalle es tener un iframe pequeñito o invisible (<iframe width=0 height=0 border=0 name=aDondeSubir></iframe>) a donde le cargas los archivos por target y con javascript:

function subirarchivos() {

document.formulario.action="paginaprocesadora.php" ;
document.formulario.target="aDondeSubir";
document.formulario.submit();

}

Se procesa en paginaprocesadora.php .En ella puedes incluir un script con parent.elemento para avisar de que ha terminado.

Un saludo y suerte.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #10 (permalink)  
Antiguo 25/06/2009, 09:14
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: No copia archivo al servidor

gracias chulosyoy!.. y como seria la forma de aplicarlo?? Digamos, yo tengo un formulario, y como lo uso con la funcion que me das??

De todas formas, yo tampoco estoy subiendo archivos con ajax: lo estoy haciendo con PHP, ajax lo unico que hace es llamar a mi archivo y procesarlo, pero AJAX en si estoy de acuerdo contigo que no puede subir archivos.
  #11 (permalink)  
Antiguo 25/06/2009, 09:19
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 9 meses
Puntos: 29
Respuesta: No copia archivo al servidor

Me refería a que no puedes enviarle los archivos a php mediante ajax porque no soportaría mucho peso. Claro que con ajax no se puede directamente! Jajaja. Bueno, voy a intentar escribir un código válido, que conste que no lo pruebo:

HTML:
Código:
<!-- Iframe donde se va a procesar -->
<iframe width=0 height=0 border=0 style=border-width:0px; name=aDonde></iframe>

<!-- Para firefox podemos ponerlo invisible -->
<iframe style=-moz-opacity:0; name=aDonde></iframe>

<!-- Formulario -->
<form name=formulario method=post enctype=multipart/form-data action=procesararchivo.php>
<input type=file name=archivo>
<input type=button onclick=javascript:procesar();>
</form>
Javascript:

Código:
<script>function procesar() {

document.formulario.target="aDonde";
document.formulario.submit();
}
</script>
Y en el procesararchivo.php lo recoges de forma normal.

Un saludo.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #12 (permalink)  
Antiguo 25/06/2009, 09:25
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: No copia archivo al servidor

ok! muy interesante!!

ahora, lo mas interesante de todo, seria si de esta forma se podria verificar si el archivo comenzo a subirse, se esta subiendo, o termino de subir. Y de esta forma, crear alguna funcion que muestre al usuario algun div con la clase correspondiente, no es asi?? Sabes si eso es posible? Pues eso es lo mas interesante de AJAX: que le muestre en tiempo real el estado de su archivo. ;)

Alguna idea??

gracias!
  #13 (permalink)  
Antiguo 25/06/2009, 09:29
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 9 meses
Puntos: 29
Respuesta: No copia archivo al servidor

Esos tres estados puedes verificarlos (comienzo, mientras, final). Lo que no creo que puedas hacer (aunque en estos temas siempre me sorprende lo rápidoq ue se avanza) es decirle al usuario el porcentaje que lleva subido.

Para corroborar los tres estados puedes poner en la página php, nada más detectar que el input file indica un archivo:

<script>parent.document.getElementById("capaEstado ").innerHTML="Se empezó a subir";</script>


Cuando comienza a subir:

<script>parent.document.getElementById("capaEstado ").innerHTML="Se está subiendo";</script>

Y cuando acabe el script php:

<script>parent.document.getElementById("capaEstado ").innerHTML="<font color=green>Se terminó de subir</font>";</script>

Un saludo.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #14 (permalink)  
Antiguo 25/06/2009, 09:37
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: No copia archivo al servidor

muy bueno! pero no me dices, con JS o PHP, como verificar si el archivo se esta subiendo, comenzo o termino! :S

disculpa las molestias, pero quizas no lo entendi, o se te olvido! :S

Un saludo, y gracias!

Pablo
  #15 (permalink)  
Antiguo 25/06/2009, 11:58
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 9 meses
Puntos: 29
Respuesta: No copia archivo al servidor

Pues por ejemplo, si la página php es así:

Código PHP:
//detecta fichero
$archivo=$_FILES ['fichero'];

//mueve fichero
move_uploaded_files() // --> o lo que estés utilizando)

//termina programa
$final=true
El ejemplo es sencillo:

Código PHP:
//detecta fichero
echo "<script>parent.document.getElementById('capaRellenada').innerHTML='se detecto el archivo';</script>";
$archivo=$_FILES ['fichero'];

//mueve fichero
echo "<script>parent.document.getElementById('capaRellenada').innerHTML='comenzando a subir';</script>";
move_uploaded_files() // --> o lo que estés utilizando)

//termina programa

$final=true;
echo 
"<script>parent.document.getElementById('capaRellenada').innerHTML='Terminó de subirse';</script>"
Incluso puedes configurar mensajes de error. La capaRellenada sería:

<div id=capaRellenada></div>

Un saludo.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
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:28.