PHP : méthode récursive pour parcourir et afficher un dossier et son contenu

Cette méthode permet de :

  • Parcourir un dossier sur un serveur web PHP,
  • Afficher son contenu hiérarchisé, par dossiers
  • Afficher les fichiers et le lien pour les télécharger
  • Afficher tout ça dans l’ordre alphabétique

Voici la méthode PHP :

// obtenir l'URL locale (méthode perso)
$localURL = Tools::get_urlLocal();

//=========================================
// Parcourt un dossier et affiche sous forme hiérarchisée
// les dossiers deviennent des titre
// les fichiers deviennent des liens pour télécharger le fichier
//=========================================
function parcourtDossier($chemin, $level) {
	global $localURL;

	if (is_dir($chemin)) {
		// c'est un dossier

		// ouvre le dossier 
		if ($handle = opendir($chemin)) {

			// liste de tout ce qu'on va trouver
			$dirFiles = array();

			// récupère la liste des fichiers/dossiers
			while (false !== ($entry = readdir($handle))) {
				$dirFiles[] = $entry;
			}

			// trie dans l'ordre alpha
			sort($dirFiles, SORT_NATURAL | SORT_FLAG_CASE);

			// affiche la liste triée
			foreach($dirFiles as $entry) {

				if ($entry != "." && $entry != "..") {

					if (is_dir($chemin.'/'.$entry)) {
						
						// affiche le nom du dossier
						if ($level == 0) {
							$b1 = '<div style="width:100%; background-color:#ddd; padding:1px; margin-top:20px;"><h2 style="padding-left:20px; ">';
							$b2 = '</h2></div>';
						}
						if ($level == 1) {
							$b1 = '<div style="width:100%; background-color:#eee; padding:1px; margin-top:15px;"><h4 style="padding-left:20px;">';
							$b2 = '</h3></div>';
						}
						if ($level >= 2) {
							$b1 = '<div style="width:100%; background-color:#f4f4f4; margin-top:10px;"><b style="padding-left:20px;">';
							$b2 = '</b></div>';
						}
						// rajouter des niveaux si besoin

						echo $b1;
						echo '<b>'.$entry.'</b>';
						echo $b2;

						// affiche le contenu du dossier
						echo '<div style="margin-left:60px; margin-top:4px;">';
						parcourtDossier($chemin.'/'.$entry, $level + 1);
						echo '</div>';
					}
					else {
						// $chemin est un un fichier
						// affiche un lien pour le télécharge
						echo '• <a href="'.$localURL.'kp-content/download/'.$chemin.'/'.$entry.'" download>'.$entry.'</a><br/>';
					}

				}
			}
			closedir($handle);
		}

	} else {
		// $chemin est un fichier
		// utilisé seulement dans le cas où on le paramètre est un nom de fichier
		if ($chemin != "." && $chemin != "..") {
			echo '<a href="'.$localURL.'kp-content/download/'.$chemin.'" download>'.$chemin.'</a><br/>';
		}
	}
}

parcourtDossier("chemin/du/dossier", 0);
PHP : Méthode pour parser un dossier et l'afficher

Ecrire dans un textBox depuis un autre thread / appel Thread-safe dans un Windows Form

Lorsqu’on appelle une méthode qui écrit dans un textBox (par exemple) sur une Form, et qu’on l’appelle depuis un autre thread, une autre classe, une erreur est retournée. Ce n’est pas « thread-safe« .

Pour contrer cela, il faut utiliser invoke. Par exemple si dans la class de ma Form, j’ai une méthode qui écrit dans une textBox :

public void log(string value)
    {
    if (InvokeRequired)
        {
            this.Invoke(new Action<string>(log), new object[] { value });
            return;
        }
        Console.WriteLine("LOG : " + value);
        textBox_log.Text += value + "\r\n";
    }

 

 

C# : Socket ou TcpListener / TcpClient ?

Les 2 classes ont un objectif similaire et utilisent les mêmes méthodes : faire communiquer 2 éléments. Voici la différence entre Socket et TcpListener/TcpClient.

TCPListener est une classe dérivée de Socket, qui se concentre uniquement sur le protocole TCP.

Socket permet d’utiliser des protocoles TCP, mais aussi d’autres comme UDP et permet une configuration plus précise.

La différence n’est pas énorme en terme de lignes de codes. Mais si tu ne connais pas trop encore les Socket et les détails des protocoles, utilise TCPListener et TcpClient, qui sont une version épurée et plus simple de Socket.

Si tu sais ce que tu fais et/ou que tu veux un autre protocole que Tcp, utilise les Socket.