PHP - Subir Archivos de Carpeta en PHP

 
Vista:

Subir Archivos de Carpeta en PHP

Publicado por Fergon (5 intervenciones) el 12/08/2022 17:47:29
Buen día tengo esta incógnita a ver si me pueden ayudar.

Hay la posibilidad de que yo tenga un formulario de carga de archivos en PHP en donde yo seleccione la Carpeta y me suba todos los archivos que están dentro de esa carpeta a una base de datos. Sin necesitas de seleccionar los mismos archivos.
He estado buscando tutoriales y no he encontrado nada, por favor si alguien tiene algún tutorial que me lo pueda enviar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
Imágen de perfil de Yoel
Val: 617
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Subir Archivos de Carpeta en PHP

Publicado por Yoel (198 intervenciones) el 12/08/2022 18:12:09
Hola Fergon, para tu puedas subir múltiples archivos desde el navegador tienes que hacerlo mediante un (input type file multiple) :

1
<input type="file" id="files" name="files" multiple>

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Subir Archivos de Carpeta en PHP

Publicado por Fergon (5 intervenciones) el 12/08/2022 18:24:55
Si pero a lo que me refiero es que yo pueda indicar la carpeta, es decir sin seleccionar ninguna archivo.
Que con solo seleccionar la carpeta se suba automaticamente todo lo que esta dentro de la misma. No se si me estaré explicando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Subir Archivos de Carpeta en PHP

Publicado por Ivan (118 intervenciones) el 12/08/2022 18:42:35
Hola,

tengo que decirte que no se puede, por motivos de seguridad.

Estamos hablando de Internet y que una web acceda a tu disco duro y lea todos los archivos de tu directorio...
y si hay subdirectorios? también ? y porque no subimos hasta el directorio raiz y nos metemos en el sistema ...

Lo que pretendo mostrar es lo peligroso que sería ...

Ya hay muchas restricciones en este aspecto y una web no puede leer ni siquiera un archivo, excepto si el usuario lo autoriza mediante, precisamente, seleccionándolo en un formulario.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Subir Archivos de Carpeta en PHP

Publicado por Fergon (5 intervenciones) el 12/08/2022 19:26:31
OK te comento lo que necesito, necesito crearle un link a 1000 archivos, que estan ya en una carpeta de mi servidor. Ya los archivos estann en el servidor.
por ejemplo la carpeta llamada prestaciones, hay un programa cliente servidor que coloca esos mil archivos cada 15 días, entonces con php necesito crearles un link para que puedan ser descargados. desde un dashboard en php.
Creo que había formulado mal la pregunta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Subir Archivos de Carpeta en PHP

Publicado por Ivan (118 intervenciones) el 15/08/2022 10:02:52
Hola,

ahora tu pregunta es más complicada de lo que parece.

Descargar los archivos, estamos hablando de 1000, es un volumen demasiado grande para ser manejado con una web HTML (PHP al final lo que sirve es una página HTML).

De modo que te sugiero que utilices la alternativa del FTP (File Transfer Protocol) que como su nombre indica, es un protocolo para la transferencia de archivos.

Con esto no te puedo ayudar mucho, puesto que deberás configurar tu servidor para que habilite la transferencia de archivos FTP en ese directorio y a los usuarios que tú les des permiso.

Tendrás que preguntar a tu proveedor de Hosting cómo hacerlo segun el software que utilicen y si el contrato de tu Hosting te permite hacerlo.

Tus usuarios también deberán usar un software FTP, pero aquí cuentas con FileZilla que es gratuito, tanto cliente como servidor.

También puedes hechar unvistazo a su documentación para saber más sobre el tema.

Lamento no poder ayudarte más.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Subir Archivos de Carpeta en PHP

Publicado por Fergon (5 intervenciones) el 30/08/2022 17:59:06
Creo que sigo sin explicarme, por ejemplo yo he estado trabajando en ese código adjunto en la parte inferior que me lee una carpeta
Y cuando llamo la función me imprime el siguiente: por ejemplo
A001_01122022.pdf
A002_01122022.pdf
Y así sucesivamente.
Yo tengo una tabla en mysql con los campos: name, fecha, pdf
Lo que necesito hacer es que cada archivo que se lista ir agregándolos a esa base de datos, por ejemplo
A001_01122022
Agregarlo en los campos de la tabla, $name ->campo name(A001), $fecha ->campo fecha(2022-01-12), $archivo-> campo pdf(A001_01122022.pdf)
Intente agregar el insert des pues del else
else {

echo $archivo.'</br>';
Pero me genera un error.


<?php


function obtener_estructura_directorios($ruta){
// Se comprueba que realmente sea la ruta de un directorio
if (is_dir($ruta)){
// Abre un gestor de directorios para la ruta indicada
$gestor = opendir($ruta);
echo "<ul>";

// Recorre todos los elementos del directorio
while (($archivo = readdir($gestor)) !== false) {

$ruta_completa = $ruta . "/" . $archivo;
$name = substr($archivo, 0, 5);
$fecha = substr($archivo, 6, 8);
$d = substr($fecha, 0, 2);
$m = substr($fecha, 2, 2);
$y = substr($fecha, 4);
$fecha = $y.'-'.$m.'-'.$d;

// Se muestran todos los archivos y carpetas excepto "." y ".."
if ($archivo != "." && $archivo != "..") {
// Si es un directorio se recorre recursivamente
if (is_dir($ruta_completa)) {
echo "<li>" . $archivo . "</li>";
obtener_estructura_directorios($ruta_completa);

} else {

echo $archivo.'</br>';


}
}
}

// Cierra el gestor de directorios
closedir($gestor);
echo "</ul>";
} else {
echo "No es una ruta de directorio valida<br/>";
}
}
obtener_estructura_directorios("ach/");


?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Subir Archivos de Carpeta en PHP

Publicado por Ivan (118 intervenciones) el 30/08/2022 20:27:20
Hola de nuevo,

ha costado un poco pero por fin entendí tu pregunta jeje.

Quieres leer un árbol de directorios, guardar los archivos (y sus rutas no?) en una DB Mysql, para luego a través de alguna consulta hacer los links a los archivos, correcto?

En ese caso, hay que hacerlo en dos partes, tu función para leer el árbol de directorios está bién pero es recursiva, no creo que sea una buena idea mezclar una función recursiva con insertar registros a una DB.

Te pongo el mismo código pero adaptado para guardar los datos en un array multidimensional que porteriormente podrás recorrer y guardar los datos en la DB desglosando los archivos en tus campos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<!DOCTYPE html>
<head>
  <meta charset="utf-8">
</head>
<body>
  <h2>Listado de carpetas y directorios</h2>
<?php
// Función recursiva para leer archivos y directorios
function obtener_estructura_directorios($ruta) {
  // Array 2 dimensiones del directorio actual
  $mis_archivos = [];
  // Se comprueba que realmente sea la ruta de un directorio
  if (is_dir($ruta)) {
    // Abre un gestor de directorios para la ruta indicada
    $gestor = opendir($ruta);
    echo "<ul>";
    // Recorre todos los elementos del directorio
    while (($archivo = readdir($gestor)) !== false)  {
      $ruta_completa = $ruta . "/" . $archivo;
      // Se muestran todos los archivos y carpetas excepto "." y ".."
      if ($archivo != "." && $archivo != "..") {
        // Si es un directorio se recorre recursivamente
        if (is_dir($ruta_completa)) {
          echo "<li>" . $archivo . "</li>";
          // Sumamos el array del siguiente directorio
          $mis_archivos = array_merge($mis_archivos, obtener_estructura_directorios($ruta_completa));
        }else {
          echo "<li>" . $archivo . "</li>";
          $mis_archivos[] = ['ruta' => $ruta.'/', 'archivo' => $archivo];
        }
      }
    }
    // Cierra el gestor de directorios
    closedir($gestor);
    echo "</ul>";
    // Devolvemos el array del directorio actual
    return $mis_archivos;
  } else {
    echo "No es una ruta de directorio valida<br/>";
  }
}
 
// Activamos la función
$resultado = obtener_estructura_directorios('../');
 
echo '<h2>Contenido del array</h2>';
for($i=0; $i<count($resultado); $i++) {
  echo $resultado[$i]['ruta'].$resultado[$i]['archivo'].'<br>';
  // Aquí haces tu desglose y guardas los datos en la DB
}
echo '<h2>var_dump</h2>';
var_dump($resultado);
?>
</body>
</html>

He puesto varios resultados para que se vea bién el contenido obtenido.

Como apunte final debes prestar atención cuando hagas los links por el siguiente motivo:

Estás leyendo los archivos con su ruta en el disco duro y los links son rutas URL, lo normal es que coincidan, pero si usas rutas relativas o absolutas pueden haber diferencias. Si tienes problemas con los links seguramente el problema sea ese.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Subir Archivos de Carpeta en PHP

Publicado por Fergon (5 intervenciones) el 30/08/2022 22:23:13
Muchas Gracias por tu ayuda Ivan
Ya logre insertar lo que necesitaba en la bd.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<!DOCTYPE html>
 
<head>
 
  <meta charset="utf-8">
 
</head>
 
<body>
 
  <h2>Listado de carpetas y directorios</h2>
 
<?php
 
$mysqli = new mysqli('localhost', 'root', '', 'db');
if (!$mysqli) {
  die('Could not connect: ' . mysql_error());
}
 
// Función recursiva para leer archivos y directorios
 
function obtener_estructura_directorios($ruta) {
 
  // Array 2 dimensiones del directorio actual
 
  $mis_archivos = [];
 
  // Se comprueba que realmente sea la ruta de un directorio
 
  if (is_dir($ruta)) {
 
    // Abre un gestor de directorios para la ruta indicada
 
    $gestor = opendir($ruta);
 
    echo "<ul>";
 
    // Recorre todos los elementos del directorio
 
    while (($archivo = readdir($gestor)) !== false)  {
 
      $ruta_completa = $ruta . "/" . $archivo;
      $name = substr($archivo, 0, 5);
      $fecha = substr($archivo, 6, 8);
      $d = substr($fecha, 0, 2);
      $m = substr($fecha, 2, 2);
      $y = substr($fecha, 4);
      $fecha = $y.'-'.$m.'-'.$d;
 
      // Se muestran todos los archivos y carpetas excepto "." y ".."
 
      if ($archivo != "." && $archivo != "..") {
 
        // Si es un directorio se recorre recursivamente
 
        if (is_dir($ruta_completa)) {
 
          echo "<li>" . $archivo . "</li>";
 
          // Sumamos el array del siguiente directorio
 
          $mis_archivos = array_merge($mis_archivos, obtener_estructura_directorios($ruta_completa));
 
        }else {
 
          echo "<li>" . $archivo . "</li>";
 
          $mis_archivos[] = ['name'=>$name, 'fecha'=>$fecha, 'archivo' => $archivo];
 
        }
 
      }
 
    }
 
    // Cierra el gestor de directorios
 
    closedir($gestor);
 
    echo "</ul>";
 
    // Devolvemos el array del directorio actual
 
    return $mis_archivos;
 
  } else {
 
    echo "No es una ruta de directorio valida<br/>";
 
  }
 
}
 
 
 
// Activamos la función
 
$resultado = obtener_estructura_directorios('ach/');
 
 
 
echo '<h2>Contenido del array</h2>';
 
for($i=0; $i<count($resultado); $i++) {
$name =$resultado[$i]['name'];
$fecha = $resultado[$i]['fecha'];
$pdf = $resultado[$i]['archivo'];
 
    $sql="INSERT INTO tabla (id_a, fecha, pdf) VALUES ('$name', '$fecha', '$pdf')";
    $result = $mysqli->query($sql);
    if (!$result) {
     die('Invalid query: ' . mysql_error());
    }
 
   // Aquí haces tu desglose y guardas los datos en la DB
 
}
 
echo '<h2>var_dump</h2>';
 
var_dump($resultado);
 
?>
 
</body>
 
</html>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar