Auteur Topic: Unzip, tar unrar als 3rd party app  (gelezen 14057 keer)

Offline wizjos

  • Administrator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 123
  • -Ontvangen: 181
  • Berichten: 1.999
Unzip, tar unrar als 3rd party app
« Gepost op: 16 november 2008, 16:31:46 »
Om m.b.v. een GUI te kunnen uitpakken de volgende oplossing:



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='&#46;$_SERVER['HTTP_COOKIE'&#93;);
putenv('REMOTE_ADDR='&#46;$_SERVER['REMOTE_ADDR'&#93;);
$user=exec('/usr/syno/synoman/webman/modules/authenticate&#46;cgi');
if(
$user != 'admin'){
   
header("HTTP/1&#46;0 403 Forbidden");
   exit;
}
if (!isset(
$_REQUEST['filename'&#93;)) $_REQUEST['filename'&#93; = $f1name;
if (!isset($_REQUEST['program'&#93;))  $_REQUEST['program'&#93;  = $f2name;
if (!isset($_REQUEST['options'&#93;))  $_REQUEST['options'&#93;  = $f3name;
if (isset($_REQUEST['filename'&#93;)) {
  
if (strpos($_REQUEST['filename'&#93;, " ") > 0) $_REQUEST['filename'&#93;="'"&#46;$_REQUEST['filename'&#93;&#46;"'";
  
if (strpos($_REQUEST['target'&#93;, " " > 0)) $_REQUEST['target'&#93; = "'"&#46;$_REQUEST['target'&#93;&#46;"'";
  
if ($_REQUEST['action'&#93; == 'show') {
    
if ($_REQUEST['program'&#93; == 'tar -z') {
      
$content="tar -t"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;"<br/>";
      
exec("tar -t"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;,$out);
      
}
    elseif (
$_REQUEST['program'&#93; == 'tar -j') {
      
$content="/opt/bin/tar -t"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;"<br/>";
      
exec("/opt/bin/tar -t"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;,$out);
      
}
    elseif (
$_REQUEST['program'&#93; == 'gunzip') {
      
$content="ls -l "&#46;$_REQUEST['filename'&#93;&#46;"<br/>";
      
exec("ls -l "&#46;$_REQUEST['filename'&#93;,$out);
      
}
    elseif (
$_REQUEST['program'&#93; == 'unzip') {
      
$content="/opt/bin/unzip -Z"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;"<br/>";
      
exec("/opt/bin/unzip -Z"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;,$out);
      
}
    elseif (
$_REQUEST['program'&#93; == 'unrar') {
      
$content="/opt/bin/unrar l"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;"<br/>";
      
exec("/opt/bin/unrar l"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;"| sed '1,5d'",$out);
      
array_pop($out);array_pop($out);array_pop($out);
      }                       
    if (
count($out)) foreach($out as $item$content&#46;=$item&#46;"<br/>";
  
}
  if (
$_REQUEST['action'&#93; == 'unzip') {
    
if ($_REQUEST['program'&#93; == 'tar -z') {
       
if ($_REQUEST['target'&#93; == "") $_REQUEST['target'&#93;=dirname($_REQUEST['filename'&#93;); 
       
if ($_REQUEST['target'&#93;[strlen($_REQUEST['target'&#93;)-1&#93; != "/") $_REQUEST['target'&#93;&#46;='/';
       
$content="tar -x"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;" -C "&#46;$_REQUEST['target'&#93;&#46;"<br/>";
       
exec("tar -x"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;" -C "&#46;$_REQUEST['target'&#93;,$out);
       
}
    elseif (
$_REQUEST['program'&#93; == 'tar -j') {
       
if ($_REQUEST['target'&#93; == "") $_REQUEST['target'&#93;=dirname($_REQUEST['filename'&#93;); 
       
if ($_REQUEST['target'&#93;[strlen($_REQUEST['target'&#93;)-1&#93; != "/") $_REQUEST['target'&#93;&#46;='/';
       
$content="/opt/bin/tar -x"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;" -C "&#46;$_REQUEST['target'&#93;&#46;"<br/>";
       
exec("/opt/bin/tar -x"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;" -C "&#46;$_REQUEST['target'&#93;,$out);        
    
}
    elseif (
$_REQUEST['program'&#93; == 'gunzip') {
       
if (preg_match("/&#46;*&#46;zip$/i",$_REQUEST['filename'&#93;)) $content="gunzip does not unzip a &#46;zip-file; use unzip";
       
else {
         if (
$_REQUEST['target'&#93; == "") $_REQUEST['target'&#93;=preg_replace("/^(&#46;+)(&#46;gz|-gz|&#46;z|-z|_z|&#46;Z)$/","\1",$_REQUEST['filename'&#93;);
         
if ($_REQUEST['target'&#93; == $_REQUEST['filename'&#93;) $content="no destination found";
         
else { 
           
$content="gunzip -c"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;" > "&#46;$_REQUEST['target'&#93;&#46;"<br/>";
           
exec("gunzip -c"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;" > "&#46;$_REQUEST['target'&#93;,$out);
         
}
      }        
    }
    elseif (
$_REQUEST['program'&#93; == 'unzip') {
       
if ($_REQUEST['target'&#93; == "") $_REQUEST['target'&#93;=dirname($_REQUEST['filename'&#93;); 
       
if ($_REQUEST['target'&#93;[strlen($_REQUEST['target'&#93;)-1&#93; != "/") $_REQUEST['target'&#93;&#46;='/';
       
$content="/opt/bin/unzip "&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;" -d "&#46;$_REQUEST['target'&#93;&#46;"<br/>";
       
exec("/opt/bin/unzip "&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;" -d "&#46;$_REQUEST['target'&#93;);
       
exec("/opt/bin/unzip -Z -1 "&#46;$_REQUEST['filename'&#93;,$out);               
    
}
    elseif (
$_REQUEST['program'&#93; == 'unrar') {
       
if ($_REQUEST['target'&#93; == "") $_REQUEST['target'&#93;=dirname($_REQUEST['filename'&#93;); 
       
if ($_REQUEST['target'&#93;[strlen($_REQUEST['target'&#93;)-1&#93; != "/") $_REQUEST['target'&#93;&#46;='/';
       
$content="/opt/bin/unrar x"&#46;$_REQUEST['options'&#93;&#46;" -y "&#46;$_REQUEST['filename'&#93;&#46;" "&#46;$_REQUEST['target'&#93;&#46;"<br/>";
       
exec("/opt/bin/unrar x"&#46;$_REQUEST['options'&#93;&#46;" -y "&#46;$_REQUEST['filename'&#93;&#46;" "&#46;$_REQUEST['target'&#93;);
       
exec("/opt/bin/unrar lb "&#46;$_REQUEST['filename'&#93;,$out);               
    
}            
    if (
count($out)) foreach($out as $item) {
      
$out1="";
      
exec("ls -l "&#46;$_REQUEST['target'&#93;&#46;$item,$out1);
      
$content&#46;=$out1[0&#93;&#46;"<br/>";
      
}
  }
  
setcookie("f1name",$_REQUEST['filename'&#93;);
  
setcookie("f2name",$_REQUEST['program'&#93;);
  
setcookie("f3name",$_REQUEST['options'&#93;);
} else {
  
$_REQUEST['filename'&#93;='/';
}
?>

<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'&#93;) ?>');
}
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'&#93;=='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'&#93;=='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'&#93;=='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'&#93;=='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'&#93;=='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'&#93; ?>" />
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'&#93; ?>"/>
<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'&#93; ?>" 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'&#93;!='' && file_exists($_REQUEST['dir'&#93;))?$_REQUEST['dir'&#93;:'&#46;';
chdir($dir);
$dirarray = @scandir('&#46;'); natcasesort($dirarray);

print 
'<b>'&#46;$dir&#46;'<b>'; 
print '<div id="cancel"'&#46; 
      
' onclick=" document&#46;getElementById('fileselect')&#46;style&#46;display='none';">X</div><table>';
foreach(
$dirarray as $entry) {
  if (@
filetype($entry)=="dir") {
    if (
$dir == "/" && ($entry == "&#46;" || $entry == "&#46;&#46;")) $path "/";
    elseif (
$entry == '&#46;'$path $dir;
    elseif (
$entry == '&#46;&#46;'$path substr($dir,0,strrpos($dir,"/")==0?1:strrpos($dir,"/"));
    elseif (
$dir == "/"$path '/'&#46;$entry;
    
else $path $dir&#46;'/'&#46;$entry;
    
$action="load('"&#46;$path&#46;"','')";
    
}
  else 
    if (
$dir == "/") {
      
$path="/"&#46;$entry;
      
$action="document&#46;getElementById('filename')&#46;value='"&#46;$path&#46;"'";
      

    else {
      
$path=$dir&#46;"/"&#46;$entry;
      
$action="document&#46;getElementById('filename')&#46;value='"&#46;$path&#46;"'";
      
}
  print 
'<tr title="'&#46;$path&#46;'" onclick="'&#46;$action&#46;'" onmouseover="this&#46;style&#46;backgroundColor='#fff'"
          
onmouseout="this&#46;style&#46;backgroundColor='#bbf'" ondblclick="f&#46;submit()">'&#46;
        '
<td class="l">'&#46;@filetype($entry)&#46;'</td>'&#46;
        '
<td>'&#46;sprintf("%o",@fileperms($entry)&0777)&#46;'</td>'&#46;
        '
<td>'&#46;@fileowner($entry)&#46;'</td>'&#46; 
        '
<td>'&#46;@filegroup($entry)&#46;'</td>'&#46;                
        '
<td>'&#46;@filesize($entry)&#46;'</td>'&#46;
        '
<td>'&#46;date("Y-m-d H:i:s",@filemtime($entry))&#46;'</td>'&#46;
        '
<td class="l">'&#46;$entry&#46;'</td></tr>';
  }
print '
</table>';
?>
De pakketten tar, unzip en unrar moeten nog wel via IPKG geïnstalleerd worden.

Oja, de icoontjes: en

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
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 Matr1x

  • Global Moderator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 270
  • -Ontvangen: 772
  • Berichten: 5.093
Re: Unzip, tar unrar als 3rd party app
« Reactie #1 Gepost op: 17 november 2008, 11:20:07 »
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).
  • Mijn Synology: DS224+
  • HDD's: 2x HAT3300-4T
  • Extra's: MR2200ac / RT2600ac

Offline Glitch

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 15
Re: Unzip, tar unrar als 3rd party app
« Reactie #2 Gepost op: 17 november 2008, 14:58:32 »
Geniaal, precies wat ik nodig heb.  :lol:

Offline wizjos

  • Administrator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 123
  • -Ontvangen: 181
  • Berichten: 1.999
Re: Unzip, tar unrar als 3rd party app
« Reactie #3 Gepost op: 17 november 2008, 15:08:09 »
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
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 wizjos

  • Administrator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 123
  • -Ontvangen: 181
  • Berichten: 1.999
Re: Unzip, tar unrar als 3rd party app
« Reactie #4 Gepost op: 17 november 2008, 21:31:49 »
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='&#46;$_SERVER['HTTP_COOKIE'&#93;);
putenv('REMOTE_ADDR='&#46;$_SERVER['REMOTE_ADDR'&#93;);
$user=exec('/usr/syno/synoman/webman/modules/authenticate&#46;cgi');
if(
$user != 'admin'){
   
header("HTTP/1&#46;0 403 Forbidden");
   exit;
}
if (!isset(
$_REQUEST['filename'&#93;)) $_REQUEST['filename'&#93; = $f1name;
if (!isset($_REQUEST['program'&#93;))  $_REQUEST['program'&#93;  = $f2name;
if (!isset($_REQUEST['options'&#93;))  $_REQUEST['options'&#93;  = $f3name;
if (isset($_REQUEST['filename'&#93;)) {
  
if (strpos($_REQUEST['filename'&#93;, " ") > 0) $_REQUEST['filename'&#93;="'"&#46;$_REQUEST['filename'&#93;&#46;"'";
  
if (strpos($_REQUEST['target'&#93;, " " > 0)) $_REQUEST['target'&#93; = "'"&#46;$_REQUEST['target'&#93;&#46;"'";
  
if ($_REQUEST['action'&#93; == 'show') {
    
if ($_REQUEST['program'&#93; == 'tar -z') {
      
$content="tar -t"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;"<br/>";
      
exec("tar -t"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;,$out);
      
}
    elseif (
$_REQUEST['program'&#93; == 'tar -j') {
      
$content="/opt/bin/tar -t"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;"<br/>";
      
exec("/opt/bin/tar -t"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;,$out);
      
}
    elseif (
$_REQUEST['program'&#93; == 'gunzip') {
      
$content="ls -l "&#46;$_REQUEST['filename'&#93;&#46;"<br/>";
      
exec("ls -l "&#46;$_REQUEST['filename'&#93;,$out);
      
}
    elseif (
$_REQUEST['program'&#93; == 'unzip') {
      
$content="/opt/bin/unzip -Z"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;"<br/>";
      
exec("/opt/bin/unzip -Z"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;,$out);
      
}
    elseif (
$_REQUEST['program'&#93; == 'unrar') {
      
$content="/opt/bin/unrar l"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;"<br/>";
      
exec("/opt/bin/unrar l"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;"| sed '1,5d'",$out);
      
array_pop($out);array_pop($out);array_pop($out);
      }                       
    if (
count($out)) foreach($out as $item$content&#46;=$item&#46;"<br/>";
  
}
  if (
$_REQUEST['action'&#93; == 'convert') {
    
if ($_REQUEST['program'&#93; == 'unrar') {
       
$content="/opt/bin/unrar x"&#46;$_REQUEST['options'&#93;&#46;" -y "&#46;$_REQUEST['filename'&#93;&#46;" /volume1/tmp/unrar/<br/>";
       
exec("/opt/bin/unrar x"&#46;$_REQUEST['options'&#93;&#46;" -y "&#46;$_REQUEST['filename'&#93;&#46;"  /volume1/tmp/unrar/");
       
exec("/opt/bin/unrar lb "&#46;$_REQUEST['filename'&#93;,$out);               
       
$positie strripos($_REQUEST['filename'&#93;,'/');
       
$filename substr($_REQUEST['filename'&#93;,$positie+1);
       
$filename str_replace('&#46;rar','&#46;zip',$_REQUEST['filename'&#93;);
       
exec("cd /volume1/tmp/unrar/;/opt/bin/zip -mrv "&#46;$filename&#46;" *");
       
$content &#46;= "/opt/bin/zip -mrv "&#46;$filename&#46;"<br/>";
       
$content &#46;= "Succesfully created "&#46;$filename&#46;"<br/>";
       //voor wie een grenzenloos vertrouwen heeft en automatisch het origineel wil laten verwijderen, verwijder het commentaar van de volgende regel
       //exec("rm "&#46;$_REQUEST['filename'&#93;);
    
}
  }
  if (
$_REQUEST['action'&#93; == 'unzip') {
    
if ($_REQUEST['program'&#93; == 'tar -z') {
       
if ($_REQUEST['target'&#93; == "") $_REQUEST['target'&#93;=dirname($_REQUEST['filename'&#93;); 
       
if ($_REQUEST['target'&#93;[strlen($_REQUEST['target'&#93;)-1&#93; != "/") $_REQUEST['target'&#93;&#46;='/';
       
$content="tar -x"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;" -C "&#46;$_REQUEST['target'&#93;&#46;"<br/>";
       
exec("tar -x"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;" -C "&#46;$_REQUEST['target'&#93;,$out);
       
}
    elseif (
$_REQUEST['program'&#93; == 'tar -j') {
       
if ($_REQUEST['target'&#93; == "") $_REQUEST['target'&#93;=dirname($_REQUEST['filename'&#93;); 
       
if ($_REQUEST['target'&#93;[strlen($_REQUEST['target'&#93;)-1&#93; != "/") $_REQUEST['target'&#93;&#46;='/';
       
$content="/opt/bin/tar -x"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;" -C "&#46;$_REQUEST['target'&#93;&#46;"<br/>";
       
exec("/opt/bin/tar -x"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;" -C "&#46;$_REQUEST['target'&#93;,$out);        
    
}
    elseif (
$_REQUEST['program'&#93; == 'gunzip') {
       
if (preg_match("/&#46;*&#46;zip$/i",$_REQUEST['filename'&#93;)) $content="gunzip does not unzip a &#46;zip-file; use unzip";
       
else {
         if (
$_REQUEST['target'&#93; == "") $_REQUEST['target'&#93;=preg_replace("/^(&#46;+)(&#46;gz|-gz|&#46;z|-z|_z|&#46;Z)$/","\1",$_REQUEST['filename'&#93;);
         
if ($_REQUEST['target'&#93; == $_REQUEST['filename'&#93;) $content="no destination found";
         
else { 
           
$content="gunzip -c"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;" > "&#46;$_REQUEST['target'&#93;&#46;"<br/>";
           
exec("gunzip -c"&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;" > "&#46;$_REQUEST['target'&#93;,$out);
         
}
      }        
    }
    elseif (
$_REQUEST['program'&#93; == 'unzip') {
       
if ($_REQUEST['target'&#93; == "") $_REQUEST['target'&#93;=dirname($_REQUEST['filename'&#93;); 
       
if ($_REQUEST['target'&#93;[strlen($_REQUEST['target'&#93;)-1&#93; != "/") $_REQUEST['target'&#93;&#46;='/';
       
$content="/opt/bin/unzip "&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;" -d "&#46;$_REQUEST['target'&#93;&#46;"<br/>";
       
exec("/opt/bin/unzip "&#46;$_REQUEST['options'&#93;&#46;" "&#46;$_REQUEST['filename'&#93;&#46;" -d "&#46;$_REQUEST['target'&#93;);
       
exec("/opt/bin/unzip -Z -1 "&#46;$_REQUEST['filename'&#93;,$out);               
    
}
    elseif (
$_REQUEST['program'&#93; == 'unrar') {
       
if ($_REQUEST['target'&#93; == "") $_REQUEST['target'&#93;=dirname($_REQUEST['filename'&#93;); 
       
if ($_REQUEST['target'&#93;[strlen($_REQUEST['target'&#93;)-1&#93; != "/") $_REQUEST['target'&#93;&#46;='/';
       
$content="/opt/bin/unrar x"&#46;$_REQUEST['options'&#93;&#46;" -y "&#46;$_REQUEST['filename'&#93;&#46;" "&#46;$_REQUEST['target'&#93;&#46;"<br/>";
       
exec("/opt/bin/unrar x"&#46;$_REQUEST['options'&#93;&#46;" -y "&#46;$_REQUEST['filename'&#93;&#46;" "&#46;$_REQUEST['target'&#93;);
       
exec("/opt/bin/unrar lb "&#46;$_REQUEST['filename'&#93;,$out);               
    
}            
    if (
count($out)) foreach($out as $item) {
      
$out1="";
      
exec("ls -l "&#46;$_REQUEST['target'&#93;&#46;$item,$out1);
      
$content&#46;=$out1[0&#93;&#46;"<br/>";
      
}
  }
  
setcookie("f1name",$_REQUEST['filename'&#93;);
  
setcookie("f2name",$_REQUEST['program'&#93;);
  
setcookie("f3name",$_REQUEST['options'&#93;);
} else {
  
$_REQUEST['filename'&#93;='/';
}
?>

<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'&#93;) ?>');
}
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'&#93;=='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'&#93;=='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'&#93;=='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'&#93;=='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'&#93;=='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'&#93; ?>" />
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'&#93; ?>"/>
<input type="button" value="show" onclick="$('action').value='show';f.submit()" />&nbsp;
<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'&#93; ?>" 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
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 Matr1x

  • Global Moderator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 270
  • -Ontvangen: 772
  • Berichten: 5.093
Re: Unzip, tar unrar als 3rd party app
« Reactie #5 Gepost op: 18 november 2008, 09:59:02 »
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!
  • Mijn Synology: DS224+
  • HDD's: 2x HAT3300-4T
  • Extra's: MR2200ac / RT2600ac

Offline Glitch

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 15
Re: Unzip, tar unrar als 3rd party app
« Reactie #6 Gepost op: 18 november 2008, 18:39:16 »
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:

Offline wizjos

  • Administrator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 123
  • -Ontvangen: 181
  • Berichten: 1.999
Re: Unzip, tar unrar als 3rd party app
« Reactie #7 Gepost op: 18 november 2008, 20:38:40 »
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
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 Glitch

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 15
Re: Unzip, tar unrar als 3rd party app
« Reactie #8 Gepost op: 18 november 2008, 22:04:03 »
Citaat van: "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

Offline Glitch

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 15
Re: Unzip, tar unrar als 3rd party app
« Reactie #9 Gepost op: 21 november 2008, 19:21:30 »
Bleek in safe_mode_exec_dir te zitten, deze dient leeg te zijn in php.ini. Alles werkt nu naar behoren, nogmaals bedankt.

Offline wizjos

  • Administrator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 123
  • -Ontvangen: 181
  • Berichten: 1.999
Re: Unzip, tar unrar als 3rd party app
« Reactie #10 Gepost op: 22 november 2008, 01:33:29 »
Citaat van: "Glitch"
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
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 dutchsea

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 21
Re: Unzip, tar unrar als 3rd party app
« Reactie #11 Gepost op: 03 januari 2009, 17:48:46 »
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

Offline wizjos

  • Administrator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 123
  • -Ontvangen: 181
  • Berichten: 1.999
Re: Unzip, tar unrar als 3rd party app
« Reactie #12 Gepost op: 04 januari 2009, 13:22:52 »
Dutschsea,

Alles staat op zich al beschreven in de 3rd party apps handleiding, 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

Ik hoop dat je er verder mee komt!

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 dutchsea

  • Bedankjes
  • -Gegeven: 0
  • -Ontvangen: 0
  • Berichten: 21
Re: Unzip, tar unrar als 3rd party app
« Reactie #13 Gepost op: 04 januari 2009, 22:11:36 »
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

Offline wizjos

  • Administrator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 123
  • -Ontvangen: 181
  • Berichten: 1.999
Re: Unzip, tar unrar als 3rd party app
« Reactie #14 Gepost op: 04 januari 2009, 22:31:58 »
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
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!


 

VERPLAATST: Error: 'unzip' is not installed via SSH op DS

Gestart door BirdyBoard 3rd party Packages

Reacties: 0
Gelezen: 1284
Laatste bericht 08 oktober 2022, 15:41:31
door Birdy
SABnzb werkt niet meer na update 2 (unzip programma niet gevonden)

Gestart door gompie23Board SABnzbd (usenet)

Reacties: 6
Gelezen: 3724
Laatste bericht 12 juni 2016, 20:38:45
door CBA
zip/unzip is vervangen door 7zip

Gestart door larrvyllBoard Synology DSM 6.0

Reacties: 3
Gelezen: 4286
Laatste bericht 09 april 2016, 12:05:14
door Briolet
Error: 'unzip' is not installed via SSH op DS

Gestart door rheinenBoard Synology DSM algemeen

Reacties: 18
Gelezen: 3226
Laatste bericht 09 oktober 2022, 12:15:04
door Birdy
Na update DSM 6 SABnzbd unzip programma niet gevonden

Gestart door Edwin0873Board Synology DSM 6.0

Reacties: 11
Gelezen: 5862
Laatste bericht 31 maart 2016, 12:08:21
door Birdy