File "work02.php"
Full Path: /home/analogde/www/Python/Monsta-FTP-master/affichahe _expand_collpase_tableau/work02.php
File size: 15.63 KB
MIME-type: text/x-php
Charset: utf-8
<?php
// Vérifier si une valeur a été envoyée via GET
if (isset($_GET['file']))
{
$file = htmlspecialchars($_GET['file']); // Éviter les injections avec htmlspecialchars
echo "<p>Vous avez cliqué sur le lien pour le fichier : <strong>$file</strong></p>";
$chemin = "/home/analogde//www/Document_workarea/patrice/plouf";
$fichier_telechargement = $chemin ."/" . $file;
if ( file_exists( $fichier_telechargement ))
{
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($fichier_telechargement) . '"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($fichier_telechargement));
ob_clean();
flush();
readfile($fichier_telechargement);
exit();
}
}
/********************************************************************************/
$chemin = "/home/analogde//www/Document_workarea/patrice/plouf";
$liste_fichier_repertoire = [];
$liste_fichier_repertoire = Listing_fichiers_repertoire($chemin);
//echo "<pre>";
//print_r($liste_fichier_repertoire);
//echo "<pre>";
$result = groupFilesByVersion($liste_fichier_repertoire);
// Affichage du résultat
//echo "<pre>";
//print_r($result);
//echo "</pre>";
// on rajoute la version initial pour toutes les clés
foreach ($result as $key => &$subArray)
{
//if (empty($subArray))
//{
$subArray[] = $key; // Insérer la clé dans le tableau vide
//}
}
// Trie les versions dans chaque groupe
foreach ($result as $baseFile => &$versions)
{
usort($versions, function($a, $b)
{
// Extraction des numéros de version pour le tri
preg_match('/_v(\d+)\./', $a, $matchesA);
preg_match('/_v(\d+)\./', $b, $matchesB);
$versionA = isset($matchesA[1]) ? (int)$matchesA[1] : 0;
$versionB = isset($matchesB[1]) ? (int)$matchesB[1] : 0;
return $versionA - $versionB;
});
}
//print_r($result);
$data = completion_data($result, $chemin );
// Parcours du tableau et changement du path par le nom du fichier
foreach ($data as $key => &$subArrays)
{
foreach ($subArrays as &$subArray)
{
if (isset($subArray['file_name']))
{
// Remplacer le chemin complet par le nom du fichier
$subArray['file_name'] = basename($subArray['file_name']); // getFileName($subArray['file_name']);
}
}
}
echo "<pre>";
print_r($data);
echo "</pre>";
/*
foreach ($data as $mainFile => $details)
{
echo "Fichier principal : $mainFile\n";
foreach ($details as $fileInfo) {
echo " Nom complet : " . $fileInfo['file_name'] . "<br>";
echo " Taille : " . $fileInfo['size'] . " octets " . "<br>";
echo " Date de création : " . $fileInfo['creation_date'] . "<br>";
echo "----------------------------------------" ."<br>";
}
}
*/
/*************************************************************/
function groupFilesByVersion($files)
{
$groupedFiles = [];
foreach ($files as $file)
{
// Vérifie si le fichier contient la sous-chaîne '_vxx'
if (preg_match('/(.*)_v\d+\.(\w+)$/', $file, $matches))
{
$baseName = $matches[1] . '.' . $matches[2];
$groupedFiles[$baseName][] = $file;
}
else
{
// Ajoute les fichiers de base sans version
if (!isset($groupedFiles[$file]))
{
$groupedFiles[$file] = [];
}
}
}
// Trie les versions dans chaque groupe
/*foreach ($groupedFiles as $baseFile => &$versions)
{
usort($versions, function($a, $b)
{
// Extraction des numéros de version pour le tri
preg_match('/_v(\d+)\./', $a, $matchesA);
preg_match('/_v(\d+)\./', $b, $matchesB);
$versionA = isset($matchesA[1]) ? (int)$matchesA[1] : 0;
$versionB = isset($matchesB[1]) ? (int)$matchesB[1] : 0;
return $versionA - $versionB;
});
}*/
return $groupedFiles;
}
/*************************************************************/
function Listing_fichiers_repertoire($repertoire)
{
$liste_fichier_repertoire = [];
if (is_dir($repertoire))
{
$fichiers = scandir($repertoire);
foreach ($fichiers as $fichier)
{
if ($fichier !== '.' && $fichier !== '..')
{
$liste_fichier_repertoire[] = $fichier;
}
}
}
return($liste_fichier_repertoire);
}
/*************************************************************/
function completion_data($data, $chemin)
{
// Parcourir le tableau et ajouter les informations de taille et date de création pour chaque fichier
foreach ($data as $key => &$subArray)
{
// Utiliser une référence pour modifier directement le tableau
foreach ($subArray as &$fileName)
{
// Parcourir chaque nom de fichier dans le sous-tableau
// Vérifier si le fichier existe avant de récupérer ses informations
$fileName = $chemin ."/" . $fileName;
if (file_exists($fileName))
{
$fileSize = filesize($fileName); // Taille du fichier en octets
$fileCreationTime = filectime($fileName); // Date de création en timestamp
$formattedDate = date("Y-m-d H:i:s", $fileCreationTime); // Formater la date
// Ajouter un sous-tableau avec les informations du fichier
$fileName = array(
'file_name' => $fileName, // Nom du fichier
'size' => $fileSize, // Taille du fichier
'creation_date' => $formattedDate // Date de création formatée
);
}
else
{
// Si le fichier n'existe pas, insérer une erreur
$fileName = array(
'file_name' => $fileName,
'error' => "File not found"
);
}
}
}
// Afficher le tableau modifié
//echo "<pre>";
//print_r($data);
//echo "</pre>";
return($data);
}
/**************************************************************************************/
function affiche()
{
foreach ($data as $filename => $file_versions)
{
// Afficher le nom de fichier
echo "Fichier : $filename\n";
$subarray_count = count($file_versions);
echo " ploug " .$subarray_count ."<br>";
foreach ($file_versions as $index => $version)
{
// Afficher l'index du sous-tableau (index de la version du fichier)
echo " Sous-tableau " .$index . "<br>";
echo " Nom du fichier : " . $version['file_name'] . "<br>";
echo " Taille : " . $version['size'] . " octets" . "<br>";
echo " Date de création : " . $version['creation_date'] . "<br>";
echo "----------------------------\n"; // Séparateur pour chaque version
}
// Accéder à un sous-tableau par indice
/*
$file_key = "91782786.jpg"; // Le fichier auquel on veut accéder
$subarray_index = 3; // L'indice du sous-tableau (par exemple, la deuxième version)
echo "5555555555555555555555555555555555555555555555" ."<br>";
// Vérifier si la clé existe et l'indice est valide
if (isset($data[$file_key]) && isset($data[$file_key][$subarray_index]))
{
$subarray = $data[$file_key][$subarray_index];
// Afficher le contenu du sous-tableau
echo "Nom du fichier : " . $subarray['file_name'] . "\n";
echo "Taille : " . $subarray['size'] . " octets\n";
echo "Date de création : " . $subarray['creation_date'] . "\n";
}
else
{
echo "Sous-tableau ou clé non trouvée.\n";
}
*/
// Parcourir les versions de chaque fichier
/*foreach ($file_versions as $version)
{
// Afficher les informations de chaque version
echo "Compteur " $file_version ."<br>";
echo " Nom du fichier : " . $version['file_name'] . "<br>";
echo " Taille : " . $version['size'] . " octets" . "<br>" ;
echo " Date de création : " . $version['creation_date'] . "<br>";
echo "----------------------------" . "<br>"; // Séparateur pour chaque version
}*/
}
}
//recherche($data, "91782786.jpg", 3);
//$keys = array_keys($data);
//foreach ($keys as $key)
//{
// echo "Clé : " .$key ."<br>";
//}
function recherche($data, $file_key, $subarray_index)
{
echo "5555555555555555555555555555555555555555555555" ."<br>";
// Vérifier si la clé existe et l'indice est valide
if (isset($data[$file_key]) && isset($data[$file_key][$subarray_index]))
{
$subarray = $data[$file_key][$subarray_index];
// Afficher le contenu du sous-tableau
echo "Nom du fichier : " . $subarray['file_name'] . "\n";
echo "Taille : " . $subarray['size'] . " octets\n";
echo "Date de création : " . $subarray['creation_date'] . "\n";
}
else
{
echo "Sous-tableau ou clé non trouvée.\n";
}
}
/************************************************************************************/
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tableau des fichiers</title>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
a {
color: blue; /* Couleur du lien */
text-decoration: none; /* Suppression du soulignement */
}
a:hover {
text-decoration: underline; /* Ajouter le soulignement au survol si désiré */
}
</style>
</head>
<body>
<div class="container mt-5">
<h2 class="text-center mb-4">Liste des fichiers</h2>
<!--
<table class="table table-striped table-hover">
-->
<table class="table table-hover">
<thead class="table-dark">
<tr>
<th scope="col">File Name</th>
<th scope="col">Number of Elements</th>
<th scope="col">Size (Bytes)</th>
<th scope="col">Creation Date</th>
<th scope="col">Action</th> <!-- Colonne Action -->
</tr>
</thead>
<tbody>
<?php
foreach ($data as $key => $entries)
{
$numElements = count($entries); // Nombre d'éléments dans le sous-tableau
if ($numElements == 1)
{
// Si un seul élément, afficher le fichier normalement
$entry = $entries[0]; // Seulement une entrée
echo "<tr>";
echo "<td>" . htmlspecialchars($entry['file_name']) . "</td>";
echo "<td>" . $numElements . "</td>";
echo "<td>" . htmlspecialchars(number_format($entry['size'])) . "</td>";
echo "<td>" . htmlspecialchars($entry['creation_date']) . "</td>";
echo "<td></td>"; // Pas de bouton d'action pour les fichiers sans versions supplémentaires
echo "</tr>";
}
else
{
// Si plusieurs versions, afficher la première ligne puis les suivantes dans des lignes cachées
$firstEntry = $entries[0]; // Première version, visible
echo "<tr>";
echo "<td>" . htmlspecialchars($firstEntry['file_name']) . "</td>";
echo "<td>" . $numElements . "</td>";
echo "<td>" . htmlspecialchars(number_format($firstEntry['size'])) . "</td>";
echo "<td>" . htmlspecialchars($firstEntry['creation_date']) . "</td>";
// Bouton d'action pour afficher les autres versions
echo "<td><button class='btn btn-primary btn-sm' data-bs-toggle='collapse' data-bs-target='#collapse_" . md5($key) . "' aria-expanded='false' aria-controls='collapse_" . md5($key) . "'>Expand</button></td>";
echo "</tr>";
// Afficher les autres versions dans des lignes cachées
foreach (array_slice($entries, 1) as $entry)
{
// On saute la première version table-danger
echo "<tr class='collapse table-primary' id='collapse_" . md5($key) . "'>";
//echo "<td colspan='4'>" . htmlspecialchars($entry['file_name']) . "</td>";
//<td><a href="https://example.com/fichier2" target="_blank">Télécharger</a></td>
//echo "<td>" . "<a href='https://example.com/fichier2' >" . htmlspecialchars($entry['file_name']) . "</a>" . "</td>";
$pipo = "12345";
//echo "<td>" ."<a href='?file=<?php echo urlencode($pipo); ?>'>" Voir Fichier "</a></td>";
?>
<!--
<td><a href="?file=<?php echo urlencode($entry['file_name']); ?>"><?php echo htmlspecialchars($entry['file_name']); ?></a></td>
-->
<td><a href="?file=<?php echo urlencode($entry['file_name']); ?>"><?php echo htmlspecialchars($entry['file_name']); ?></a></td>
<?php
$key = "1234";
//echo "<td><a href='#' class='btn btn-primary open-modal' data-bs-toggle='modal' data-bs-target='#actionModal' data-file='$key'>Action</a></td>";
/*
//echo "<td>" . "<a href='?file=' >" . htmlspecialchars($entry['file_name']) . "</a>" . "</td>";
//<td><a href="?file=<?php echo urlencode($file2); ?>">Voir Fichier 2</a></td>
//<td><a href="?file=<?php echo urlencode($file2); ?>">Voir Fichier 2</a></td>
//<td><a href="?file=fichier2">Voir Fichier 2</a></td>*/
/* echo "<td>" . htmlspecialchars($firstEntry['file_name']) . "</td>";*/
echo "<td>" . "</td>";
echo "<td>" . htmlspecialchars(number_format($firstEntry['size'])) . "</td>";
echo "<td>" . htmlspecialchars($firstEntry['creation_date']) . "</td>";
echo "<td>" . "</td>";
echo "</tr>";
}
}
}
?>
</tbody>
</table>
</div>
<!-- Bootstrap JS and dependencies -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>