Synology-Forum.nl
Tweaks / Addons A.K.A. The Underground => 3rd party apps integratie in DSM => Topic gestart door: wizjos op 16 november 2008, 16:31:46
-
Om m.b.v. een GUI te kunnen uitpakken de volgende oplossing:
(http://94.212.224.81/images/syno/unzip.jpg)
application.cfg:text = Unzip Archives
description = Unzip Archives
icon_16 = zip16.png
icon_32 = zip32.png
type = embedded
path = /phpsrc/unzip/unzip.php
unzip.php:
**update: spaties in bestands- of directorynamen worden ondervangen**
<?php
putenv('HTTP_COOKIE='.$_SERVER['HTTP_COOKIE']);
putenv('REMOTE_ADDR='.$_SERVER['REMOTE_ADDR']);
$user=exec('/usr/syno/synoman/webman/modules/authenticate.cgi');
if($user != 'admin'){
header("HTTP/1.0 403 Forbidden");
exit;
}
if (!isset($_REQUEST['filename'])) $_REQUEST['filename'] = $f1name;
if (!isset($_REQUEST['program'])) $_REQUEST['program'] = $f2name;
if (!isset($_REQUEST['options'])) $_REQUEST['options'] = $f3name;
if (isset($_REQUEST['filename'])) {
if (strpos($_REQUEST['filename'], " ") > 0) $_REQUEST['filename']="'".$_REQUEST['filename']."'";
if (strpos($_REQUEST['target'], " " > 0)) $_REQUEST['target'] = "'".$_REQUEST['target']."'";
if ($_REQUEST['action'] == 'show') {
if ($_REQUEST['program'] == 'tar -z') {
$content="tar -t".$_REQUEST['options']." ".$_REQUEST['filename']."<br/>";
exec("tar -t".$_REQUEST['options']." ".$_REQUEST['filename'],$out);
}
elseif ($_REQUEST['program'] == 'tar -j') {
$content="/opt/bin/tar -t".$_REQUEST['options']." ".$_REQUEST['filename']."<br/>";
exec("/opt/bin/tar -t".$_REQUEST['options']." ".$_REQUEST['filename'],$out);
}
elseif ($_REQUEST['program'] == 'gunzip') {
$content="ls -l ".$_REQUEST['filename']."<br/>";
exec("ls -l ".$_REQUEST['filename'],$out);
}
elseif ($_REQUEST['program'] == 'unzip') {
$content="/opt/bin/unzip -Z".$_REQUEST['options']." ".$_REQUEST['filename']."<br/>";
exec("/opt/bin/unzip -Z".$_REQUEST['options']." ".$_REQUEST['filename'],$out);
}
elseif ($_REQUEST['program'] == 'unrar') {
$content="/opt/bin/unrar l".$_REQUEST['options']." ".$_REQUEST['filename']."<br/>";
exec("/opt/bin/unrar l".$_REQUEST['options']." ".$_REQUEST['filename']."| sed '1,5d'",$out);
array_pop($out);array_pop($out);array_pop($out);
}
if (count($out)) foreach($out as $item) $content.=$item."<br/>";
}
if ($_REQUEST['action'] == 'unzip') {
if ($_REQUEST['program'] == 'tar -z') {
if ($_REQUEST['target'] == "") $_REQUEST['target']=dirname($_REQUEST['filename']);
if ($_REQUEST['target'][strlen($_REQUEST['target'])-1] != "/") $_REQUEST['target'].='/';
$content="tar -x".$_REQUEST['options']." ".$_REQUEST['filename']." -C ".$_REQUEST['target']."<br/>";
exec("tar -x".$_REQUEST['options']." ".$_REQUEST['filename']." -C ".$_REQUEST['target'],$out);
}
elseif ($_REQUEST['program'] == 'tar -j') {
if ($_REQUEST['target'] == "") $_REQUEST['target']=dirname($_REQUEST['filename']);
if ($_REQUEST['target'][strlen($_REQUEST['target'])-1] != "/") $_REQUEST['target'].='/';
$content="/opt/bin/tar -x".$_REQUEST['options']." ".$_REQUEST['filename']." -C ".$_REQUEST['target']."<br/>";
exec("/opt/bin/tar -x".$_REQUEST['options']." ".$_REQUEST['filename']." -C ".$_REQUEST['target'],$out);
}
elseif ($_REQUEST['program'] == 'gunzip') {
if (preg_match("/.*.zip$/i",$_REQUEST['filename'])) $content="gunzip does not unzip a .zip-file; use unzip";
else {
if ($_REQUEST['target'] == "") $_REQUEST['target']=preg_replace("/^(.+)(.gz|-gz|.z|-z|_z|.Z)$/","\1",$_REQUEST['filename']);
if ($_REQUEST['target'] == $_REQUEST['filename']) $content="no destination found";
else {
$content="gunzip -c".$_REQUEST['options']." ".$_REQUEST['filename']." > ".$_REQUEST['target']."<br/>";
exec("gunzip -c".$_REQUEST['options']." ".$_REQUEST['filename']." > ".$_REQUEST['target'],$out);
}
}
}
elseif ($_REQUEST['program'] == 'unzip') {
if ($_REQUEST['target'] == "") $_REQUEST['target']=dirname($_REQUEST['filename']);
if ($_REQUEST['target'][strlen($_REQUEST['target'])-1] != "/") $_REQUEST['target'].='/';
$content="/opt/bin/unzip ".$_REQUEST['options']." ".$_REQUEST['filename']." -d ".$_REQUEST['target']."<br/>";
exec("/opt/bin/unzip ".$_REQUEST['options']." ".$_REQUEST['filename']." -d ".$_REQUEST['target']);
exec("/opt/bin/unzip -Z -1 ".$_REQUEST['filename'],$out);
}
elseif ($_REQUEST['program'] == 'unrar') {
if ($_REQUEST['target'] == "") $_REQUEST['target']=dirname($_REQUEST['filename']);
if ($_REQUEST['target'][strlen($_REQUEST['target'])-1] != "/") $_REQUEST['target'].='/';
$content="/opt/bin/unrar x".$_REQUEST['options']." -y ".$_REQUEST['filename']." ".$_REQUEST['target']."<br/>";
exec("/opt/bin/unrar x".$_REQUEST['options']." -y ".$_REQUEST['filename']." ".$_REQUEST['target']);
exec("/opt/bin/unrar lb ".$_REQUEST['filename'],$out);
}
if (count($out)) foreach($out as $item) {
$out1="";
exec("ls -l ".$_REQUEST['target'].$item,$out1);
$content.=$out1[0]."<br/>";
}
}
setcookie("f1name",$_REQUEST['filename']);
setcookie("f2name",$_REQUEST['program']);
setcookie("f3name",$_REQUEST['options']);
} else {
$_REQUEST['filename']='/';
}
?>
<html><head><title>fileinspector</title></head><body>
<script>
var myXMLHTTPRequest = (window.XMLHttpRequest)?
new XMLHttpRequest():
new ActiveXObject("Microsoft.XMLHTTP");
function LoadHTML(htmlfile){
myXMLHTTPRequest.open("GET", htmlfile, false); myXMLHTTPRequest.send(null);
return myXMLHTTPRequest.responseText;
}
function load(p) {
var d = LoadHTML('dir.php?dir='+p);
co=document.getElementById('fileselect');
co.innerHTML=d;
}
function getfilename(){
document.getElementById('fileselect').style.display='block';
load('<?php print dirname($_REQUEST['filename']) ?>');
}
function $(e){ return document.getElementById(e); }
</script>
<style>body,input,td{font:11px Verdana}
#fileselect{position:absolute;top:50px;left:300px;width:480px;height:400px;z-index:7;
background-color:#bbf;overflow:auto;padding:5px;border:1px solid #666;display:none;}
input{font:10px verdana}
#cancel{font:11px Verdana;position:absolute;top:5px;right:5px;width:9px;hight:10px;
color:#fff;padding:3px;cursor:pointer;background-color:#222}
.r{text-align:right;width:40px}
.d{background-color:#ddddff;}</style>
<form id="f" name="f" method="get" action="unzip.php">
<input type="hidden" name="action" id="action" value="" />
<fieldset><legend>program selection</legend>
<input type="radio" name="program" value="tar -z" <?php print $_REQUEST['program']=='tar -z'?'checked="checked"':'' ?>
onclick="$('options').value='vzf';$('go').value=this.value;" /><span title=".tar.gr, .tgz, .taz">tar -z</span>
<input type="radio" name="program" value="tar -j" <?php print $_REQUEST['program']=='tar -j'?'checked="checked"':'' ?>
onclick="$('options').value='vjf';$('go').value=this.value;" /><span title=".tar.bz2">tar -j</span>
<input type="radio" name="program" value="gunzip" <?php print $_REQUEST['program']=='gunzip'?'checked="checked"':'' ?>
onclick="$('options').value='f';$('go').value=this.value;" />
<span title=".gz, -gz, .z, -z, _z, .Z">gunzip</span>
<input type="radio" name="program" value="unzip" <?php print $_REQUEST['program']=='unzip'?'checked="checked"':'' ?>
onclick="$('options').value='';$('go').value=this.value;" />
<span title=".zip">unzip</span>
<input type="radio" name="program" value="unrar" <?php print $_REQUEST['program']=='unrar'?'checked="checked"':'' ?>
onclick="$('options').value='';$('go').value=this.value;" />
<span title=".rar">unrar</span>
<span style="margin-left:50px">options:</span>
<input type="text" name="options" id="options" value="<?php print $_REQUEST['options'] ?>" />
for options see manual
<a href="http://busybox.net/downloads/BusyBox.html#item_tar" target="_blank">tar -z</a>
<a href="http://linux.die.net/man/1/tar" target="_blank">tar -j</a>
<a href="http://busybox.net/downloads/BusyBox.html#item_gunzip" target="_blank">gunzip</a>
<a href="http://linux.die.net/man/1/unzip" target="_blank">unzip</a>
<a href="http://linux.die.net/man/1/unrar" target="_blank">unrar</a>
</fieldset>
<fieldset><legend>source</legend>
<input ondblclick="getfilename()" type="text" size="55" name="filename" id="filename" value="<?php print $_REQUEST['filename'] ?>"/>
<input type="button" value="show" onclick="$('action').value='show';f.submit()" />
</fieldset>
<fieldset><legend>destination</legend>
<input type="text" size="55" name="target" id="target" value=""/>
<input id="go" type="button" value="<?php print $_REQUEST['program'] ?>" onclick="document.getElementById('action').value='unzip';f.submit()" />
</fieldset>
</form>
<fieldset class="d"><pre style="margin-top:0px;height:300px;overflow:auto;"><?php print $content ?></pre></fieldset>
<div id="fileselect"><div>
</body></html>
dir.php<?php
$dir=($_REQUEST['dir']!='' && file_exists($_REQUEST['dir']))?$_REQUEST['dir']:'.';
chdir($dir);
$dirarray = @scandir('.'); natcasesort($dirarray);
print '<b>'.$dir.'<b>';
print '<div id="cancel"'.
' onclick=" document.getElementById('fileselect').style.display='none';">X</div><table>';
foreach($dirarray as $entry) {
if (@filetype($entry)=="dir") {
if ($dir == "/" && ($entry == "." || $entry == "..")) $path = "/";
elseif ($entry == '.') $path = $dir;
elseif ($entry == '..') $path = substr($dir,0,strrpos($dir,"/")==0?1:strrpos($dir,"/"));
elseif ($dir == "/") $path = '/'.$entry;
else $path = $dir.'/'.$entry;
$action="load('".$path."','')";
}
else
if ($dir == "/") {
$path="/".$entry;
$action="document.getElementById('filename').value='".$path."'";
}
else {
$path=$dir."/".$entry;
$action="document.getElementById('filename').value='".$path."'";
}
print '<tr title="'.$path.'" onclick="'.$action.'" onmouseover="this.style.backgroundColor='#fff'"
onmouseout="this.style.backgroundColor='#bbf'" ondblclick="f.submit()">'.
'<td class="l">'.@filetype($entry).'</td>'.
'<td>'.sprintf("%o",@fileperms($entry)&0777).'</td>'.
'<td>'.@fileowner($entry).'</td>'.
'<td>'.@filegroup($entry).'</td>'.
'<td>'.@filesize($entry).'</td>'.
'<td>'.date("Y-m-d H:i:s",@filemtime($entry)).'</td>'.
'<td class="l">'.$entry.'</td></tr>';
}
print '</table>';
?>
De pakketten tar, unzip en unrar moeten nog wel via IPKG geïnstalleerd worden.
Oja, de icoontjes: (http://94.212.224.81/images/syno/zip32.png) en (http://94.212.224.81/images/syno/zip16.png)
Werking: Via dubbelklikken (of met de hand invoeren) bij source het gewenste archief selecteren. Dubbelklik geeft een zoekvenster weer!. Vervolgens de juiste uitpakmethode selecteren (tar etc.) evt. opties aangeven en een destination dir opgeven. Show geeft de inhoud van het archief weer; De knop er onder pakt daadwerkelijk uit.
Succes!
Wizjos
-
Cool! Ik doe dit nu nog regelmatig in een Telnet sessie.
Weet je toevallig ook een methode of script om RAR om te zetten in ZIP? Ik download regelmatig roms voor NDS of GBA en OfflineList wil ze in ZIP of G7 hebben. Nu moet ik ze dus regelmatig met het handje van RAR omzetten in ZIP. WinRAR heeft wel een optie om te convetreren, maar via Windows gaat dit helaas erg langszaam (eerst van DS naar client en vervolgens weer terug naar DS).
-
Geniaal, precies wat ik nodig heb. :lol:
-
Hi Matr1x,
Leuk dat je zo enthousiast bent :D
Ik ken zo niet een standaard oplossing die kan unrar-en en daarna weer zippen... :( Wat echter wel zou kunnen is hiervoor iets proberen te gaan maken. Je hebt tenslotte unrar al geïnstalleerd staan en zip is via IPKG te installeren.... Dan zou je denken dat een stuk script dat je rar bestand uitpakt naar een tijdelijke dir en de uitgepakte bestanden vervolgens weer zipt tot de mogelijkheden zou moeten kunnen behoren....
Ik beloof niets, maar ik zal eens kijken wat ik daarmee kan... :mrgreen:
Groet,
Wizjos
-
Matr1x en anderen die er belang bij hebben,
Ik heb de code van bovenstaande post een tikje veranderd zodat je met een druk op de knop een rar bestand via uit- en inpakken kunt omtoveren tot een zip!
Tevens viel mij op dat bij bestands- of directorynamen waar een spatie in zit het script niet juist werkt. Om dat op te lossen wordt hierop getest en indien gevonden wordt de desbetreffende string voorzien van quotejes (')... (dit zal ik ook in het eerder geposte script even bijwerken).
Het lijkt me duidelijk dat om deze optie goed te kunnen laten werken zip via IPKG geïnstalleerd dient te zijn :mrgreen:
De enige code die gewijzigd is, is unzip.php. Hierbij de nieuwe code:
unzip.php<?php
putenv('HTTP_COOKIE='.$_SERVER['HTTP_COOKIE']);
putenv('REMOTE_ADDR='.$_SERVER['REMOTE_ADDR']);
$user=exec('/usr/syno/synoman/webman/modules/authenticate.cgi');
if($user != 'admin'){
header("HTTP/1.0 403 Forbidden");
exit;
}
if (!isset($_REQUEST['filename'])) $_REQUEST['filename'] = $f1name;
if (!isset($_REQUEST['program'])) $_REQUEST['program'] = $f2name;
if (!isset($_REQUEST['options'])) $_REQUEST['options'] = $f3name;
if (isset($_REQUEST['filename'])) {
if (strpos($_REQUEST['filename'], " ") > 0) $_REQUEST['filename']="'".$_REQUEST['filename']."'";
if (strpos($_REQUEST['target'], " " > 0)) $_REQUEST['target'] = "'".$_REQUEST['target']."'";
if ($_REQUEST['action'] == 'show') {
if ($_REQUEST['program'] == 'tar -z') {
$content="tar -t".$_REQUEST['options']." ".$_REQUEST['filename']."<br/>";
exec("tar -t".$_REQUEST['options']." ".$_REQUEST['filename'],$out);
}
elseif ($_REQUEST['program'] == 'tar -j') {
$content="/opt/bin/tar -t".$_REQUEST['options']." ".$_REQUEST['filename']."<br/>";
exec("/opt/bin/tar -t".$_REQUEST['options']." ".$_REQUEST['filename'],$out);
}
elseif ($_REQUEST['program'] == 'gunzip') {
$content="ls -l ".$_REQUEST['filename']."<br/>";
exec("ls -l ".$_REQUEST['filename'],$out);
}
elseif ($_REQUEST['program'] == 'unzip') {
$content="/opt/bin/unzip -Z".$_REQUEST['options']." ".$_REQUEST['filename']."<br/>";
exec("/opt/bin/unzip -Z".$_REQUEST['options']." ".$_REQUEST['filename'],$out);
}
elseif ($_REQUEST['program'] == 'unrar') {
$content="/opt/bin/unrar l".$_REQUEST['options']." ".$_REQUEST['filename']."<br/>";
exec("/opt/bin/unrar l".$_REQUEST['options']." ".$_REQUEST['filename']."| sed '1,5d'",$out);
array_pop($out);array_pop($out);array_pop($out);
}
if (count($out)) foreach($out as $item) $content.=$item."<br/>";
}
if ($_REQUEST['action'] == 'convert') {
if ($_REQUEST['program'] == 'unrar') {
$content="/opt/bin/unrar x".$_REQUEST['options']." -y ".$_REQUEST['filename']." /volume1/tmp/unrar/<br/>";
exec("/opt/bin/unrar x".$_REQUEST['options']." -y ".$_REQUEST['filename']." /volume1/tmp/unrar/");
exec("/opt/bin/unrar lb ".$_REQUEST['filename'],$out);
$positie = strripos($_REQUEST['filename'],'/');
$filename = substr($_REQUEST['filename'],$positie+1);
$filename = str_replace('.rar','.zip',$_REQUEST['filename']);
exec("cd /volume1/tmp/unrar/;/opt/bin/zip -mrv ".$filename." *");
$content .= "/opt/bin/zip -mrv ".$filename."<br/>";
$content .= "Succesfully created ".$filename."<br/>";
//voor wie een grenzenloos vertrouwen heeft en automatisch het origineel wil laten verwijderen, verwijder het commentaar van de volgende regel
//exec("rm ".$_REQUEST['filename']);
}
}
if ($_REQUEST['action'] == 'unzip') {
if ($_REQUEST['program'] == 'tar -z') {
if ($_REQUEST['target'] == "") $_REQUEST['target']=dirname($_REQUEST['filename']);
if ($_REQUEST['target'][strlen($_REQUEST['target'])-1] != "/") $_REQUEST['target'].='/';
$content="tar -x".$_REQUEST['options']." ".$_REQUEST['filename']." -C ".$_REQUEST['target']."<br/>";
exec("tar -x".$_REQUEST['options']." ".$_REQUEST['filename']." -C ".$_REQUEST['target'],$out);
}
elseif ($_REQUEST['program'] == 'tar -j') {
if ($_REQUEST['target'] == "") $_REQUEST['target']=dirname($_REQUEST['filename']);
if ($_REQUEST['target'][strlen($_REQUEST['target'])-1] != "/") $_REQUEST['target'].='/';
$content="/opt/bin/tar -x".$_REQUEST['options']." ".$_REQUEST['filename']." -C ".$_REQUEST['target']."<br/>";
exec("/opt/bin/tar -x".$_REQUEST['options']." ".$_REQUEST['filename']." -C ".$_REQUEST['target'],$out);
}
elseif ($_REQUEST['program'] == 'gunzip') {
if (preg_match("/.*.zip$/i",$_REQUEST['filename'])) $content="gunzip does not unzip a .zip-file; use unzip";
else {
if ($_REQUEST['target'] == "") $_REQUEST['target']=preg_replace("/^(.+)(.gz|-gz|.z|-z|_z|.Z)$/","\1",$_REQUEST['filename']);
if ($_REQUEST['target'] == $_REQUEST['filename']) $content="no destination found";
else {
$content="gunzip -c".$_REQUEST['options']." ".$_REQUEST['filename']." > ".$_REQUEST['target']."<br/>";
exec("gunzip -c".$_REQUEST['options']." ".$_REQUEST['filename']." > ".$_REQUEST['target'],$out);
}
}
}
elseif ($_REQUEST['program'] == 'unzip') {
if ($_REQUEST['target'] == "") $_REQUEST['target']=dirname($_REQUEST['filename']);
if ($_REQUEST['target'][strlen($_REQUEST['target'])-1] != "/") $_REQUEST['target'].='/';
$content="/opt/bin/unzip ".$_REQUEST['options']." ".$_REQUEST['filename']." -d ".$_REQUEST['target']."<br/>";
exec("/opt/bin/unzip ".$_REQUEST['options']." ".$_REQUEST['filename']." -d ".$_REQUEST['target']);
exec("/opt/bin/unzip -Z -1 ".$_REQUEST['filename'],$out);
}
elseif ($_REQUEST['program'] == 'unrar') {
if ($_REQUEST['target'] == "") $_REQUEST['target']=dirname($_REQUEST['filename']);
if ($_REQUEST['target'][strlen($_REQUEST['target'])-1] != "/") $_REQUEST['target'].='/';
$content="/opt/bin/unrar x".$_REQUEST['options']." -y ".$_REQUEST['filename']." ".$_REQUEST['target']."<br/>";
exec("/opt/bin/unrar x".$_REQUEST['options']." -y ".$_REQUEST['filename']." ".$_REQUEST['target']);
exec("/opt/bin/unrar lb ".$_REQUEST['filename'],$out);
}
if (count($out)) foreach($out as $item) {
$out1="";
exec("ls -l ".$_REQUEST['target'].$item,$out1);
$content.=$out1[0]."<br/>";
}
}
setcookie("f1name",$_REQUEST['filename']);
setcookie("f2name",$_REQUEST['program']);
setcookie("f3name",$_REQUEST['options']);
} else {
$_REQUEST['filename']='/';
}
?>
<html><head><title>fileinspector</title></head><body>
<script>
var myXMLHTTPRequest = (window.XMLHttpRequest)?
new XMLHttpRequest():
new ActiveXObject("Microsoft.XMLHTTP");
function LoadHTML(htmlfile){
myXMLHTTPRequest.open("GET", htmlfile, false); myXMLHTTPRequest.send(null);
return myXMLHTTPRequest.responseText;
}
function load(p) {
var d = LoadHTML('dir.php?dir='+p);
co=document.getElementById('fileselect');
co.innerHTML=d;
}
function getfilename(){
document.getElementById('fileselect').style.display='block';
load('<?php print dirname($_REQUEST['filename']) ?>');
}
function $(e){ return document.getElementById(e); }
</script>
<style>body,input,td{font:11px Verdana}
#fileselect{position:absolute;top:50px;left:300px;width:480px;height:400px;z-index:7;
background-color:#bbf;overflow:auto;padding:5px;border:1px solid #666;display:none;}
input{font:10px verdana}
#cancel{font:11px Verdana;position:absolute;top:5px;right:5px;width:9px;hight:10px;
color:#fff;padding:3px;cursor:pointer;background-color:#222}
.r{text-align:right;width:40px}
.d{background-color:#ddddff;}</style>
<form id="f" name="f" method="get" action="unzip2.php">
<input type="hidden" name="action" id="action" value="" />
<fieldset><legend>program selection</legend>
<input type="radio" name="program" value="tar -z" <?php print $_REQUEST['program']=='tar -z'?'checked="checked"':'' ?>
onclick="$('options').value='vzf';$('go').value=this.value;" />
<span title=".tar.gr, .tgz, .taz">tar -z</span>
<input type="radio" name="program" value="tar -j" <?php print $_REQUEST['program']=='tar -j'?'checked="checked"':'' ?>
onclick="$('options').value='vjf';$('go').value=this.value;" />
<span title=".tar.bz2">tar -j</span>
<input type="radio" name="program" value="gunzip" <?php print $_REQUEST['program']=='gunzip'?'checked="checked"':'' ?>
onclick="$('options').value='f';$('go').value=this.value;" />
<span title=".gz, -gz, .z, -z, _z, .Z">gunzip</span>
<input type="radio" name="program" value="unzip" <?php print $_REQUEST['program']=='unzip'?'checked="checked"':'' ?>
onclick="$('options').value='';$('go').value=this.value;" />
<span title=".zip">unzip</span>
<input type="radio" name="program" value="unrar" <?php print $_REQUEST['program']=='unrar'?'checked="checked"':'' ?>
onclick="$('options').value='';$('go').value=this.value;" />
<span title=".rar">unrar</span>
<span style="margin-left:50px">options:</span>
<input type="text" name="options" id="options" value="<?php print $_REQUEST['options'] ?>" />
for options see manual
<a href="http://busybox.net/downloads/BusyBox.html#item_tar" target="_blank">tar -z</a>
<a href="http://linux.die.net/man/1/tar" target="_blank">tar -j</a>
<a href="http://busybox.net/downloads/BusyBox.html#item_gunzip" target="_blank">gunzip</a>
<a href="http://linux.die.net/man/1/unzip" target="_blank">unzip</a>
<a href="http://linux.die.net/man/1/unrar" target="_blank">unrar</a>
</fieldset>
<fieldset><legend>source</legend>
<input ondblclick="getfilename()" type="text" size="55" name="filename" id="filename" value="<?php print $_REQUEST['filename'] ?>"/>
<input type="button" value="show" onclick="$('action').value='show';f.submit()" />
<input type="button" value="Convert RAR to ZIP" onclick="$('action').value='convert';f.submit()" />
</fieldset>
<fieldset><legend>destination</legend>
<input type="text" size="55" name="target" id="target" value=""/>
<input id="go" type="button" value="<?php print $_REQUEST['program'] ?>" onclick="document.getElementById('action').value='unzip';f.submit()" />
</fieldset>
</form>
<fieldset class="d"><pre style="margin-top:0px;height:300px;overflow:auto;"><?php print $content ?></pre></fieldset>
<div id="fileselect"><div>
</body></html>
Even ter verduidelijking: een in het source-venster opgegeven .rar bestand wordt uitgepakt naar /volume1/tmp/unrar/ en daarna gezipt naar het pad waar het origineel staat, onder de originele bestandsnaam, maar dan met de extensie zip (en een zip inhoud natuurlijk) :mrgreen:
Wie gelijk het originele rar bestand verwijderd wil zien dient bij regel 50 het commentaar weg te halen.
Test voor de zekerheid eerst; alles is voor eigen rekening :mrgreen:
Laat maar horen wat je er van vindt :D
Groet,
Wizjos
-
Super! Ik ga er gelijk mee aan de slag en post mijn bevindingen wel. Ik denk dat ik maar even snel een PHP cursusje ga doen, want dat is toch wel handig blijkt maar weer. Bedankt!
-
Bij mij werkt het alleen als ik de code ter beveiliging van uitvoering zonder admin rechten uit unzip.php sloop. :shock:
Ik ben wel gewoon ingelogd als admin in SDM. :roll:
-
Glitch,
Da's heel vreemd :shock: Krijg je überhaupt iets in beeld (een melding) als je die code er in laat? Geen kopiëerfout per ongeluk?
Laat maar even weten!
Groet,
Wizjos
-
Glitch,
Da's heel vreemd :shock: Krijg je überhaupt iets in beeld (een melding) als je die code er in laat? Geen kopiëerfout per ongeluk?
Laat maar even weten!
Groet,
Wizjos
Ik kreeg in eerste instantie helemaal niks in beeld, alleen een lege iFrame. Ik heb vervolgens een print('Access Denied'); aan de check toegevoegd die vervolgens netjes werd getoond. Na dit stukje beveiligingscode in zijn geheel uitgecommentarieerd te hebben kreeg ik de GUI wel gewoon te zien. Hieronder de omstandigheden.
- DS207+ met meest recente firmware
- ingelogd als systeembeheerder (admin)
- telnet niet aan, ssh wel
- SDM wordt automatisch doorgeleid naar https op port 5001
- webstation staat niet aan
- open_basedir is niet leeg, slechts enkele directories zijn hierin opgenomen (dit zou weleens het probleem kunnen zijn bedenk ik me net, ik zal /usr/syno/synoman/webman/modules/ hier eens aan toevoegen)
- firefox 3.04
-
Bleek in safe_mode_exec_dir te zitten, deze dient leeg te zijn in php.ini. Alles werkt nu naar behoren, nogmaals bedankt.
-
Bleek in safe_mode_exec_dir te zitten, deze dient leeg te zijn in php.ini. Alles werkt nu naar behoren, nogmaals bedankt.
Graag gedaan!
Veel plezier ermee!
Wizjos
-
Hallo Wizjos,
Ik ben een starter op het gebied van Linux PHP etc. Kun je me daarom nog wat extra informatie geven mbt het installeren van deze shell?
A. De pakketten tar, unzip en unrar; kun je aangeven waar ik die het best vandaan kan halen (voor installatie via IPKG)?
B. De codes die je opgeeft (zoals bij unzip.php) moet ik neem ik aan in een tekstfile opslaan met de naam die je erbij opgeeft.
Waar moeten deze files dan opgeslagen worden op de CS?
C. Wat doe ik met de icoontjes?
D. Het is me niet helemaal duidelijk hoe de CS de shell herkent en weergeeft in de ADMIN pagina. Gebeurt dit automatisch na een reboot van de CS?
Dank, Dutchsea
-
Dutschsea,
Alles staat op zich al beschreven in de 3rd party apps handleiding (http://www.synology-forum.nl/viewtopic.php?f=83&t=2182), maar ik zal je nog wat meer helderheid proberen te verschaffen :mrgreen:
A) Ik heb je vraag een aantal maal gelezen, maar kan er niet achter komen wat je precies bedoelt/vraagt... De pakketten tar, rar en zip heb ik inderdaad via IPKG geïnstalleerd. Zelf compileren is natuurlijk ook een optie, maar lijkt me niet zo handig :wink:
Als ik je vraag niet goed begrepen heb, stel 'm dan nog eens anders :mrgreen:
B) Klopt! Het zijn simpele tekstbestanden die je vervolgens niet .txt noemt, maar .php. Je slaat ze op in /usr/syno/synoman/phpsrc/jouw-applicatie-directory-naam-hier/.
C) De icoontjes plaats je op een logische plek. Application.cfg plaats je in de dir /usr/syno/synoman/webman/3rdparty/jouw-applicatie-directory-naam-hier/. Je zou de icoontjes hier kunnen plaatsen, of voor puriteinen onder /usr/syno/synoman/webman/3rdparty/jouw-applicatie-directory-naam-hier/images/ (pas dan ook wel de iconen-paden in application.cfg aan!)
D) Er van uitgaande dat je DSM versie recent genoeg is, zal na plaatsing van een geldig bestand application.cfg in /usr/syno/synoman/webman/3rdparty/jouw-applicatie-directory-naam-hier/ de DSM bij opnieuw laden (niet middels een refresh, maar echt uitloggen, desnoods de cache van je browser legen, en opnieuw inloggen op de DSM) onderaan de tree automatisch een icoontje Third-party Applications moeten verschijnen...
Nog even ten aanzien van punt B en C: Zo ik al schreef zijn beide soorten bestanden (.php en .cfg) gewone tekstbestanden en zou je ze gewoon eerst op je eigen PC kunnen aanmaken. Echter, tussen Windows en Linux bestaat het beruchte einde-regel probleem. Een Windows tekstbestand zal bij opvragen in Linux aan het eind van iedere regel een ^M-teken laten zien. Voor PHP en .cfg-bestanden is dit in principe niet onmogelijk. Voor .cgi en shell-scripts is het echter onmogelijk; de commando's in de bestanden worden niet uitgevoerd!
Het is dus beter om je gelijk aan te wennen dit goed te doen en dus alle bestanden op het systeem waar het systeem mee moet kunnen omgaan zónder die extra ^M op te leveren.. Er zijn ook wel editors die dit voor je kunnen (bv. Ultraedit).
Lees vooral ook de eigen guide van Synology (http://download.synology.com/download/ds/userguide/Synology%20NAS%20Server%203rd-Party%20Apps%20Integration%20Guide.pdf)
Ik hoop dat je er verder mee komt!
Succes,
Wizjos
-
Hoi Wizjos,
Dank voor de uitleg. Ben alweer wat slimmer geworden :)
Vwb punt A; ik vroeg me af waar deze bestanden gedowload kunnen worden. Maar in de uitleg van IPKG zag ik later hoe dat werkt. Voor de icoontjes neem ik aan dat de kleine gesaved moet worden met de naam zip16.png (is vast 16 pixels groot) en de grotere met zip32.png?
En als ik de icoontjes in de directory /usr/syno/synoman/webman/3rdparty/jouw-applicatie-directory-naam-hier/images/ plaats, wordt dan het path in de Application.cfg dan:
path = /usr/syno/synoman/webman/3rdparty/jouw-applicatie-directory-naam-hier/images/ ?
Voor de naam van de directory "jouw-applicatie-directory-naam-hier" lijkt me dat in dit geval "Unzip Archives" de meest logische keuze?
Groetjes,
Dutchsea
-
Dutchsea,
Je gedachten over de plaatjesnamen klopt; het pad er naar mag ook zijn: 'images/plaatje.png' (dus dat hele stuk er voor mag je thuis laten :mrgreen: )
Directorynaam voor applicatie is ook in orde (zou er zelf alleen geen spatie in plaatsen, maar da's persoonlijk)
Groet,
Wizjos
-
Hoi Wizjos,
Ik neem aan dat het pad "path = /phpsrc/unzip/unzip.php" moet blijven bestaan in de file Application.cfg
(dat pad heeft vast een reden)
Dan wordt de code denk ik (je kan vast meerdere paden in de path opdracht meegeven maar kan voor php geen beschrijving van het het path commando vinden):
text = Unzip Archives
description = Unzip Archives
icon_16 = zip16.png
icon_32 = zip32.png
type = embedded
path = /phpsrc/unzip/unzip.php
path = /images/zip16.png
path = /images/zip32.png
Is het overigens nodig om IPKG en alle andere 3rd party apps (zoals deze) opnieuw te installeren na een firmware upgrade van de DS/CS?
Thx,
Wouter
-
Ik neem aan dat het pad "path = /phpsrc/unzip/unzip.php" moet blijven bestaan in de file Application.cfg
(dat pad heeft vast een reden)
Klopt! Reden is simpelweg dat de DSM zo in elkaar zit dat 3rd-party apps altijd in een subdirectory van /phpsrc dienen te staan :wink:
text = Unzip Archives
description = Unzip Archives
icon_16 = zip16.png
icon_32 = zip32.png
type = embedded
path = /phpsrc/unzip/unzip.php
path = /images/zip16.png
path = /images/zip32.png
Bijna goed! Fout is drie maal een path opgeven. Feitelijk kan dan alleen het laatste path commando gelden als pad naar de applicatie en dat zou in dit geval natuurlijk nergens op slaan :mrgreen:
Goed is het op deze wijze:text = Unzip Archives
description = Unzip Archives
icon_16 = images/zip16.png
icon_32 = images/zip32.png
type = embedded
path = /phpsrc/unzip/unzip.php
Want zo schrijft de handleiding: :mrgreen: “icon_16” is the icon path for the menu item icon. It is a 16x16 (pixel) .PNG file.
The icon must be put under /usr/syno/synoman/webman/3rdparty/xxx/ where xxx is the directory name of your application.
For example, if you create a directory named "images" and put the icon “icon.png” in it, the full path of the icon would be:
/usr/syno/synoman/webman/3rdparty/xxx/images/icon.png
And the icon_16 value should be set to "images/icon.png" (omit the part /usr/syno/synoman/webman/3rdparty/xxx/).
Is het overigens nodig om IPKG en alle andere 3rd party apps (zoals deze) opnieuw te installeren na een firmware upgrade van de DS/CS?
Ja, tenzij je voorzorgsmaatregelen neemt... Dit geldt overigens voor alle instellingen die je verandert aan zaken die standaard op de systeempartitie staan (dus bv php.ini om er maar eens eentje te noemen)...
Wat bijvoorbeeld een mogelijkheid is is de 3rd party manager (http://www.synology-forum.nl/viewtopic.php?f=83&t=2192). Daarmee kun je je 3rd party spul veiligstellen. Lees voor je echter al te enthousiast aan de gang gaat de 3rd party apps handleiding (http://www.synology-forum.nl/viewtopic.php?f=83&t=2182) aandachtig door! Aangezien je in sommige gevallen nogal ingrijpt op de standaard configuratie en beveiliging zoals die door Synology bedacht is is het raadzaam om te bezinnen eer je begint met modificeren. Voor een heel aantal zaken geldt dat het nogal gauw de diepte ingaat! Laat je daardoor niet afschrikken, maar zorg tegelijkertijd wel dat je 'boven de materie' blijft staan! :mrgreen:
Wat natuurlijk nog beter is, is om sowiezo, onafhankelijk van upgrades, te zorgen voor een adequate backup strategie... Een actie als een system-upgrade plan je; een systeemcrash komt altijd onaangekondigd...als je begrijpt wat ik bedoel... :mrgreen:
Veel succes!
Wizjos
-
OK, ik ga er mee aan de slag als ik de nieuwe firmware op mijn CS heb gezet.
(en dat kan pas als ik mijn desktop weer aan de praat heb).
Ik zal ook nog de handleiding lezen voor ik weer met allerlei vragen kom :)
-
OK, ik ga er mee aan de slag als ik de nieuwe firmware op mijn CS heb gezet.
(en dat kan pas als ik mijn desktop weer aan de praat heb).
Ik zal ook nog de handleiding lezen voor ik weer met allerlei vragen kom :)
Dutchsea, puur uit interesse: Wat voor CS heb je en welke firmware ga je plaatsen?
Succes overigens!
Wizjos
-
Hoi Wizjos,
CS407. Ik wil er de laatste versie firmware opzetten (DSM 2.0-0728) ivm de Enhanced eMule download usability.
Dutchsea
-
Ik zit met het volgende probleem:
De 3rd party app is zichtbaar en wordt geopend, maar als ik vervolgens op show klik krijg ik de volgende pagina:
Sorry, de pagina die u zoekt kan niet weergegeven worden.
Waar kan dit aan liggen? Vindt hij dir.php niet?
-
Ik zit met het volgende probleem:
De 3rd party app is zichtbaar en wordt geopend, maar als ik vervolgens op show klik krijg ik de volgende pagina:
Sorry, de pagina die u zoekt kan niet weergegeven worden.
Waar kan dit aan liggen? Vindt hij dir.php niet?
Ik heb hetzelfde probleem na een update naar de nieuwste firmware (v2.2) ... enig idee?
-
Ik heb hetzelfde probleem na een update naar de nieuwste firmware (v2.2) ... enig idee?
Hmmm, kan het zijn dat je na upgrade de 3rd party apps aanpassingen niet opnieuw hebt doorgevoerd?
Groet,
Wizjos
-
Dat was ook mijn eerste gedacht en ik ben direct alles nogmaals langs gelopen maar alle aanpassingen waren correct doorgevoerd ... :roll:
Maar ik heb inmiddels meer rariteiten ontdekt na de upgrade. Ik moet bijvoorbeeld IPKG na elke reboot opnieuw installeren. Ik kan dus niet met zekerheid zeggen of dit aan deze 3rd party app of aan mijn DS207+ ligt.
-
Ik zu bijna gaan denken dat ik met mijn achterlopende model (406) en dito firmware goed af ben.... :mrgreen: