Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: SrTrp en 14 Febrero 2020, 06:10 AM

Título: Subir varios archivos FTP
Publicado por: SrTrp en 14 Febrero 2020, 06:10 AM
Hola que tal lo que quiero es subir varias imagenes via ftp pero solo logro subir la primera que escojo, no conozco bien las propiedades del $_FILE, intente crear un for basado en el SIZE del $_FILE pero solo me da el tamaño del archivo mas no cuantos tengo.
Aqui esta donde tengo el script y lo mando via ajax
Código (html4strict) [Seleccionar]

<input id="archivo" type="file"  name="archivo" multiple>
<button type="button" id="files"> Subir </button>
<script src="jquery.js"></script>
<script>
   

$(document).ready(function () {
       $('#files').click(function () {
            var datos = $('#archivo').prop('files')[0];

            var form_data = new FormData();                  
            form_data.append('file', datos );
           $.ajax({
               data: form_data ,
               url: "subida.php",
               type: "POST",
               contentType: false,
               processData: false,
               success:
                       function (r) {
                           alert('' + r);
                       }
           });
       });
   });
</script>

Y aqui esta mi php
Código (php) [Seleccionar]

<?php
$ftp_server 
"127.0.0.1";
$ftp_usuario "root";
$ftp_pass "";
$con_id ftp_connect($ftp_server);
$lr ftp_login($con_id$ftp_usuario$ftp_pass);

if ((!
$con_id) || (!$lr)) {
    echo 
'NO SE PUDO CONECTAR';
    exit;
} else {
    echo 
'CONECTADO CORRECTAMENTE';        
        if (!empty(
$_FILES['file']['name'])) {
            
$temp explode("."$_FILES['file']['name']);
            
$source_file $_FILES['file']['tmp_name'];          
 
$nombre $_FILES['file']['name'];
    
            
$subio ftp_put($con_id,  $nombre$source_fileFTP_BINARY);
    
            if ( 
$_FILES['file']['error'] ) {
                echo 
'Error: ' $_FILES['file']['error'] . '<br>';
            }
            else {
               
               
print_r($_FILES['file']['name']);
            }
        } else {
            echo 
' NO SELECCIONÓ NINGUN ARCHIVO';
        }

    
}

?>

Título: Re: Subir varios archivos FTP
Publicado por: mr-medi en 27 Febrero 2020, 23:32 PM
Muy buenas, lo que puedes hacer es poner en el atributo "name" del input los corchetes para indicar al php que se trata de un array.
Código (xml) [Seleccionar]

<input id="archivo" type="file"  name="archivos[]" multiple>


En tu código js te recomendaría que le pases un nombre al parámetro para luego en el php coger los datos en base al nombre.
Código (javascript) [Seleccionar]

$.ajax({
                data :
                {
                         "files":form_data
                } ,
                url: "subida.php",
                type: "POST",
                contentType: false,
                processData: false,
                success:
                        function (r)
                        {
                            alert('' + r);
                        }
            });


Después desde php para facilitar las cosas en vez de usar el array global $_FILES puedes coger el parámetro POST que yo he llamado "files" para coger el array de ficheros.
Código (php) [Seleccionar]

$files = $_POST["files"];
foreach($files as $file)
{
      //Subir fichero al ftp
}


Aquí te dejo documentación con ejemplos.
https://www.php.net/manual/en/features.file-upload.multiple.php (https://www.php.net/manual/en/features.file-upload.multiple.php)

Saludos

Título: Re: Subir varios archivos FTP
Publicado por: @XSStringManolo en 28 Febrero 2020, 03:30 AM
$_FILES es un array. Usa count para obtener el tamaño de un array.
$numArchivos = count($_FILES);

Igual te interesa filtrar y demás. Mirando por SO dicen que puede ser necesario para remover strings vacios del array.

https://stackoverflow.com/questions/2704314/multiple-file-upload-in-php