Auteur Topic: Een bestandenlijst laten maken.  (gelezen 6753 keer)

Offline stekkerjack

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 12
Een bestandenlijst laten maken.
« Gepost op: 04 januari 2009, 17:29:51 »
Op de server van mijn webhoster had ik de mogelijlheid een lijst van bestanden te laten maken (http://www.tinyurl.com/tidata).
Op mijn Synology gaat dat helaas niet meer (http://92.108.8.42/TIDATA/)

Iemand een idee hoe ik dit op kan lossen?

Offline Luit

  • MVP
  • *
  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 301
Re: Een bestandenlijst laten maken.
« Reactie #1 Gepost op: 04 januari 2009, 18:47:58 »
misschien is het een idee om m.b.v. FTP een bestandenlijst te maken?

Luit

Offline stekkerjack

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 12
Re: Een bestandenlijst laten maken.
« Reactie #2 Gepost op: 04 januari 2009, 19:11:42 »
Het idee was het zelfde te krijgen als op de oude server, de server maakt daarbij zelf zo'n lijst (zodat ik die niet iedere keer bij hoef te werken).

Is er echt geen mogelijkheid om dit de Synology zelf te laten doen?

Offline wizjos

  • Administrator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 123
  • -Ontvangen: 181
  • Berichten: 1.994
Re: Een bestandenlijst laten maken.
« Reactie #3 Gepost op: 04 januari 2009, 21:43:20 »
Hi stekkerjack,

Kijk een hier, hier staat een linux shell-script 'dir2html' waarmee je volgens mij precies datgene krijgt wat je hebben wilt....

Succes!

Wizjos
Wizjos.


DS409+    4 x WD10EADS DSM 4.2-3243       [TEST]
DS214play 1 x WD20EARX DSM 6.1.4-15217-3  [PROD]
DS1513+   5 x WD80EFZX DSM 6.1.4-15217-5  [PROD]
RT1900ac               SRM 1.1.6-6931-1   [PROD]


Is RAID hetzelfde als een backup?
Goeie schijven voor je NAS? Neem Western Digital!

Offline stekkerjack

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 12
Re: Een bestandenlijst laten maken.
« Reactie #4 Gepost op: 05 januari 2009, 08:34:01 »
Bedankt voor de tip, maar hoe installeer ik dat?

Offline Plerry

  • MVP
  • *
  • Bedankjes
  • -Gegeven: 17
  • -Ontvangen: 289
  • Berichten: 1.504
  • Tom Poes, verzin een list ...
Re: Een bestandenlijst laten maken.
« Reactie #5 Gepost op: 05 januari 2009, 12:13:33 »
Of, wanneer deze lijst dynamisch moet zijn, kan je dat zelf in PHP maken.
Je kan dan desgewenst ook een specifiek file-filter (bijv op file extensie) toevoegen.

Dat doe je bijv. zo:

In de kop van je PHP pagina zet je:
<?php
function findFiles($dir,$ext) {
$dirhandle opendir($dir);
while (false != ($file readdir($dirhandle)))
if (!is_dir("$dir/$file") && (substr($file,-strlen($ext))==$ext)) {
$foundfile['naam'&#93; = $file;
$foundfile['datum'&#93; = filemtime("$dir/$file");
$foundfile['grootte'&#93; = intval(filesize("$dir/$file")/1024);
$foundfiles[&#93; = $foundfile;
}
closedir($dirhandle);
return SortBy2ndIndex($foundfiles'naam'true);
}

function 
SortBy2ndIndex($multiArray$secondIndex$descending false) {
while (list($firstIndex, ) = each($multiArray))
$indexMap[$firstIndex&#93; = $multiArray[$firstIndex&#93;[$secondIndex&#93;;
$dummy $descending arsort($indexMap) : asort($indexMap);
while (list($firstIndex, ) = each($indexMap))
if (((int) $firstIndex)== $firstIndex)
$sortedArray[&#93; = $multiArray[$firstIndex&#93;;
else $sortedArray[$firstIndex&#93; = $multiArray[$firstIndex&#93;;
return $sortedArray;
}
?>
en in het HTML-body-deel van je PHP-file bijv.:
<table border="0" cellspacing="0" width="80%">
<tr><th>File</th>
<th>Datum</th>
<th>Link(s)</th>
</tr>
<?php
$dir '/volume1/web/regiobulletin';
$zip_list findFiles($dir,'&#46;zip');
for ($i=0$i<count($zip_list); $i++) {
$pdfName substr($zip_list[$i&#93;['naam'&#93;,0,-4)&#46;'&#46;pdf';
$pdfFile is_file("$dir/$pdfName") ? true false;
   $fileDate strftime("%d-%b-%Y"min($zip_list[$i&#93;['datum'&#93;,($pdfFile ? filemtime("$dir/$pdfName") : time()) ));
    echo '<tr align="center"'&#46;($i%2 ?  '' : ' bgcolor="#BBDDFF"')&#46;">nt";
echo '<td>Regiobulletin nr&#46; '&#46;substr($zip_list[$i&#93;['naam'&#93;,-6,2)&#46;"</td>nt";
echo "<td>$fileDate</td>nt";
echo '<td><a href="/regiobulletin/'&#46;$zip_list[$i&#93;['naam'&#93;&#46;"" title="ZIP">nt";
    echo '    <img border="0" src="/icoons/zip_sm&#46;gif" height="16" width="16" alt="ZIP"> ('&#46;$zip_list[$i&#93;['grootte'&#93;&#46;'kB)</a>';
    if ($pdfFile) {
     echo " &nbsp; nt    <a href="/regiobulletin/$pdfName" target="_blank" title="PDF">nt";
     echo '    <img border="0" src="/icoons/pdf_sm&#46;gif" height="16" width="16" alt="PDF"> ('&#46;intval(filesize("$dir/$pdfName")/1024)&#46;'kB)</a>';
    };
    echo "</td>n</tr>n";
 };
?>
</table>

Hier wordt in het HTML-body deel de bestandslocatie op je DS gespecificeerd ( $dir= ... )
Vervolgens wordt een file-array (naam, datum, grootte) gevuld van alle ZIP-files in die directory, en aflopend gesorteerd op file-naam.
Vervolgens wordt een HTML-tabel geschreven met file-omschrijving, -datum en -link, waarbij tevens een link beschikbaar gemaakt wordt
naar een PDF-file onder diezelfde file-naam (afgezien van extensie), indien beschikbaar.
De link bestaat uit een plaatje (ZIP of PDF)+ de file-groote (in kB).

Deze code was geschreven voor PHP3 en kan tegenwoordig wellicht iets simpeler met het "foreach" commando.
Maar de code werkt uiteraard nog steeds voor de huidige PHP-versies.

Uiteraard kan je naar behoefte aanpassen.

Plerry
There are only 10 kinds of people: ... those who understand binary, and those who don't.

Offline wizjos

  • Administrator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 123
  • -Ontvangen: 181
  • Berichten: 1.994
Re: Een bestandenlijst laten maken.
« Reactie #6 Gepost op: 05 januari 2009, 17:50:34 »
@Plerry en stekkerjack,

Mooi codevoorbeeldje, kon ik zelf ook wel gebruiken :mrgreen:
Heb 'm iets generieker gemaakt met een sorteringsmogelijkheid op naam, grootte en datum (afwisselend oplopend en aflopend):
Opslaan als dirlisting.php<?php
function findFiles($dir,$ext,$sort_on,$sort) {
$dirhandle opendir($dir);
while (false != ($file readdir($dirhandle)))
if (!is_dir("$dir/$file") ){
if ($ext == '&#46;*' || (substr($file,-strlen($ext))==$ext)) {
$foundfile['naam'&#93; = $file;
$foundfile['datum'&#93; = filemtime("$dir/$file");
$foundfile['grootte'&#93; = intval(filesize("$dir/$file")/1024);
$foundfiles[&#93; = $foundfile;
}
}
closedir($dirhandle);
return SortBy2ndIndex($foundfiles$sort_on$sort);
}
function 
SortBy2ndIndex($multiArray$secondIndex$descending false) {
while (list(
$firstIndex, ) = each($multiArray))
$indexMap[$firstIndex&#93; = $multiArray[$firstIndex&#93;[$secondIndex&#93;;
$dummy $descending arsort($indexMap) : asort($indexMap);
while (list($firstIndex, ) = each($indexMap))
if (((int) $firstIndex)== $firstIndex) {
$sortedArray[&#93; = $multiArray[$firstIndex&#93;;
} else {
$sortedArray[$firstIndex&#93; = $multiArray[$firstIndex&#93;;
}
return $sortedArray;
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<?php
/* de onderstaande 2 variabelen maken de zaak stuurbaar: 
- type bepaalt het soort bestand (bv&#46; &#46;zip, &#46;txt óf &#46;*)
- dir bepaalt het pad waar de bestanden staan die je wilt tonen
*/
$type '&#46;*';
$dir '/volume1/web';
$sort 1;
$sort_on 'naam';
if (
$_REQUEST['action'&#93; != '') {
   
if ($_REQUEST['action'&#93; == 'Datum') $sort_on = 'datum';
   
if ($_REQUEST['action'&#93; == 'Grootte') $sort_on = 'grootte';
}
if (
$_REQUEST['sort'&#93; != '') {
if ($_REQUEST['sort'&#93; == 1) {
$sort 0;
} else {
$sort 1;
}
}
echo 
'<title>Index van '&#46;$dir&#46;'</title>';
?>

</head>
<script>
function $(e) {return document.getElementById(e);}
</script>
<style>
body,input,td{font:11px Verdana}
.fieldset {
   height: 780px;
   width: auto;
}
</style>
<body>
<form name="Dirlisting" method="post" action="dirlisting.php">
<input type="hidden" id="action" name="action" value="">
<input type="hidden" id="sort" name="sort" value="<?php echo $sort ?>">
<table border="0" cellspacing="0" width="80%">
<tr>
 <th align="left">
  <input type="button" id="type" value="Bestandsnaam" onClick="$('action').value=this.value;submit();">&nbsp;
 </th>
 <th>
  <input type="button" id="type" value="Datum" onClick="$('action').value=this.value;submit();">&nbsp;
 </th>
 <th>
  <input type="button" id="type" value="Grootte" onClick="$('action').value=this.value;submit();">&nbsp;
 </th>
</tr>
<?php
$dir_list 
findFiles($dir,$type,$sort_on,$sort);
for (
$i=0$i<count($dir_list); $i++) {
$fileDate strftime("%d-%m-%Y",$dir_list[$i&#93;['datum'&#93;);
echo '<tr'&#46;($i%2 ?  '' : ' bgcolor="#BBDDFF"')&#46;">";
echo '<td><a href="'&#46;$dir_list[$i&#93;['naam'&#93;&#46;'">'&#46;$dir_list[$i&#93;['naam'&#93;&#46;"</a></td>";
echo "<td>"&#46;$fileDate&#46;"</td>nt";
echo '<td align="right ">'&#46;$dir_list[$i&#93;['grootte'&#93;&#46;' kb';
echo "</td>n</tr>n";
}
?>

</table>
</body>
</html>

Veel plezier er mee!

Groet,

Wizjos
Wizjos.


DS409+    4 x WD10EADS DSM 4.2-3243       [TEST]
DS214play 1 x WD20EARX DSM 6.1.4-15217-3  [PROD]
DS1513+   5 x WD80EFZX DSM 6.1.4-15217-5  [PROD]
RT1900ac               SRM 1.1.6-6931-1   [PROD]


Is RAID hetzelfde als een backup?
Goeie schijven voor je NAS? Neem Western Digital!

Offline Plerry

  • MVP
  • *
  • Bedankjes
  • -Gegeven: 17
  • -Ontvangen: 289
  • Berichten: 1.504
  • Tom Poes, verzin een list ...
Re: Een bestandenlijst laten maken.
« Reactie #7 Gepost op: 06 januari 2009, 16:17:03 »
Mijn bovenstaande PHP-code was voor mijn specifieke geval.
Wizjos heeft die heel leuk meer generiek gemaakt.

Het kan nog generieker, door in de code van wizjos hierboven de volgende veranderingen aan te brengen.
$dir = ereg_replace("/[^/]*$",'',''.__FILE__) ;en
<form name="Dirlisting" method="post" action="<?php echo $_SERVER['PHP_SELF'&#93; ?>">misschien mag het "echo" nog weg in het laatse stukje code, maar dat weet ik niet zeker.

Je kan nu het aldus gewijzigde PHP bestand (bijv. als "index.php") in identieke vorm opslaan in iedere folder
waarvan je een bestand-listing beschikbaar wil maken.
De $dir-variable krijgt nu als waarde de pad-naam op je DS (t.o.v. de root) van de folder waarin het bewuste
PHP-bestand staat (bijv. "/volume1/web/mijnfolder").
Als action van het html-form roept het PHP bestand altijd weer zichzelf aan t.o.v. de root van je web-site,
waar het ook staat (in mijn voorbeeld dus met "/mijnfolder/index.php").

Wat nog toegevoegd zou kunnen worden is een optie om in de dir-listing alle web-pagina's
(*.htm, *.html, *.shtml, *.php, *.js, *.css + ???) uit de dir-listing te filteren.

Dit topic begint inmiddels overigens meer een PHP/HTML topic te worden dan een een Synology DS topic....

Plerry
There are only 10 kinds of people: ... those who understand binary, and those who don't.

Offline wizjos

  • Administrator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 123
  • -Ontvangen: 181
  • Berichten: 1.994
Re: Een bestandenlijst laten maken.
« Reactie #8 Gepost op: 06 januari 2009, 20:53:57 »
Plerry,

't Kan altijd beter :mrgreen:

Laten we inderdaad hier maar even stoppen... Ik denk dat aan de vraag meer dan voldaan is: je hebt gelijk dat het wel heel php wordt zo...
Straks durft men geen vraag meer te stellen, bang als men is dat er een complete academische verhandeling losbarst... :shock:  

Groet,

Wizjos
Wizjos.


DS409+    4 x WD10EADS DSM 4.2-3243       [TEST]
DS214play 1 x WD20EARX DSM 6.1.4-15217-3  [PROD]
DS1513+   5 x WD80EFZX DSM 6.1.4-15217-5  [PROD]
RT1900ac               SRM 1.1.6-6931-1   [PROD]


Is RAID hetzelfde als een backup?
Goeie schijven voor je NAS? Neem Western Digital!


 

via 2 PC's verbinding maken met Synology via Datareplicator

Gestart door gerben1974Board Data replicator & overige backupsoftware

Reacties: 1
Gelezen: 1847
Laatste bericht 24 oktober 2009, 20:00:23
door Björn
DS212 (J) en backup maken naar online cloud

Gestart door toymakerBoard Aankoopadvies

Reacties: 3
Gelezen: 2829
Laatste bericht 28 maart 2012, 23:15:54
door toymaker
VERPLAATST: Sub map maken in een gedeelde album map synology photo kan dat

Gestart door BirdyBoard Photo Station mods

Reacties: 0
Gelezen: 2624
Laatste bericht 03 juni 2022, 09:53:03
door Birdy
Map "home" onzichtbaar maken?

Gestart door RobertioBoard Synology DSM 7.2

Reacties: 17
Gelezen: 1630
Laatste bericht 27 februari 2024, 15:54:02
door Birdy
Gedeelde (sub)mappen maken

Gestart door FridoBoard Synology DSM 5.1 en eerder

Reacties: 6
Gelezen: 5050
Laatste bericht 31 augustus 2013, 10:32:18
door fejo