Autor Zpráva
TrueFriend
Profil
Zdravím. Již několik dní řeším problém jak napsat script, který by dělal to, že vypíše seznam složek ale soubory v té složce nezobrazí. A tyto složky seřadí podle data jejich vytvoření.

Podařilo se mi najít na internetu script co vypisuje pouze složky, ale nedokážu ho upravit tak, aby tyto složky řadil podle data a ne podle názvu.

V první půlce scriptu je také část pro načítání souborů, ale echo na tuto část jsem zrušil, abych dosáhl výpisu pouze adresářů.

Lze to nějak překopat?

<?
$dir = '.';
if ($handle = opendir($dir)) {
	while (false !== ($file = readdir($handle))) {
		if ($file != "." && $file != ".." && $file != "style.css" && $file != "index.php" && $file != "indexer.php") {
			if (is_dir("$dir/$file"))
				$folder_array[] = strtolower($file);
			else
				$file_array[] = strtolower($file);
		}
	}
	closedir($handle);
}

echo '<p>Folders</p>';
if ($folder_array) {
	sort ($folder_array);
	foreach ($folder_array as $file) {
		echo "<a href='$dir/$file'>$file</a><br>";
	}
}

?>
Aesir
Profil
TrueFriend:

1. problém je ten, že ukládáte do pole jméno adresáře, takže podle něj i řadíte
2. problém nějspíš bude v tom, že na většině filesystémů (používaných v serverových unix like systémech) se datum vytvoření souborů neukládá, takže si jej možná budete muset ukládat bokem, nebo se spolehnout na datum poslední změny
Alphard
Profil
TrueFriend
jak již psal Aesir, asi se budete muset spokojit s časem změny
nedávno jsem se setkal s jednou třídou, která to dělala, šla by napsat lépe, ale můžete se inspirovat

<?php
class AdrStr
{
  public $path;
  public $struktura = array();
  protected $hn;
  public $adr = array();
  public $file;
  public $order;

  public function __construct($path = "./")
  {
    $this->path = $path;
    $this->nacti();
    $this->serad();
    $this->priprav();
  }

  public function nacti()
  {
    $this->hn = opendir($this->path);
    while(false!==($file = readdir($this->hn)))
    {
      if(!in_array($file, array(".", "..")))
        $this->struktura[$file] = filemtime($this->path.$file);
    }
    closedir($this->hn);
  }

  public function serad()
  {
    asort($this->struktura);
  }

  public function priprav()
  {
    foreach($this->struktura as $file => $q)
    {
      if(is_dir($this->path.$file))
        $this->adr[] = $file;
      else
        $this->file[] = $file;
    }
  }
  
  public function return_adr()
  {
    return $this->adr;
  }

  public function return_file()
  {
    return $this->file;
  }
}

$vr = new AdrStr();
echo "<pre>";
print_r($vr->return_adr());
print_r($vr->return_file());
echo "</pre>";
?>

TrueFriend
Profil
Opravdu to řadí. Díky moc.
Inspirací to pro mne určitě je. Chci se zeptat, jak se dá tento script ještě upravit, aby řadil složky obráceně? Tedy nejnovější aby byly nahoře.
A další věc. když spustím tento script v prohlížeči, tak se mi vypíšou složky takhle:
Array
(
    [0] => Slozka1
    [1] => Slozka2
    [2] => Slozka3
)


Dal by se script upravit tak, aby vypisoval do prohlížeče jen samotné složky takto?:
Slozka1
Slozka2
Slozka3


(tedy bez těch závorek a nápisu Array)

Případně dal by se script upravit ještě tak, aby ty složky nabízel v prohlížeči jako odkaz?
Lámu si nad tím hlavu. V PHP nejsem zatím tak dobrej.

Díky
Alphard
Profil
TrueFriend
takhle se budou řadit sestupně
je vráceno pole, vypište si ho, jak chcete
<?php
class AdrStr
{
  public $path;
  public $order;
  public $filtr;
  protected $struktura = array();
  protected $adr = array();
  protected $file = array();
  private $hn;

  public function __construct($path = "./")
  {
    $this->path = $path;
    $this->nacti();
  }

  public function nacti()
  {
    $this->hn = opendir($this->path);
    while(false!==($file = readdir($this->hn)))
    {
      if(!in_array($file, array(".", "..")))
        $this->struktura[$file] = filemtime($this->path.$file);
    }
    closedir($this->hn);
  }

  public function serad(&$s) // $this->order prijima name_asc|name_desc|time_asc|time_desc
  {
    if($this->order)
      switch($this->order)
      {
        case "name_asc": ksort($s); break;
        case "name_desc": krsort($s); break;
        case "time_asc": asort($s); break;
        case "time_desc": arsort($s); break;
      }
  }

  public function oddel()
  {
    foreach($this->struktura as $file => $q)
    {
      if(is_dir($this->path.$file))
        $this->adr[] = $file;
      else
        $this->file[] = $file;
    }
  }
    
  public function execute()
  {
  	$this->serad($this->struktura);
  	$this->oddel();
  }
  
  public function return_adr()
  {
    return $this->adr;
  }

  public function return_file()
  {
    return $this->file;
  }
}

$vr = new AdrStr();
$vr->order = "time_desc";
$vr->execute();
echo "<pre>";
print_r($vr->return_adr());
print_r($vr->return_file());
echo "</pre>";
?>
TrueFriend
Profil
Chci se ještě zeptat. Dal by se tento script upravit ještě tak, aby dokázal vypsat i ty hodnoty času, kdy byla složka změněna (tedy vytvořena)? Jak na to?

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: