Foros del Web » Programando para Internet » PHP »

subir varios archivos al servidor y moverlos

Estas en el tema de subir varios archivos al servidor y moverlos en el foro de PHP en Foros del Web. Hola! Tengo un código que sube archivos al servidor pero a la misma carpeta donde se encuentra el archivo php, si quiero moverlos a otra ...
  #1 (permalink)  
Antiguo 06/03/2004, 07:01
 
Fecha de Ingreso: abril-2003
Ubicación: madrid
Mensajes: 13
Antigüedad: 21 años, 7 meses
Puntos: 1
subir varios archivos al servidor y moverlos

Hola!

Tengo un código que sube archivos al servidor pero a la misma carpeta donde se encuentra el archivo php, si quiero moverlos a otra carpeta ya no me funciona.

Si alguien sabe porqué o directamente tiene un código que si que lo hace, le pido que me lo escriba o mande o de una dirección si le es más rápido.

Si además el código permite subir varios archivos al mismo tiempo, me haría una ilusión tremenda pues estoy detrás de ello desde hace un tiempo.

Os escribo el código que tengo yo y que sube un archivo sólo y no lo mueve de carpeta aunque debería hacerlo en teoria.

Código PHP:

<?php 
// In PHP 4.1.0 or later, $_FILES should be used instead of $HTTP_POST_FILES.
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
  
move_uploaded_file($_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
   echo 
"Archivo subido con éxito";
} else {
   echo 
"Possible file upload attack. Filename: " $_FILES['userfile']['name'];
}
/* ...or... */
//move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
?> 
<form enctype="multipart/form-data" action="<? echo $PHP_SELF;?>" method="post">
<INPUT type="hidden" name="lim_tamano" value="500000"> 
  <p><font size="2"><b><font color="#FF0000" face="Verdana, Arial, Helvetica, sans-serif"><strong><font color="#FF9966">Archivo 
    a tra</font><font color="#FF9900"><font color="#990000"><font color="#00CC99">n<font color="#FFFFFF">sferir</font></font></font></font></strong></font><font color="#CC33CC"><b></font></font><br> 
<INPUT type="file" name="userfile"></p> 
<p><INPUT type="submit" name="enviar" value="Aceptar"></p>
</FORM>
Un saludo
  #2 (permalink)  
Antiguo 06/03/2004, 11:04
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Hola,

En donde pone "/place/to/put/uploaded/file" debes especificar la ruta y nombre donde quieres guardar el fichero.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 06/03/2004, 11:07
 
Fecha de Ingreso: agosto-2003
Ubicación: España
Mensajes: 202
Antigüedad: 21 años, 3 meses
Puntos: 0
Puede ser que allí falte algo, por ejemplo fijese en la parte php nueva:

Código PHP:
<?php 
$nombre_archivo 
$HTTP_POST_FILES['userfile']['name']; 
$tipo_archivo $HTTP_POST_FILES['userfile']['type']; 
$tamano_archivo $HTTP_POST_FILES['userfile']['size']; 
$nombre_dir "aki/iran/los/archivos";
$nombre_ruta $nombre_archivo $nombre_dir ;
//pongo algunos datos más por si acaso

if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $nombre_ruta)){ 
       echo 
"El archivo ha sido cargado correctamente."
    }else{ 
       echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse."
    } 
?>
Y listo, no ay mas, creo q lo e puesto bien, bye
adiós
  #4 (permalink)  
Antiguo 08/03/2004, 11:58
 
Fecha de Ingreso: abril-2003
Ubicación: madrid
Mensajes: 13
Antigüedad: 21 años, 7 meses
Puntos: 1
Hola!

Después de darle mil vueltas, partiendo de lo que me habéis dicho, y parcheando con códigos de internet, todavía no he conseguido que me suba los archivos y me los meta en una carpeta llamada meter que está dentro de otra llamada probar que está en la raiz del dominio donde tambien está el archivo php que contiene el código para hacer este upload.

Os escribo el código que me he parcheado y que no me funciona, si alguien tiene uno chequeado y contrastado que si que haga upload y ponga en una carpeta especificada, que me lo pase...
porque yo no lo consigo.

Código PHP:

<?php 
if(isset($enviar)){
$nombre_archivo $HTTP_POST_FILES['userfile']['tmp_name']; 
$tipo_archivo $HTTP_POST_FILES['userfile']['type']; 
$tamano_archivo $HTTP_POST_FILES['userfile']['size']; 
$nombre_dir "probar/meter";
$nombre_ruta $nombre_archivo $nombre_dir ;
if (
is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) {
    
move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $nombre_ruta);
    
//if  (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $nombre_ruta)){ 
       
echo "El archivo ha sido cargado correctamente."
       echo 
"<h2>Se ha transferido el archivo $nombre_archivo</h2>";
      echo 
"<br>Su tamaño es: $archivo_size bytes<br>";
      echo 
"<br>El fichero es tipo: $tipo_archivo<br>";
    }else{ 
       echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse."
    } 
}
?>
<!-- para hacerlo en dos archivos, un html que llama a un php// -->
<!--<FORM ENCTYPE="multipart/form-data" ACTION="upload_fichero2.php" METHOD="post">// --> 
<!-- con este input "oculto" establecemos el limite máximo del tamaño del fichero a transferir. En este ejemplo 50.000 bytes// -->
<form enctype="multipart/form-data" action="<? echo $PHP_SELF;?>" method="post">
<INPUT type="hidden" name="lim_tamano" value="500000"> 
  <p><font size="2"><b><font color="#9966CC" face="Verdana, Arial, Helvetica, sans-serif"><strong>Archivo 
    a transferir</strong></font></font><br> 
