Serveur web rapide sur Linux et Mac

Déjà eux le besoin de partager un fichier rapidement entre deux périphérique sur le même réseau local, un serveur web est souvent un moyen efficace et rapide, mais pas toujours déjà installé sur votre poste.

Détromper vous, tout les ordinateur Mac on un serveur web très rapidement à démarrer, il s’agit de SimpleHTTPServer un module de python qui est déjà installé sur MacOs.

python -m SimpleHTTPServer

Cette simple commande démarre un serveur web dans le répertoire de travail ou vous l’avez démarrer.

Il ne vous reste qu’à naviguer dans le contenu nouvellement partagé à l’adresse http://localhost:8000/ ( ou avec une des IP de votre ordinateur à partir d’un autre poste ). Et le ” directory listing ” est par-default à ON, donc possible de rapidement partager des fichiers de config ou firmware pour une mise à jour de périphérique en HTTP.

La même choses est possible en PHP, par-contre en PHP le ” directory listing ” n’est pas à ON par default.

php -S 0.0.0.0:80

--- directory_listing.php ---
<?php
$dir = (isset($_GET['dir']) ? $_GET['dir'] : ".");

if (is_dir($dir)) {
  echo "<h2>Index of $dir:</h2>\n";
  $files = array_diff(scandir($dir), array('..', '.'));
  usort($files, function($a, $b) {
    if(is_dir($a) == is_dir($b))
      return strnatcasecmp($a, $b);
    else
      return is_dir($a) ? -1 : 1;
  });
  echo "<a href='?dir=" . urlencode(dirname($dir)) . "'>..</a><br>\n";
  foreach($files AS $file) {
    echo "<a href='?dir=" . urlencode("{$dir}/{$file}") . "'>{$file}</a><br>\n";                                                                                                                                                                                                                                                                       
  }                                                                                                                                                                                                                                                                                                                                                    
} else if (is_file($dir)) {                                                                                                                                                                                                                                                                                                                            
  header('Content-Description: File Transfer');                                                                                                                                                                                                                                                                                                        
  header('Content-Type: application/octet-stream');                                                                                                                                                                                                                                                                                                    
  header('Content-Disposition: attachment; filename="' . basename($dir) . '"');                                                                                                                                                                                                                                                                        
  header('Expires: 0');                                                                                                                                                                                                                                                                                                                                
  header('Cache-Control: must-revalidate');                                                                                                                                                                                                                                                                                                            
  header('Pragma: public');                                                                                                                                                                                                                                                                                                                            
  header('Content-Length: ' . filesize($dir));                                                                                                                                                                                                                                                                                                         
  readfile($dir);
}
exit;

Il est tout de même possible d’imiter un ” directory listing ” avec le script plus haut et en démarrant PHP avec cette commande.

php -S 0.0.0.0:8000 directory_listing.php

Leave a Reply