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
<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
<?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_file, FTP_BINARY);
if ( 0 < $_FILES['file']['error'] ) {
echo 'Error: ' . $_FILES['file']['error'] . '<br>';
}
else {
print_r($_FILES['file']['name']);
}
} else {
echo ' NO SELECCIONÓ NINGUN ARCHIVO';
}
}
?>
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.
<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.
$.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.
$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
$_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