<INPUT type="file" name="userfile"></p> 
<p><INPUT type="submit" name="enviar" value="Aceptar"></p>
</FORM>
  #5 (permalink)  
Antiguo 08/03/2004, 12:59
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 21 años, 7 meses
Puntos: 1
Mira fijate que antepones el nombre del archivo al directorio donde ira este y no le das el nombre al archivo

esto es tu codigo

Código PHP:
if(isset($enviar)){
$nombre_archivo $HTTP_POST_FILES['userfile']['tmp_name']; 
$tipo_archivo $HTTP_POST_FILES['userfile']['type']; 
$tamano_archivo $HTTP_POST_FILES['userfile']['size']; 
$nombre_dir "probar/meter";
$nombre_ruta $nombre_archivo $nombre_dir ;
if  (
is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) {
     
move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $nombre_ruta);
    
//if   (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $nombre_ruta)){ 
Y tendria de ser:
Código PHP:
if(isset($enviar)){
$nombre_archivo $HTTP_POST_FILES['userfile']['name'];  /// fijate aqui nos da le nombre del archivo
$tipo_archivo $HTTP_POST_FILES['userfile']['type']; 
$tamano_archivo $HTTP_POST_FILES['userfile']['size']; 
$nombre_dir "probar/meter"// este es el dir donde lo quieres meter
$nombre_ruta $nombre_dir"/".$nombre_archivo  // y aqui le das la ruta, te pongo la barra en medio pero puede ir en la variable $nombre_dir
if  (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) {
     if(!
move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $nombre_ruta){ 
          
// lo que le decimos es qu sin nos devuelve false, pues nos dara el error

// el resto deberia ser igual sin duplicar la funcion 

  //if   (move_uploaded_file($HTTP_POST_FILES['userfile'][' 
Espero que te sirva
  #6 (permalink)  
Antiguo 08/03/2004, 17:54
 
Fecha de Ingreso: abril-2003
Ubicación: madrid
Mensajes: 13
Antigüedad: 21 años, 7 meses
Puntos: 1
Hola!

Gracias a Josemi, IvanGuillen y jordi1... por orden de aparición...

Al final lo he conseguido...

Me quedan dos pequeñas dudas:

1ª)

Si pongo:

Código PHP:
  echo "El archivo ha sido cargado correctamente."
detrás del primer if:
Código PHP:
if(is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) { 
si que me escribe el texto de cargado con exito....

pero si lo escribo detrás del segundo if:
Código PHP:
if(!move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $nombre_ruta)){ 
no escribe ningún texto...


2ª)

Para subir varios archivos al mismo tiempo (si no son muchos)

¿Se duplicarian los <INPUT type="file" name="otro_nombre"> y listo , cambiando userfile por el nuevo nombre en las demás líneas, o habría que utilizar un método con arrays que vi por encima hace un tiempo y que me parece más complicado?

Hacerlo con arrays supongo que será más eficaz pero más complicado ¿no?, ¿se podría hacer como planteo al principio, duplicando los inputs y las líneas de código?

AH! Otra cosa...

Aunque funciona bien, Jordi, ¿porqué pones: "/" ? No entiendo bien que hace... :

Código PHP:
$nombre_ruta $nombre_dir"/".$nombre_archivo  // y aqui le das la ruta, te pongo la barra en medio pero puede ir en la variable $nombre_dir 

Un saludo y gracias nuevamente
  #7 (permalink)  
Antiguo 08/03/2004, 19:56
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 21 años, 7 meses
Puntos: 1
Bien en cuanto a lo del echo, si te fijas en el primero le dices (si se ha subido el archivo escribe esto)
if(is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) {

y en el segundo le dices ( si no se ha movido del directorio temporal del php al directorio donde va escrive esto), osea que solo hara el echo en caso de que devuelva false, o que no se haya movido.

if(!move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $nombre_ruta)){

el signo de exclamacion al principio representa 'false', que seria lo que devolveria la funcion en caso de que no se hubiera movido el archivo

Y lo de la barra, si te fijas en tu codigo la variable del direrctorio donde quiers guardar el archivo no la lleva al final, pues hay que ponerlsela entre el direcotrio y el archivo, tb la puedes poner al final en la variable que seria lo suyo, ya te lo dejo comentado en el codigo. No es mas que escribir una ruta...o path

Y en cuanto a subir varios archivos, pues si, pones varios campos file, y luego lo pasas por un for (bucle tantas veces como archivos quieras subir), creo que habia en este foro, algun codigo para hacerlo, si no me lo dices y ya te pasare uno.

Y por lo que v eo estas empezando a dar tus primeros pinitos en PHP, mi consejo es que mires algun tutorial y empieces desde cero, aqui en el foro tienes varias direcciones interesantes en las FACS,

De esta manera, cosas tan simples como las rutas, los operadores bucles y demas que son imprescindibles para empezar a programar las sabras utilizar,


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 21:35.