Auteur Topic: Een bestandenlijst laten maken.  (gelezen 6481 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: 121
  • -Ontvangen: 179
  • Berichten: 1.984
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.498
  • 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: 121
  • -Ontvangen: 179
  • Berichten: 1.984
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.498
  • 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: 121
  • -Ontvangen: 179
  • Berichten: 1.984
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!


 

Pop3: berichten op server laten voor een x aantal dagen

Gestart door DmitriBoard Mail Station

Reacties: 2
Gelezen: 1918
Laatste bericht 04 december 2012, 09:53:22
door Dmitri
Hoe script maken in taakplanner om nas wekelijks te herstarten ?

Gestart door Karine01Board Synology DSM algemeen

Reacties: 6
Gelezen: 2676
Laatste bericht 22 september 2018, 15:07:42
door mchp92
Van DS215J naar DS216J een backup maken

Gestart door Hassan1985Board Data replicator & overige backupsoftware

Reacties: 10
Gelezen: 1566
Laatste bericht 08 juni 2017, 08:54:55
door Hassan1985
via 2 PC's verbinding maken met Synology via Datareplicator

Gestart door gerben1974Board Data replicator & overige backupsoftware

Reacties: 1
Gelezen: 1773
Laatste bericht 24 oktober 2009, 20:00:23
door Björn
Netwerkverbinding maken met DS214se

Gestart door dvdoorenBoard Windows

Reacties: 1
Gelezen: 1398
Laatste bericht 31 oktober 2015, 20:54:32
door Birdy