Synology-Forum.nl
Tweaks / Addons A.K.A. The Underground => 3rd party apps integratie in DSM => Topic gestart door: wizjos op 07 oktober 2008, 17:31:59
-
Zoals wellicht bekend/ondervonden kunnen bij een update van de firmware de 3rd party applicaties worden gewist... Om dat nu te voorkomen deze 3rd party manager. Ik heb het Duitse origineel aangepast naar het Nederlands en hier en daar een tikje verbeterd.
Naast de mogelijkheid van backup en restore is er de mogelijkheid om via de interface een 3rd party applicatie aan te maken en te wissen.
Enige verduidelijkende tekst over de werking staat onder de afbeelding.
application.cfg
text = 3rd party manager
description = 3rd party manager
type=embedded
path = /phpsrc/manager/manager.php
manager.php NB. Bijgewerkt met de beveiliging van Merty. Zie http://synology.nl/forum/viewtopic.php?f=83&t=2274.
<?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;
}
ini_set('session.use_cookies','0');
session_start();
/**
* Setting some "global" Vars
*/
$appl_names = array();
$path_3rdparty = '/usr/syno/synoman/webman/3rdparty';
$path_phpsrc = '/usr/syno/synoman/phpsrc';
$backup_dir = '/volume1/tmp';
$backup_name = 'backupSynology';
$dh = opendir($path_3rdparty);
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path_3rdparty.'/'.$res)){
$appl_names[] = $res;
}
}
if(isset($_POST['delete']) && isset($_POST['del']) && count($_POST['del']) > 0){
foreach ($_POST['del'] as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
$tt = array();
exec('rm -r '.$path_3rdparty.'/'.$wert,$tt);
if(isset($ret[1]) && is_dir($path_phpsrc.$ret[1])){
exec('rm -r '.$path_phpsrc.$ret[1],$tt);
}
if(count($tt) == 0){
echo 'Entry deleted';
}else{
echo '<pre>'.implode("rn",$tt).'</pre>';
}
exit;
}
}elseif(isset($_POST['senden']) && !empty($_POST['Linktext']) && !empty($_POST['Description']) && !empty($_POST['Dir']) && !empty($_POST['type']) && (!empty($_POST['fname']) || !empty($_FILES['file']['name'][0]))){
$att = array();
$strr = '<strong>Please check the data below carefully as after your confirmation application directories will be created with the parameters given<br />*** No operation will be executed <u>before</u> you confirm by clicking below ***</strong>';
$strr .= '<br /><br />First the content of <strong>application.cfg</strong> that will be created in <strong>'.$path_3rdparty.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'</strong><br />';
$str = '';
$str .= 'text = '.$_POST['Linktext']."rn";
$str .= 'description = '.$_POST['Description']."rn";
$str .= 'type = ';
($_POST['type'] == 'embedded') ? $str .= 'embedded' : $str .= 'standalone';
$str .= "rn";
$str .= 'path = /phpsrc/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname']))."rn";
$_SESSION['appl.cfg'] = $str;
$_SESSION['appl.dir'] = preg_replace('/s+|/+/','',strtolower($_POST['Dir']));
for($i=0;$i<count($_FILES['file']['name']);$i++){
if($_FILES['file']['name'][$i] == '' || $_FILES['file']['size'][$i] == 0){
continue;
}
$f = file_get_contents($_FILES['file']['tmp_name'][$i]);
$att[] = array('path'=>$path_phpsrc.'/'.$_SESSION['appl.dir'].'/'.$_FILES['file']['name'][$i],'content'=>$f);
}
if(isset($_POST['file_content']) && trim($_POST['file_content']) != ''){
$att[] = array('path'=>$path_phpsrc.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname'])),'content'=>str_replace(chr(13),'',stripslashes($_POST['file_content'])));
}
$_SESSION['appl.att'] = $att;
echo $strr;
echo '<pre>'.$str.'</pre>';
echo '<br />';
echo 'The following files from your upload will be created:<br /><br />';
foreach($_SESSION['appl.att'] as $wert){
echo '<strong>'.$wert['path'].'</strong><br />';
}
echo '<br />By clicking <a href="'.$_SERVER['PHP_SELF'].'?'.strip_tags(SID).'">this link</a> all the necessary files and settings will be written to disk!!!<br />You can abort the operation by <a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">clicking this link</a>';
}elseif(isset($_POST['backup'])){
if(!is_dir($backup_dir.'/'.$backup_name)){
mkdir($backup_dir.'/'.$backup_name);
}
$t = time();
mkdir($backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
mkdir($backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
foreach($appl_names as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
exec('cp -R '.$path_3rdparty.'/'.$wert.' '.$backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
exec('cp -R '.$path_phpsrc.$ret[1].' '.$backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
}
die('Data succesfully written to backup directory');
}elseif(isset($_POST['restore']) && isset($_POST['path']) && !empty($_POST['path'])){
if(!is_dir($_POST['path']) || !is_dir($_POST['path'].'/phpsrc_'.$_POST['time']) || !is_dir($_POST['path'].'/3rdparty_'.$_POST['time'])){
die('Data could not be restored because eihter BackupPath was not given OR the subdirectories (3rdparty phpsrc) do not exist in given path');
}
exec('cp -Rf '.$_POST['path'].'/phpsrc_'.$_POST['time'].'/* '.$path_phpsrc);
exec('cp -Rf '.$_POST['path'].'/3rdparty_'.$_POST['time'].'/* '.$path_3rdparty);
die('Data succesfully restored');
}elseif(isset($_SESSION['appl.cfg']) && isset($_SESSION['appl.dir'])){
exec('mkdir '.$path_3rdparty.'/'.$_SESSION['appl.dir']);
exec('mkdir '.$path_phpsrc.'/'.$_SESSION['appl.dir']);
$fp = fopen($path_3rdparty.'/'.$_SESSION['appl.dir'].'/application.cfg','w');
fwrite($fp,$_SESSION['appl.cfg']);
fclose($fp);
foreach($_SESSION['appl.att'] as $wert){
$fp = fopen($wert['path'],'w');
fwrite($fp,$wert['content']);
fclose($fp);
}
unset($_SESSION);
session_destroy();
echo '<a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">Operation successfull: return</a>';
exit;
}else{
?>
<html>
<head>
<title>3rd Party Application Manager</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<?php
/**
* Build up a table with checkboxes and names of the installed application
*/
echo '<font size=10; face="Arial">3rd-Party Manager';
echo '<table border="0">';
echo '<tr><td colspan=2><font size="4">Remove a 3rd-Party application</font></td></tr>';
foreach ($appl_names as $wert){
echo '<tr><td><input type="checkbox" name="del[]" value="'.$wert.'" /></td><td><input disabled="disabled" type="text" value="'.$wert.'" /></td></tr>';
}
echo '<tr colspan="4" style="text-align:center;"><td><input type="submit" name="delete" value="Delete" /></td>';
echo '<td><input type="reset" value="Reset selection" /></td></tr></table>';
?>
</form>
<?php
/**
* Form for adding a new application by user
*/
?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">
<table border="0">
<tr><td colspan="3"><font size="4">Create a 3rd-Party application for Diskstation</font></td></tr>
</th>
<tr>
<td>Text for the Link</td><td><input name="Linktext" type="text" size="40" /></td><td></td>
</tr>
<tr>
<td>Text for the Tooltip</td><td><input name="Description" type="text" size="40" /></td>
</tr>
<tr>
<td>Application Directory</td><td><input name="Dir" type="text" size="40" /></td>
</tr>
<tr>
<td>Application Type</td><td><select name="type">
<option value="embedded" selected="selected">Embedded</option>
<option value="standalone">Standalone</option>
</select>
</td>
</tr>
<tr><td>Filename</td><td><input name="fname" type="text" size="40" /></td><td width="340">This is the file that will initially be called by DSM;</br>if this is an uploaded file (see below) please repeat its name here without a path;</br>otherwise enter the file contents below.</td></tr>
<tr>
<tr>
<td colspan=2>Contents of file:</td>
</tr>
<td colspan="20"><textarea name="file_content" rows="40" cols="80"></textarea></td>
</tr>
<tr><td>File(s) to upload</td><td colspan=2><input name="file[]" type="file" size="40" /></td></tr>
<tr><td> </td><td colspan=2><input name="file[]" type="file" size="40" /></td></tr>
<tr><td> </td><td colspan=2><input name="file[]" type="file" size="40" /></td></tr>
<tr><td> </td><td colspan=2><input name="file[]" type="file" size="40" /></td></tr>
<tr><td> </td><td colspan=2><input name="file[]" type="file" size="40" /></td></tr>
<tr>
<td colspan=2><input type="submit" name="senden" value="Create" /> <input type="reset" value="Reset Form" /></td>
</tr>
</table>
</form>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<font size="4">Backup / Restore 3rd-Party applications</font></br>
<select name="time">
<?php
$path = $backup_dir.'/'.$backup_name;
$dh = opendir($path);
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path.'/'.$res)){
$t = substr($res,strpos($res,'_')+1);
$arr[] = $t;
}
}
$arr = array_unique($arr);
rsort($arr);
foreach($arr as $wert){
if(!empty($wert)){
echo '<option value="'.$wert.'">'.date('d.m.y H:i:s',$wert).'</option>';
}
}
?>
</select>
<input type="text" name="path" />
<input type="submit" name="backup" value="Backup" /> <input type="submit" name="restore" value="Restore" />
</font>
</form>
</body>
</html>
<?php
}
?>
(http://94.212.224.81/images/syno/3rdparty.jpg)
Werking:
1) Verwijderen (Remove a 3rd-Party application)
Er wordt een lijst getoond van alle aanwezige 3rd-Party applicaties. Aanvinken van de te verwijderen applicatie(s) en klikken op 'Delete'. Met 'Reset selection' worden alle applicaties uitgevinkt.
2) Aanmaken (Create a 3rd-Party-Application)
Dit volgt de globale opbouw van application.cfg (zie evt. hierboven)
- 'Text for the link' is de tekst die getoond wordt in het 3rd-Party menu in de DSM
- 'Text for the Tooltip' is de tekst die in de tooltip staat die in het 3rd-Party menu bij deze applicatie getoond wordt
- 'Application Directory' is de directory onder /usr/syno/synoman/phpsrc die aangemaakt zal worden om de applicatie in onder te brengen
- 'Application Type': Embedded of Standalone
- 'Filename' is de bestandsnaam die in de link van de DSM wordt aangeroepen. Ter vergelijk, dit is dus de bestandsnaam die helemaal op het eind van de 'Path' waarde in application.cfg staat (bij deze 3rd-Party manager is dat dus 'manager.php'
- 'Contents of file' geeft de mogelijkheid om het bij filename genoemde bestand te voorzien van inhoud (dus bv. in dit geval de hele lap code die in manager.php staat. Dit betekent dat je dus niet eerst het bestand hoeft aan te maken, te vullen en op te slaan.
- 'File(s) to upload' zijn eventuele extra te plaatsen bestanden in de 'application directory'
Met de knop 'Create' geef je opdracht om de applicatie te maken/installeren. Er verschijnt dan een bevestigingsscherm waarop je e.e.a. nog eens kunt overzien, alsvorens definitief te bevestigen
De knop 'Reset form' wist alle invoer.
LET OP!
Als je enkel bestanden te uploaden hebt en één daarvan is het bestand dat aangeroepen gaat worden vanuit de DSM (en je hoeft dus niet een bestand te vullen met gegevens in ''Contents of file'), dan dien je dit te uploaden bestand nogmaals te benoemen bij 'Filename'.
Anders zou je weliswaar de bestanden uploaden, maar heb je de DSM niet duidelijk gemaakt wélke van de ge-uploade bestanden je als startbestand wilt zien. :mrgreen:
Er vindt een controle plaats of alle benodigde velden zijn ingevoerd.
De enige adder die ik onder het gras zie zitten is bij het 'inplakken' van een .cgi bestand in het 'Contents of file' venster. Zoals ik in eerdere posts al heb geschreven heb je grote kans dat een vanuit Windows geplakt .cgi script niet goed uitgevoerd wordt omdat Windows ^M-tekens aan het einde van een regel plakt. Je kan dus wél op deze manier een .cgi script naar de Syno uploaden, je zal alleen wél naderhand de ^M tekens uit het bestand moeten vissen. :( PHP bestanden hebben er veel minder moeite mee. Ik studeer nog op een mogelijkheid om ook die ^M's er uit te filteren.... (als iemand nog suggesties heeft....) :mrgreen:
3) Backup en restore
Initieel is de drop-down links leeg; pas als er één of meer backups gemaakt zijn komen hier de diverse gemaakte backups te staan, gesorteerd op datum; de nieuwste eerst.
Als je klikt op 'Backup' wordt de gehele 3rd-party directorystructuur gekopiëerd. Waarheen is instelbaar in het script. Standaard is dit '/volume1/tmp/backupSynology'.
Restore werkt uiteraard enkel ná een eerste backup. Je kiest uit de dropdown lijst de backup die je wilt restoren en klikt op 'Restore'.
Veel plezier er mee!
Wizjos
-
Zie ineens een nog mooiere staan dan er al was... Werking eigenlijk het zelfde alleen grafisch fraaier:
(http://94.212.224.81/images/syno/3rdparty2.jpg)
Aan application.cfg hoeft niets te worden veranderd; manager.php is als volgt:
manager.php NB. Bijgewerkt met de beveiliging van Merty. Zie http://synology.nl/forum/viewtopic.php?f=83&t=2274.
<?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;
}
ini_set('session.use_cookies','0');
session_start();
$appl_names = array();
// KEINE abschliessenden / bei den Verzeichnissen!!!
$path_3rdparty = '/usr/syno/synoman/webman/3rdparty';
$path_phpsrc = '/usr/syno/synoman/phpsrc';
$backup_dir = '/volume1/tmp';
$backup_name = 'backupSynology';
$dh = opendir($path_3rdparty);
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path_3rdparty.'/'.$res)){
$appl_names[] = $res;
}
}
natcasesort($appl_names);
if(isset($_POST['delete']) && isset($_POST['del']) && count($_POST['del']) > 0){
foreach ($_POST['del'] as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
$tt = array();
exec('rm -r '.$path_3rdparty.'/'.$wert,$tt);
if(isset($ret[1]) && is_dir($path_phpsrc.$ret[1])){
exec('rm -r '.$path_phpsrc.$ret[1],$tt);
}
if(count($tt) == 0){
echo 'Entry deleted';
}else{
echo '<pre>'.implode("rn",$tt).'</pre>';
}
exit;
}
}elseif(isset($_POST['senden']) && !empty($_POST['Linktext']) && !empty($_POST['Description']) && !empty($_POST['Dir']) && !
empty($_POST['type']) && !empty($_POST['fname'])){
$att = array();
$strr = '<strong>Please check the data below carefully as after your confirmation application directories will be created with the parameters given<br />*** No operation will be executed <u>before</u> you confirm by clicking below ***</strong>';
$strr .= '<br /><br />First the content of <strong>application.cfg</strong> that will be created in <strong>'.$path_3rdparty.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'</strong><br />';
$str = '';
$str .= 'text = '.$_POST['Linktext']."rn";
$str .= 'description = '.$_POST['Description']."rn";
$str .= 'type = ';
($_POST['type'] == 'embedded') ? $str .= 'embedded' : $str .= 'standalone';
$str .= "rn";
$str .= 'path = /phpsrc/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname']))."rn";
$_SESSION['appl.cfg'] = $str;
$_SESSION['appl.dir'] = preg_replace('/s+|/+/','',strtolower($_POST['Dir']));
for($i=0;$i<count($_FILES['file']['name']);$i++){
if($_FILES['file']['name'][$i] == ''){
continue;
}
$f = file_get_contents($_FILES['file']['tmp_name'][$i]);
$att[] = array('path'=>$path_phpsrc.'/'.$_SESSION['appl.dir'].'/'.$_FILES['file']['name'][$i],'content'=>$f);
}
if(isset($_POST['file_content']) && trim($_POST['file_content']) != ''){
$att[] = array('path'=>$path_phpsrc.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname'])),'content'=>str_replace(chr(13),'',stripslashes($_POST['file_content'])));
}
$_SESSION['appl.att'] = $att;
echo $strr;
echo '<pre>'.$str.'</pre>';
echo '<br />';
echo 'The following files from your upload will be created:<br /><br />';
foreach($_SESSION['appl.att'] as $wert){
echo '<strong>'.$wert['path'].'</strong><br />';
}
echo '<br />By clicking <a href="'.$_SERVER['PHP_SELF'].'?'.strip_tags(SID).'">this link</a> all the necessary operation will be written to disk!!!<br />You can abort the operation by <a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">clicking this link</a>';
}elseif(isset($_SESSION['appl.cfg']) && isset($_SESSION['appl.dir'])){
exec('mkdir '.$path_3rdparty.'/'.$_SESSION['appl.dir']);
exec('mkdir '.$path_phpsrc.'/'.$_SESSION['appl.dir']);
$fp = fopen($path_3rdparty.'/'.$_SESSION['appl.dir'].'/application.cfg','w');
fwrite($fp,$_SESSION['appl.cfg']);
fclose($fp);
foreach($_SESSION['appl.att'] as $wert){
$fp = fopen($wert['path'],'w');
fwrite($fp,$wert['content']);
fclose($fp);
}
unset($_SESSION);
session_destroy();
echo '<a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">Operation Successfull</a>';
exit;
}elseif(isset($_POST['backup'])){
if(!is_dir($backup_dir.'/'.$backup_name)){
mkdir($backup_dir.'/'.$backup_name);
}
$t = time();
mkdir($backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
mkdir($backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
foreach($appl_names as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
exec('cp -R '.$path_3rdparty.'/'.$wert.' '.$backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
exec('cp -R '.$path_phpsrc.$ret[1].' '.$backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
}
die('Data succesfully written to backup directory');
}elseif(isset($_POST['restore']) && isset($_POST['time']) && !empty($_POST['time'])){
if(!is_dir($backup_dir.'/'.$backup_name.'/3rdparty_'.$_POST['time']) || !is_dir($backup_dir.'/'.$backup_name.'/phpsrc_'.$_POST['time'])){
die('Data could not be restored because either Backup Path was not given OR the subdirectories (3rdparty phpsrc) do not exist in given path');
}
exec('cp -Rf '.$backup_dir.'/'.$backup_name.'/phpsrc_'.$_POST['time'].'/* '.$path_phpsrc);
exec('cp -Rf '.$backup_dir.'/'.$backup_name.'/3rdparty_'.$_POST['time'].'/* '.$path_3rdparty);
die('Data succesfully restored');
}else{
?>
<html>
<head>
<title>3rd Party Application Remover</title>
<style>body,input,textarea,td,option,select{font:11px Verdana}fieldset{border:1px solid #bbb}</style>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<fieldset><legend>installed 3rd-party-applications / remover</legend><table border="0"><tr>
<?php
$ii=0;
foreach ($appl_names as $wert){
echo '<td width="120px"><input type="checkbox" name="del[]" value="'.$wert.'" />'.$wert.'</td><td>';
if (++$ii % 7 == 0) echo '</td></tr><tr>';
}
?>
</tr></table>
<input style="margin-left:150px;margin-top:5px;" type="reset" value="reset form" />
<input style="margin-left:320px" type="submit" name="delete" value="remove 3rd-party-apps" />
</fieldset></form>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">
<fieldset><legend>create 3rd-party-application</legend>
<span style="padding-right:53px">text for the link:</span> <input size="90" type="text" name="Linktext" /><br/>
<span style="padding-right:20px">description for tooltip:</span> <input size="90" type="text" name="Description" /><br/>
<span style="padding-right:25px">application directory:</span> <input size="90" type="text" name="Dir" /><br/>
<span style="padding-right:51px">application type:</span> <select name="type">
<option value="embedded" selected="selected">embedded</option>
<option value="popup">popup</option></select><br/>
<span style="padding-right:96px">filename:</span><input input size="90" type="text" name="fname" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:83px">file content:</span><textarea name="file_content" rows="10" cols="87"></textarea><br/>
<input style="margin-left:150px" type="reset" value="reset form" /><input style="margin-left:330px" type="submit" name="senden" value="create 3rd-party-app" />
</fieldset>
<fieldset><legend>Backup and Restore 3rd Party Applications</legend>
<fieldset><legend>Backup 3rd Party Applications</legend>
<input type="submit" name="backup" value="Create Backup" />
</fieldset>
<fieldset><legend>Restore 3rd Party Applications</legend>
<span style="padding-right:20px">Select date for restore</span><select name="time">
<?php
$path = $backup_dir.'/'.$backup_name;
$dh = opendir($path);
$arr = array();
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path.'/'.$res)){
$t = substr($res,strpos($res,'_')+1);
$arr[] =intval($t);
}
}
$arr = array_unique($arr);
rsort($arr);
foreach($arr as $wert){
if(!empty($wert) && $wert != 0){
echo '<option value="'.$wert.'">'.date('d.m.y H:i:s',$wert).'</option>';
}
}
?>
</select>
<input type="submit" name="restore" value="Restore" />
</fieldset>
</fieldset>
</form>
</body>
</html>
<?php
}
?>
Succes!
Wizjos
-
Oeps!
Was zelf eens even bezig en tot mijn verbazing werkte php-code die ik middels het file-contents venster had ge-upload niet.... Volgens mij miste er een stripslashes :oops:
Voor wie wil weten waar:
de regel
$att[] = array('path'=>$path_phpsrc.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname'])),'content'=>$_POST['file_content']);
Zou moeten luiden:
$att[] = array('path'=>$path_phpsrc.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname'])),'content'=>stripslashes($_POST['file_content']));
Voor ieder ander heb ik de geposte code aangepast.
Bij mij werkt het...
Groet,
Wizjos
-
....en als ik dan toch bezig ben gelijk maar die ^M tekens er uit :mrgreen:
dezelfde regel wordt (weer) vervangen:
$att[] = array('path'=>$path_phpsrc.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname'])),'content'=>stripslashes($_POST['file_content']));
Wordt nu:
$att[] = array('path'=>$path_phpsrc.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname'])),'content'=>str_replace(chr(13),'',stripslashes($_POST['file_content'])));
Wederom ook bijgewerkt in beide eerder geposte versies van manager.php
Tot zover...
Wizjos
-
Code is bijgewerkt met de beveiliging van Merty.
Groet,
Wizjos
-
Wizjos,
pas je ook nog de 2e variant aan? Je vond deze zelf grafisch fraaier....
Luit
-
Wizjos,
pas je ook nog de 2e variant aan? Je vond deze zelf grafisch fraaier....
Luit
:oops: ...en dan wil je het even snel doen....
Ook deze code aangepast! Dank voor de opmerkzaamheid! :mrgreen:
Groet,
Wizjos
-
Zojuist jou versie van 3rd Party Manager "geinstalleerd".
Hij werkt :P , maar geeft wel ook de volgende foutmelding: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /usr/syno/synoman/phpsrc/manager/manager.php:1) in /usr/syno/synoman/phpsrc/manager/manager.php on line 10
Jij weet vast wel wat dat betekent en of hoe ik het kan oplossen.
Er kan blijkbaar iets mis zijn op regel 10 van manager.php.
Ik voeg voor de volledigheid mijn code bij:
<?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;
}
ini_set('session.use_cookies','0');
session_start();
$appl_names = array();
// KEINE abschliessenden / bei den Verzeichnissen!!!
$path_3rdparty = '/usr/syno/synoman/webman/3rdparty';
$path_phpsrc = '/usr/syno/synoman/phpsrc';
$backup_dir = '/volume1/tmp';
$backup_name = 'backupSynology';
$dh = opendir($path_3rdparty);
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path_3rdparty.'/'.$res)){
$appl_names[] = $res;
}
}
natcasesort($appl_names);
if(isset($_POST['delete']) && isset($_POST['del']) && count($_POST['del']) > 0){
foreach ($_POST['del'] as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
$tt = array();
exec('rm -r '.$path_3rdparty.'/'.$wert,$tt);
if(isset($ret[1]) && is_dir($path_phpsrc.$ret[1])){
exec('rm -r '.$path_phpsrc.$ret[1],$tt);
}
if(count($tt) == 0){
echo 'Entry deleted';
}else{
echo '<pre>'.implode("rn",$tt).'</pre>';
}
exit;
}
}elseif(isset($_POST['senden']) && !empty($_POST['Linktext']) && !empty($_POST['Description']) && !empty($_POST['Dir']) && !
empty($_POST['type']) && !empty($_POST['fname'])){
$att = array();
$strr = '<strong>Please check the data below carefully as after your confirmation application directories will be created with the parameters given<br />*** No operation will be executed <u>before</u> you confirm by clicking below ***</strong>';
$strr .= '<br /><br />First the content of <strong>application.cfg</strong> that will be created in <strong>'.$path_3rdparty.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'</strong><br />';
$str = '';
$str .= 'text = '.$_POST['Linktext']."rn";
$str .= 'description = '.$_POST['Description']."rn";
$str .= 'type = ';
($_POST['type'] == 'embedded') ? $str .= 'embedded' : $str .= 'standalone';
$str .= "rn";
$str .= 'path = /phpsrc/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname']))."rn";
$_SESSION['appl.cfg'] = $str;
$_SESSION['appl.dir'] = preg_replace('/s+|/+/','',strtolower($_POST['Dir']));
for($i=0;$i<count($_FILES['file']['name']);$i++){
if($_FILES['file']['name'][$i] == ''){
continue;
}
$f = file_get_contents($_FILES['file']['tmp_name'][$i]);
$att[] = array('path'=>$path_phpsrc.'/'.$_SESSION['appl.dir'].'/'.$_FILES['file']['name'][$i],'content'=>$f);
}
if(isset($_POST['file_content']) && trim($_POST['file_content']) != ''){
$att[] = array('path'=>$path_phpsrc.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname'])),'content'=>str_replace(chr(13),'',stripslashes($_POST['file_content'])));
}
$_SESSION['appl.att'] = $att;
echo $strr;
echo '<pre>'.$str.'</pre>';
echo '<br />';
echo 'The following files from your upload will be created:<br /><br />';
foreach($_SESSION['appl.att'] as $wert){
echo '<strong>'.$wert['path'].'</strong><br />';
}
echo '<br />By clicking <a href="'.$_SERVER['PHP_SELF'].'?'.strip_tags(SID).'">this link</a> all the necessary operation will be written to disk!!!<br />You can abort the operation by <a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">clicking this link</a>';
}elseif(isset($_SESSION['appl.cfg']) && isset($_SESSION['appl.dir'])){
exec('mkdir '.$path_3rdparty.'/'.$_SESSION['appl.dir']);
exec('mkdir '.$path_phpsrc.'/'.$_SESSION['appl.dir']);
$fp = fopen($path_3rdparty.'/'.$_SESSION['appl.dir'].'/application.cfg','w');
fwrite($fp,$_SESSION['appl.cfg']);
fclose($fp);
foreach($_SESSION['appl.att'] as $wert){
$fp = fopen($wert['path'],'w');
fwrite($fp,$wert['content']);
fclose($fp);
}
unset($_SESSION);
session_destroy();
echo '<a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">Operation Successfull</a>';
exit;
}elseif(isset($_POST['backup'])){
if(!is_dir($backup_dir.'/'.$backup_name)){
mkdir($backup_dir.'/'.$backup_name);
}
$t = time();
mkdir($backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
mkdir($backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
foreach($appl_names as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
exec('cp -R '.$path_3rdparty.'/'.$wert.' '.$backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
exec('cp -R '.$path_phpsrc.$ret[1].' '.$backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
}
die('Data succesfully written to backup directory');
}elseif(isset($_POST['restore']) && isset($_POST['time']) && !empty($_POST['time'])){
if(!is_dir($backup_dir.'/'.$backup_name.'/3rdparty_'.$_POST['time']) || !is_dir($backup_dir.'/'.$backup_name.'/phpsrc_'.$_POST['time'])){
die('Data could not be restored because either Backup Path was not given OR the subdirectories (3rdparty phpsrc) do not exist in given path');
}
exec('cp -Rf '.$backup_dir.'/'.$backup_name.'/phpsrc_'.$_POST['time'].'/* '.$path_phpsrc);
exec('cp -Rf '.$backup_dir.'/'.$backup_name.'/3rdparty_'.$_POST['time'].'/* '.$path_3rdparty);
die('Data succesfully restored');
}else{
?>
<html>
<head>
<title>3rd Party Application Remover</title>
<style>body,input,textarea,td,option,select{font:11px Verdana}fieldset{border:1px solid #bbb}</style>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<fieldset><legend>installed 3rd-party-applications / remover</legend><table border="0"><tr>
<?php
$ii=0;
foreach ($appl_names as $wert){
echo '<td width="120px"><input type="checkbox" name="del[]" value="'.$wert.'" />'.$wert.'</td><td>';
if (++$ii % 7 == 0) echo '</td></tr><tr>';
}
?>
</tr></table>
<input style="margin-left:150px;margin-top:5px;" type="reset" value="reset form" />
<input style="margin-left:320px" type="submit" name="delete" value="remove 3rd-party-apps" />
</fieldset></form>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">
<fieldset><legend>create 3rd-party-application</legend>
<span style="padding-right:53px">text for the link:</span> <input size="90" type="text" name="Linktext" /><br/>
<span style="padding-right:20px">description for tooltip:</span> <input size="90" type="text" name="Description" /><br/>
<span style="padding-right:25px">application directory:</span> <input size="90" type="text" name="Dir" /><br/>
<span style="padding-right:51px">application type:</span> <select name="type">
<option value="embedded" selected="selected">embedded</option>
<option value="popup">popup</option></select><br/>
<span style="padding-right:96px">filename:</span><input input size="90" type="text" name="fname" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:83px">file content:</span><textarea name="file_content" rows="10" cols="87"></textarea><br/>
<input style="margin-left:150px" type="reset" value="reset form" /><input style="margin-left:330px" type="submit" name="senden" value="create 3rd-party-app" />
</fieldset>
<fieldset><legend>Backup and Restore 3rd Party Applications</legend>
<fieldset><legend>Backup 3rd Party Applications</legend>
<input type="submit" name="backup" value="Create Backup" />
</fieldset>
<fieldset><legend>Restore 3rd Party Applications</legend>
<span style="padding-right:20px">Select date for restore</span><select name="time">
<?php
$path = $backup_dir.'/'.$backup_name;
$dh = opendir($path);
$arr = array();
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path.'/'.$res)){
$t = substr($res,strpos($res,'_')+1);
$arr[] =intval($t);
}
}
$arr = array_unique($arr);
rsort($arr);
foreach($arr as $wert){
if(!empty($wert) && $wert != 0){
echo '<option value="'.$wert.'">'.date('d.m.y H:i:s',$wert).'</option>';
}
}
?>
</select>
<input type="submit" name="restore" value="Restore" />
</fieldset>
</fieldset>
</form>
</body>
</html>
<?php
}
?>
Groet Domwowo
-
Misschien door de "spaties" voor de regels die door session_start(); als characters beschouwd worden?
Ga deze nu even deze weghalen. Kijken of de foutmelding verdwenen is.
Tata!! Probleem opgelost.
Linux is soms zo simpel. :wink:
-
AAArgh :mrgreen:
Ligt 't forum plat of zo? Krijg niets meer gepost.....
Nieuwe poging:
Goed gezien, Wizwowo :mrgreen:
Als ik niet zo'n last had met een onwillige server had ik je wellicht nog voor kunnen zijn.... :D
Bjorn, lees je mee? Ik krijg hier de vreemdste meldingen terug van jullie server :shock:
Zal proberen even een screendumpje te PM-en...
-
Nadat ik mijn berichtje geplaatst had, ging mijn internetverbinding plat.
Sterk spul dit forum. :mrgreen:
-
Kan aan mij liggen maar ben redelijk nieuw, maar waar kan ik deze3rd party manager downloaden of moet ik uets anders doen om het werkend te krijgen.
-
Kan aan mij liggen maar ben redelijk nieuw, maar waar kan ik deze3rd party manager downloaden of moet ik uets anders doen om het werkend te krijgen.
Hi bluesbroeder,
Je zal eerst kennis moeten nemen van de 3rd party management guide (http://download.synology.com/download/ds/userguide/Synology%20NAS%20Server%203rd-Party%20Apps%20Integration%20Guide.pdf) die je kunt vinden op de Synology NAS Server 3rd-Party Apps Integration pagina (http://www.synology.com/enu/support/3rd-party_application_integration.php)...
Vervolgens is het wel slim om kennis te nemen van de 3rd party apps handleiding (http://www.synology-forum.nl/viewtopic.php?f=83&t=2182) :mrgreen:
Als je dan volgens deze guide's de hierboven staande code in een bestand met de juiste naam opslaat zou het moeten werken.
Succes! BIj vragen horen we je wel :D
Wizjos
-
Ok bedankt,
Is duidelijk, dus eerst maar eens aan de studie!
-
Hallo Wizjos,
ik kom je hier ook al mee tegen.
Ik heb de 3rd Party Manager geïnstalleerd zoals hierboven omschreven. Wanneer ik inlog zie ik het ook staan onder Third-party applications maar in het venster van 3rd Party Manager komt te staan:
Deze webpagina kan niet worden weergegeven
De link bij "Bijgewerkt met de beveiliging van Merty" werkt niet dus ik kan niet controleren of het misschien daarmee te maken heeft.
Enig idee?
-
het inmiddels toch aan de praat gekregen door veranderingen in de php.ini aan te brengen :D
safe_mode = Off stond al zo
safe_mode_exec_dir = leeggemaakt
open_basedir = leeggemaakt
doc_root = stond al zo
allow_url_fopen = On stond al zo
register_globals = On stond al zo
Echter :( wanneer ik een backup wil maken krijg ik de volgende meldingen:
Warning: mkdir() [function.mkdir]: No such file or directory in /usr/syno/synoman/phpsrc/manager/manager.php on line 100
Warning: mkdir() [function.mkdir]: No such file or directory in /usr/syno/synoman/phpsrc/manager/manager.php on line 103
Warning: mkdir() [function.mkdir]: No such file or directory in /usr/syno/synoman/phpsrc/manager/manager.php on line 104
Data succesfully written to backup directory
Data succesfully written to backup directory is dus niet waar :!:
???
-
Hmmmm,
Mkdir is een interne PHP functie en zou moeten werken... Het lijkt er op dat de parameters die mkdir aangeboden krijgt niet geldig zijn. Die worden helemaal bovenin het script bepaald. Standaard staat dit op:
$path_3rdparty = '/usr/syno/synoman/webman/3rdparty';
$path_phpsrc = '/usr/syno/synoman/phpsrc';
$backup_dir = '/volume1/tmp';
$backup_name = 'backupSynology';
Maar dan moet een en ander natuurlijk al wel bestaan.... :mrgreen:
Dus kijk voor de zekerheid dat even na... Je kan voor de aanroep naar de mkdir functie ter test laten weergeven welke dir er dan gemaakt moet worden door de volgende simpele code er als extra regels tussen te plakken:
echo $backup_dir;
echo $backup_name;
Succes!
Wizjos
-
Hallo Wizjos,
"backup_name" moet dat een map zijn of gaat de "backup" file zo heten?
Oftwel, moet ik die mappen aanmaken tmp en ook een map backupSynology?
Groet,
Grafcom
-
Hallo Wizjos,
werkt :D
Zag nu pas dat de map tmp rechtstreeks onder volume1 stond. Had al geprobeerd deze map in "public" te maken.... :mrgreen:
De map "backupSynology" en submappen worden wel goed aangemaakt.
dank dank dank :D
Nu heb ik uiteraard een heleboel vragen over veiligheid open staan etc. Party Manager kan ik van buiten wel aanroepen maar dan krijg ik een pagina die zegt dat "Deze webpagina kan niet worden weergegeven" - "Meest waarschijnlijke oorzaken: Voor deze website dient u zich aan te melden." goed zo (toch?)
Echter de pagina naar eXtplorer "werkt" wel van buitenaf omdat ik dan het inlog scherm krijg van eXtplorer.
Ik vind van alles hierover op dit forum, zou het een idee zijn dit in een nieuw topic samen te vatten? Ik heb vragen genoeg.
Nogmaals Wizjos, dank
Groeten,
Grafcom
-
Grafcom,
Mooi dat 't werkt! De aanhouder wint! :D
Party Manager kan ik van buiten wel aanroepen maar dan krijg ik een pagina die zegt dat "Deze webpagina kan niet worden weergegeven" - "Meest waarschijnlijke oorzaken: Voor deze website dient u zich aan te melden." goed zo (toch?)
Echter de pagina naar eXtplorer "werkt" wel van buitenaf omdat ik dan het inlog scherm krijg van eXtplorer.
Eeh, dat volg ik even niet helemaal... Wat bedoel je met Party Manager (klinkt gezellig overigens :mrgreen: ) Maak je over http of over https verbinding met je Syno van 'buitenaf'?
Ik vind van alles hierover op dit forum, zou het een idee zijn dit in een nieuw topic samen te vatten? Ik heb vragen genoeg.
Kan ik inkomen... Beslissing is echter niet aan mij (ben slechts een nederig gebruiker alhier). Bovendien is er op diverse sites en fora al wel het een en ander te vinden bv http://www.google.nl/search?hl=nl&q=web ... rial&meta= (http://www.google.nl/search?hl=nl&q=website+security+tutorial&meta=) of http://daniel0.net/phpfreaks_tutorials/ ... curity.pdf (http://daniel0.net/phpfreaks_tutorials/php_security/php_security.pdf)
Groet,
Wizjos
-
Hallo Wizjos
Party Manager................., ja :P 3rd Party Manager dan...... klinkt ook leuk!
nou:
Beslissing is echter niet aan mij (ben slechts een nederig gebruiker alhier)
zie (hoor, lees) je anders hoop ik weer op het "nieuwe" topic
http://www.youtube.com/watch?v=6pe7ioFYAOE :mrgreen: dit maakte m'n hoofd gisteren weer even leeg!
-
Hallo Wizjos,
waar kan ik dit (of iets vergelijkbaars) zetten in eXtplorer zodat dit werkt als in de ....(3rd) party manager?
<?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;
}
ini_set('session.use_cookies','0');
session_start();
Ik heb het geprobeerd om bovenaan te zetten (in de index.php) maar dan krijg ik een foutmelding dat er al een sessie is gestart.... (zul je wel kennen)
groet,
Grafcom
-
Grafcom,
Wellicht mosterd na de maaltijd (ik zag in het extplorer topic dat je het al opgelost had), maar de fout in dit stukje script zit er m.i. in de laatste twee regels. Die horen niet bij de beveiligingscode....
Groet,
Wizjos
-
Hallo Wizjos,
Wellicht mosterd na de maaltijd...
maar ik hou van mosterd ook al is het na de maaltijd :wink:
de andere (minder complexe) versie toch nog maar eens geprobeerd...... ennne :D het werkt ook met extplorer.
Dank
Groeten,
Grafcom
-
Ik heb de link 3rd party manager netjes onder Third party applications, maar als ik klik op de link krijg ik alleen maar de php code te zien van manager.php
Enig idee hoe dit kan?
En hoe kan ik in Vista de files maken, iedere regel eindigd namelijk met het bekkende M symbool?
-
Hallo Alex,
wanneer het aan het M symbool ligt zou je kunnen kiezen voor notepad++ met deze editor heb je meer keuzes om je tekst bestanden op te slaan, zie bij de keuzes wanneer je "opslaan als" kiest.
http://notepad-plus.sourceforge.net/nl/site.htm (http://notepad-plus.sourceforge.net/nl/site.htm)
Groet,
Grafcom
-
Hallo Alex,
wanneer het aan het M symbool ligt zou je kunnen kiezen voor notepad++ met deze editor heb je meer keuzes om je tekst bestanden op te slaan, zie bij de keuzes wanneer je "opslaan als" kiest.
http://notepad-plus.sourceforge.net/nl/site.htm (http://notepad-plus.sourceforge.net/nl/site.htm)
Groet,
Grafcom
Ik heb de keuze uit: Unicode, ANSI, Unicode big endian en UTF-8. De laatste heb ik gebruikt. Welke is de goede?
Moet ik nog wat editten in 1 of andere file om de php code leesbaar te maken in de DM?
-
je hebt met notepad++ toch veel meer keuzes? o.a. PHP De keuzes die jij noemt zijn eerder van notepad voor Windows.
Welke file wil je opslaan? De PHP lijkt me niet zo'n probleem en de application file ook niet. :wink:
Groet,
Grafcom
-
je hebt met notepad++ toch veel meer keuzes? o.a. PHP De keuzes die jij noemt zijn eerder van notepad voor Windows.
Welke file wil je opslaan? De PHP lijkt me niet zo'n probleem en de application file ook niet. :wink:
Groet,
Grafcom
Ok, gelukt. Maar ik krijg nog steeds gewoon de php code te zien in het frame:
<?php
alle codes
?>
Hij laat dus alleen de php code zien in manager.php.
Wat moet ik doen om dit leesbaar te maken zoals de topicstarter?
-
Hallo Alex,
heb je dit doorgenomen?
http://www.synology-forum.nl/viewtopic.php?f=83&t=2182 (http://www.synology-forum.nl/viewtopic.php?f=83&t=2182)
punt 7 en punt 11
-
Hallo Alex,
heb je dit doorgenomen?
http://www.synology-forum.nl/viewtopic.php?f=83&t=2182 (http://www.synology-forum.nl/viewtopic.php?f=83&t=2182)
punt 7 en punt 11
Had alleen punt 7 gedaan, toen kreeg ik deze melding in 3rd Party Manager:
Warning: Cannot modify header information - headers already sent by (output started at /usr/syno/synoman/phpsrc/manager/manager.php:1) in /usr/syno/synoman/phpsrc/manager/manager.php on line 6
-
Hallo Alex,
plaats de code is in deze post.
Groet,
Grafcom
-
manager.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;
}
ini_set('session.use_cookies','0');
session_start();
/**
* Setting some "global" Vars
*/
$appl_names = array();
$path_3rdparty = '/usr/syno/synoman/webman/3rdparty';
$path_phpsrc = '/usr/syno/synoman/phpsrc';
$backup_dir = '/volume1/tmp';
$backup_name = 'backupSynology';
$dh = opendir($path_3rdparty);
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path_3rdparty.'/'.$res)){
$appl_names[] = $res;
}
}
if(isset($_POST['delete']) && isset($_POST['del']) && count($_POST['del']) > 0){
foreach ($_POST['del'] as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
$tt = array();
exec('rm -r '.$path_3rdparty.'/'.$wert,$tt);
if(isset($ret[1]) && is_dir($path_phpsrc.$ret[1])){
exec('rm -r '.$path_phpsrc.$ret[1],$tt);
}
if(count($tt) == 0){
echo 'Entry deleted';
}else{
echo '<pre>'.implode("rn",$tt).'</pre>';
}
exit;
}
}elseif(isset($_POST['senden']) && !empty($_POST['Linktext']) && !empty($_POST['Description']) && !empty($_POST['Dir']) && !empty($_POST['type']) && (!empty($_POST['fname']) || !empty($_FILES['file']['name'][0]))){
$att = array();
$strr = '<strong>Please check the data below carefully as after your confirmation application directories will be created with the parameters given<br />*** No operation will be executed <u>before</u> you confirm by clicking below ***</strong>';
$strr .= '<br /><br />First the content of <strong>application.cfg</strong> that will be created in <strong>'.$path_3rdparty.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'</strong><br />';
$str = '';
$str .= 'text = '.$_POST['Linktext']."rn";
$str .= 'description = '.$_POST['Description']."rn";
$str .= 'type = ';
($_POST['type'] == 'embedded') ? $str .= 'embedded' : $str .= 'standalone';
$str .= "rn";
$str .= 'path = /phpsrc/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname']))."rn";
$_SESSION['appl.cfg'] = $str;
$_SESSION['appl.dir'] = preg_replace('/s+|/+/','',strtolower($_POST['Dir']));
for($i=0;$i<count($_FILES['file']['name']);$i++){
if($_FILES['file']['name'][$i] == '' || $_FILES['file']['size'][$i] == 0){
continue;
}
$f = file_get_contents($_FILES['file']['tmp_name'][$i]);
$att[] = array('path'=>$path_phpsrc.'/'.$_SESSION['appl.dir'].'/'.$_FILES['file']['name'][$i],'content'=>$f);
}
if(isset($_POST['file_content']) && trim($_POST['file_content']) != ''){
$att[] = array('path'=>$path_phpsrc.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname'])),'content'=>str_replace(chr(13),'',stripslashes($_POST['file_content'])));
}
$_SESSION['appl.att'] = $att;
echo $strr;
echo '<pre>'.$str.'</pre>';
echo '<br />';
echo 'The following files from your upload will be created:<br /><br />';
foreach($_SESSION['appl.att'] as $wert){
echo '<strong>'.$wert['path'].'</strong><br />';
}
echo '<br />By clicking <a href="'.$_SERVER['PHP_SELF'].'?'.strip_tags(SID).'">this link</a> all the necessary files and settings will be written to disk!!!<br />You can abort the operation by <a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">clicking this link</a>';
}elseif(isset($_POST['backup'])){
if(!is_dir($backup_dir.'/'.$backup_name)){
mkdir($backup_dir.'/'.$backup_name);
}
$t = time();
mkdir($backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
mkdir($backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
foreach($appl_names as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
exec('cp -R '.$path_3rdparty.'/'.$wert.' '.$backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
exec('cp -R '.$path_phpsrc.$ret[1].' '.$backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
}
die('Data succesfully written to backup directory');
}elseif(isset($_POST['restore']) && isset($_POST['path']) && !empty($_POST['path'])){
if(!is_dir($_POST['path']) || !is_dir($_POST['path'].'/phpsrc_'.$_POST['time']) || !is_dir($_POST['path'].'/3rdparty_'.$_POST['time'])){
die('Data could not be restored because eihter BackupPath was not given OR the subdirectories (3rdparty phpsrc) do not exist in given path');
}
exec('cp -Rf '.$_POST['path'].'/phpsrc_'.$_POST['time'].'/* '.$path_phpsrc);
exec('cp -Rf '.$_POST['path'].'/3rdparty_'.$_POST['time'].'/* '.$path_3rdparty);
die('Data succesfully restored');
}elseif(isset($_SESSION['appl.cfg']) && isset($_SESSION['appl.dir'])){
exec('mkdir '.$path_3rdparty.'/'.$_SESSION['appl.dir']);
exec('mkdir '.$path_phpsrc.'/'.$_SESSION['appl.dir']);
$fp = fopen($path_3rdparty.'/'.$_SESSION['appl.dir'].'/application.cfg','w');
fwrite($fp,$_SESSION['appl.cfg']);
fclose($fp);
foreach($_SESSION['appl.att'] as $wert){
$fp = fopen($wert['path'],'w');
fwrite($fp,$wert['content']);
fclose($fp);
}
unset($_SESSION);
session_destroy();
echo '<a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">Operation successfull: return</a>';
exit;
}else{
?>
<html>
<head>
<title>3rd Party Application Manager</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<?php
/**
* Build up a table with checkboxes and names of the installed application
*/
echo '<font size=10; face="Arial">3rd-Party Manager';
echo '<table border="0">';
echo '<tr><td colspan=2><font size="4">Remove a 3rd-Party application</font></td></tr>';
foreach ($appl_names as $wert){
echo '<tr><td><input type="checkbox" name="del[]" value="'.$wert.'" /></td><td><input disabled="disabled" type="text" value="'.$wert.'" /></td></tr>';
}
echo '<tr colspan="4" style="text-align:center;"><td><input type="submit" name="delete" value="Delete" /></td>';
echo '<td><input type="reset" value="Reset selection" /></td></tr></table>';
?>
</form>
<?php
/**
* Form for adding a new application by user
*/
?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">
<table border="0">
<tr><td colspan="3"><font size="4">Create a 3rd-Party application for Diskstation</font></td></tr>
</th>
<tr>
<td>Text for the Link</td><td><input name="Linktext" type="text" size="40" /></td><td></td>
</tr>
<tr>
<td>Text for the Tooltip</td><td><input name="Description" type="text" size="40" /></td>
</tr>
<tr>
<td>Application Directory</td><td><input name="Dir" type="text" size="40" /></td>
</tr>
<tr>
<td>Application Type</td><td><select name="type">
<option value="embedded" selected="selected">Embedded</option>
<option value="standalone">Standalone</option>
</select>
</td>
</tr>
<tr><td>Filename</td><td><input name="fname" type="text" size="40" /></td><td width="340">This is the file that will initially be called by DSM;</br>if this is an uploaded file (see below) please repeat its name here without a path;</br>otherwise enter the file contents below.</td></tr>
<tr>
<tr>
<td colspan=2>Contents of file:</td>
</tr>
<td colspan="20"><textarea name="file_content" rows="40" cols="80"></textarea></td>
</tr>
<tr><td>File(s) to upload</td><td colspan=2><input name="file[]" type="file" size="40" /></td></tr>
<tr><td> </td><td colspan=2><input name="file[]" type="file" size="40" /></td></tr>
<tr><td> </td><td colspan=2><input name="file[]" type="file" size="40" /></td></tr>
<tr><td> </td><td colspan=2><input name="file[]" type="file" size="40" /></td></tr>
<tr><td> </td><td colspan=2><input name="file[]" type="file" size="40" /></td></tr>
<tr>
<td colspan=2><input type="submit" name="senden" value="Create" /> <input type="reset" value="Reset Form" /></td>
</tr>
</table>
</form>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<font size="4">Backup / Restore 3rd-Party applications</font></br>
<select name="time">
<?php
$path = $backup_dir.'/'.$backup_name;
$dh = opendir($path);
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path.'/'.$res)){
$t = substr($res,strpos($res,'_')+1);
$arr[] = $t;
}
}
$arr = array_unique($arr);
rsort($arr);
foreach($arr as $wert){
if(!empty($wert)){
echo '<option value="'.$wert.'">'.date('d.m.y H:i:s',$wert).'</option>';
}
}
?>
</select>
<input type="text" name="path" />
<input type="submit" name="backup" value="Backup" /> <input type="submit" name="restore" value="Restore" />
</font>
</form>
</body>
</html>
<?php
}
?>
-
probeer deze eens......
<?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;
}
ini_set('session.use_cookies','0');
session_start();
$appl_names = array();
// KEINE abschliessenden / bei den Verzeichnissen!!!
$path_3rdparty = '/usr/syno/synoman/webman/3rdparty';
$path_phpsrc = '/usr/syno/synoman/phpsrc';
$backup_dir = '/volume1/tmp';
$backup_name = 'backupSynology';
$dh = opendir($path_3rdparty);
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path_3rdparty.'/'.$res)){
$appl_names[] = $res;
}
}
natcasesort($appl_names);
if(isset($_POST['delete']) && isset($_POST['del']) && count($_POST['del']) > 0){
foreach ($_POST['del'] as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
$tt = array();
exec('rm -r '.$path_3rdparty.'/'.$wert,$tt);
if(isset($ret[1]) && is_dir($path_phpsrc.$ret[1])){
exec('rm -r '.$path_phpsrc.$ret[1],$tt);
}
if(count($tt) == 0){
echo 'Entry deleted';
}else{
echo '<pre>'.implode("rn",$tt).'</pre>';
}
exit;
}
}elseif(isset($_POST['senden']) && !empty($_POST['Linktext']) && !empty($_POST['Description']) && !empty($_POST['Dir']) && !
empty($_POST['type']) && !empty($_POST['fname'])){
$att = array();
$strr = '<strong>Please check the data below carefully as after your confirmation application directories will be created with the parameters given<br />*** No operation will be executed <u>before</u> you confirm by clicking below ***</strong>';
$strr .= '<br /><br />First the content of <strong>application.cfg</strong> that will be created in <strong>'.$path_3rdparty.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'</strong><br />';
$str = '';
$str .= 'text = '.$_POST['Linktext']."rn";
$str .= 'description = '.$_POST['Description']."rn";
$str .= 'type = ';
($_POST['type'] == 'embedded') ? $str .= 'embedded' : $str .= 'standalone';
$str .= "rn";
$str .= 'path = /phpsrc/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname']))."rn";
$_SESSION['appl.cfg'] = $str;
$_SESSION['appl.dir'] = preg_replace('/s+|/+/','',strtolower($_POST['Dir']));
for($i=0;$i<count($_FILES['file']['name']);$i++){
if($_FILES['file']['name'][$i] == ''){
continue;
}
$f = file_get_contents($_FILES['file']['tmp_name'][$i]);
$att[] = array('path'=>$path_phpsrc.'/'.$_SESSION['appl.dir'].'/'.$_FILES['file']['name'][$i],'content'=>$f);
}
if(isset($_POST['file_content']) && trim($_POST['file_content']) != ''){
$att[] = array('path'=>$path_phpsrc.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname'])),'content'=>str_replace(chr(13),'',stripslashes($_POST['file_content'])));
}
$_SESSION['appl.att'] = $att;
echo $strr;
echo '<pre>'.$str.'</pre>';
echo '<br />';
echo 'The following files from your upload will be created:<br /><br />';
foreach($_SESSION['appl.att'] as $wert){
echo '<strong>'.$wert['path'].'</strong><br />';
}
echo '<br />By clicking <a href="'.$_SERVER['PHP_SELF'].'?'.strip_tags(SID).'">this link</a> all the necessary operation will be written to disk!!!<br />You can abort the operation by <a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">clicking this link</a>';
}elseif(isset($_SESSION['appl.cfg']) && isset($_SESSION['appl.dir'])){
exec('mkdir '.$path_3rdparty.'/'.$_SESSION['appl.dir']);
exec('mkdir '.$path_phpsrc.'/'.$_SESSION['appl.dir']);
$fp = fopen($path_3rdparty.'/'.$_SESSION['appl.dir'].'/application.cfg','w');
fwrite($fp,$_SESSION['appl.cfg']);
fclose($fp);
foreach($_SESSION['appl.att'] as $wert){
$fp = fopen($wert['path'],'w');
fwrite($fp,$wert['content']);
fclose($fp);
}
unset($_SESSION);
session_destroy();
echo '<a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">Operation Successfull</a>';
exit;
}elseif(isset($_POST['backup'])){
if(!is_dir($backup_dir.'/'.$backup_name)){
mkdir($backup_dir.'/'.$backup_name);
}
$t = time();
mkdir($backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
mkdir($backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
foreach($appl_names as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
exec('cp -R '.$path_3rdparty.'/'.$wert.' '.$backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
exec('cp -R '.$path_phpsrc.$ret[1].' '.$backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
}
die('Data succesfully written to backup directory');
}elseif(isset($_POST['restore']) && isset($_POST['time']) && !empty($_POST['time'])){
if(!is_dir($backup_dir.'/'.$backup_name.'/3rdparty_'.$_POST['time']) || !is_dir($backup_dir.'/'.$backup_name.'/phpsrc_'.$_POST['time'])){
die('Data could not be restored because either Backup Path was not given OR the subdirectories (3rdparty phpsrc) do not exist in given path');
}
exec('cp -Rf '.$backup_dir.'/'.$backup_name.'/phpsrc_'.$_POST['time'].'/* '.$path_phpsrc);
exec('cp -Rf '.$backup_dir.'/'.$backup_name.'/3rdparty_'.$_POST['time'].'/* '.$path_3rdparty);
die('Data succesfully restored');
}else{
?>
<html>
<head>
<title>3rd Party Application Remover</title>
<style>body,input,textarea,td,option,select{font:11px Verdana}fieldset{border:1px solid #bbb}</style>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<fieldset><legend>installed 3rd-party-applications / remover</legend><table border="0"><tr>
<?php
$ii=0;
foreach ($appl_names as $wert){
echo '<td width="120px"><input type="checkbox" name="del[]" value="'.$wert.'" />'.$wert.'</td><td>';
if (++$ii % 7 == 0) echo '</td></tr><tr>';
}
?>
</tr></table>
<input style="margin-left:150px;margin-top:5px;" type="reset" value="reset form" />
<input style="margin-left:320px" type="submit" name="delete" value="remove 3rd-party-apps" />
</fieldset></form>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">
<fieldset><legend>create 3rd-party-application</legend>
<span style="padding-right:53px">text for the link:</span> <input size="90" type="text" name="Linktext" /><br/>
<span style="padding-right:20px">description for tooltip:</span> <input size="90" type="text" name="Description" /><br/>
<span style="padding-right:25px">application directory:</span> <input size="90" type="text" name="Dir" /><br/>
<span style="padding-right:51px">application type:</span> <select name="type">
<option value="embedded" selected="selected">embedded</option>
<option value="popup">popup</option></select><br/>
<span style="padding-right:96px">filename:</span><input input size="90" type="text" name="fname" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:83px">file content:</span><textarea name="file_content" rows="10" cols="87"></textarea><br/>
<input style="margin-left:150px" type="reset" value="reset form" /><input style="margin-left:330px" type="submit" name="senden" value="create 3rd-party-app" />
</fieldset>
<fieldset><legend>Backup and Restore 3rd Party Applications</legend>
<fieldset><legend>Backup 3rd Party Applications</legend>
<input type="submit" name="backup" value="Create Backup" />
</fieldset>
<fieldset><legend>Restore 3rd Party Applications</legend>
<span style="padding-right:20px">Select date for restore</span><select name="time">
<?php
$path = $backup_dir.'/'.$backup_name;
$dh = opendir($path);
$arr = array();
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path.'/'.$res)){
$t = substr($res,strpos($res,'_')+1);
$arr[] =intval($t);
}
}
$arr = array_unique($arr);
rsort($arr);
foreach($arr as $wert){
if(!empty($wert) && $wert != 0){
echo '<option value="'.$wert.'">'.date('d.m.y H:i:s',$wert).'</option>';
}
}
?>
</select>
<input type="submit" name="restore" value="Restore" />
</fieldset>
</fieldset>
</form>
</body>
</html>
<?php
}
?>
-
probeer deze eens......
<?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;
}
ini_set('session.use_cookies','0');
session_start();
$appl_names = array();
// KEINE abschliessenden / bei den Verzeichnissen!!!
$path_3rdparty = '/usr/syno/synoman/webman/3rdparty';
$path_phpsrc = '/usr/syno/synoman/phpsrc';
$backup_dir = '/volume1/tmp';
$backup_name = 'backupSynology';
$dh = opendir($path_3rdparty);
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path_3rdparty.'/'.$res)){
$appl_names[] = $res;
}
}
natcasesort($appl_names);
if(isset($_POST['delete']) && isset($_POST['del']) && count($_POST['del']) > 0){
foreach ($_POST['del'] as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
$tt = array();
exec('rm -r '.$path_3rdparty.'/'.$wert,$tt);
if(isset($ret[1]) && is_dir($path_phpsrc.$ret[1])){
exec('rm -r '.$path_phpsrc.$ret[1],$tt);
}
if(count($tt) == 0){
echo 'Entry deleted';
}else{
echo '<pre>'.implode("rn",$tt).'</pre>';
}
exit;
}
}elseif(isset($_POST['senden']) && !empty($_POST['Linktext']) && !empty($_POST['Description']) && !empty($_POST['Dir']) && !
empty($_POST['type']) && !empty($_POST['fname'])){
$att = array();
$strr = '<strong>Please check the data below carefully as after your confirmation application directories will be created with the parameters given<br />*** No operation will be executed <u>before</u> you confirm by clicking below ***</strong>';
$strr .= '<br /><br />First the content of <strong>application.cfg</strong> that will be created in <strong>'.$path_3rdparty.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'</strong><br />';
$str = '';
$str .= 'text = '.$_POST['Linktext']."rn";
$str .= 'description = '.$_POST['Description']."rn";
$str .= 'type = ';
($_POST['type'] == 'embedded') ? $str .= 'embedded' : $str .= 'standalone';
$str .= "rn";
$str .= 'path = /phpsrc/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname']))."rn";
$_SESSION['appl.cfg'] = $str;
$_SESSION['appl.dir'] = preg_replace('/s+|/+/','',strtolower($_POST['Dir']));
for($i=0;$i<count($_FILES['file']['name']);$i++){
if($_FILES['file']['name'][$i] == ''){
continue;
}
$f = file_get_contents($_FILES['file']['tmp_name'][$i]);
$att[] = array('path'=>$path_phpsrc.'/'.$_SESSION['appl.dir'].'/'.$_FILES['file']['name'][$i],'content'=>$f);
}
if(isset($_POST['file_content']) && trim($_POST['file_content']) != ''){
$att[] = array('path'=>$path_phpsrc.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname'])),'content'=>str_replace(chr(13),'',stripslashes($_POST['file_content'])));
}
$_SESSION['appl.att'] = $att;
echo $strr;
echo '<pre>'.$str.'</pre>';
echo '<br />';
echo 'The following files from your upload will be created:<br /><br />';
foreach($_SESSION['appl.att'] as $wert){
echo '<strong>'.$wert['path'].'</strong><br />';
}
echo '<br />By clicking <a href="'.$_SERVER['PHP_SELF'].'?'.strip_tags(SID).'">this link</a> all the necessary operation will be written to disk!!!<br />You can abort the operation by <a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">clicking this link</a>';
}elseif(isset($_SESSION['appl.cfg']) && isset($_SESSION['appl.dir'])){
exec('mkdir '.$path_3rdparty.'/'.$_SESSION['appl.dir']);
exec('mkdir '.$path_phpsrc.'/'.$_SESSION['appl.dir']);
$fp = fopen($path_3rdparty.'/'.$_SESSION['appl.dir'].'/application.cfg','w');
fwrite($fp,$_SESSION['appl.cfg']);
fclose($fp);
foreach($_SESSION['appl.att'] as $wert){
$fp = fopen($wert['path'],'w');
fwrite($fp,$wert['content']);
fclose($fp);
}
unset($_SESSION);
session_destroy();
echo '<a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">Operation Successfull</a>';
exit;
}elseif(isset($_POST['backup'])){
if(!is_dir($backup_dir.'/'.$backup_name)){
mkdir($backup_dir.'/'.$backup_name);
}
$t = time();
mkdir($backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
mkdir($backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
foreach($appl_names as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
exec('cp -R '.$path_3rdparty.'/'.$wert.' '.$backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
exec('cp -R '.$path_phpsrc.$ret[1].' '.$backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
}
die('Data succesfully written to backup directory');
}elseif(isset($_POST['restore']) && isset($_POST['time']) && !empty($_POST['time'])){
if(!is_dir($backup_dir.'/'.$backup_name.'/3rdparty_'.$_POST['time']) || !is_dir($backup_dir.'/'.$backup_name.'/phpsrc_'.$_POST['time'])){
die('Data could not be restored because either Backup Path was not given OR the subdirectories (3rdparty phpsrc) do not exist in given path');
}
exec('cp -Rf '.$backup_dir.'/'.$backup_name.'/phpsrc_'.$_POST['time'].'/* '.$path_phpsrc);
exec('cp -Rf '.$backup_dir.'/'.$backup_name.'/3rdparty_'.$_POST['time'].'/* '.$path_3rdparty);
die('Data succesfully restored');
}else{
?>
<html>
<head>
<title>3rd Party Application Remover</title>
<style>body,input,textarea,td,option,select{font:11px Verdana}fieldset{border:1px solid #bbb}</style>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<fieldset><legend>installed 3rd-party-applications / remover</legend><table border="0"><tr>
<?php
$ii=0;
foreach ($appl_names as $wert){
echo '<td width="120px"><input type="checkbox" name="del[]" value="'.$wert.'" />'.$wert.'</td><td>';
if (++$ii % 7 == 0) echo '</td></tr><tr>';
}
?>
</tr></table>
<input style="margin-left:150px;margin-top:5px;" type="reset" value="reset form" />
<input style="margin-left:320px" type="submit" name="delete" value="remove 3rd-party-apps" />
</fieldset></form>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">
<fieldset><legend>create 3rd-party-application</legend>
<span style="padding-right:53px">text for the link:</span> <input size="90" type="text" name="Linktext" /><br/>
<span style="padding-right:20px">description for tooltip:</span> <input size="90" type="text" name="Description" /><br/>
<span style="padding-right:25px">application directory:</span> <input size="90" type="text" name="Dir" /><br/>
<span style="padding-right:51px">application type:</span> <select name="type">
<option value="embedded" selected="selected">embedded</option>
<option value="popup">popup</option></select><br/>
<span style="padding-right:96px">filename:</span><input input size="90" type="text" name="fname" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:83px">file content:</span><textarea name="file_content" rows="10" cols="87"></textarea><br/>
<input style="margin-left:150px" type="reset" value="reset form" /><input style="margin-left:330px" type="submit" name="senden" value="create 3rd-party-app" />
</fieldset>
<fieldset><legend>Backup and Restore 3rd Party Applications</legend>
<fieldset><legend>Backup 3rd Party Applications</legend>
<input type="submit" name="backup" value="Create Backup" />
</fieldset>
<fieldset><legend>Restore 3rd Party Applications</legend>
<span style="padding-right:20px">Select date for restore</span><select name="time">
<?php
$path = $backup_dir.'/'.$backup_name;
$dh = opendir($path);
$arr = array();
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path.'/'.$res)){
$t = substr($res,strpos($res,'_')+1);
$arr[] =intval($t);
}
}
$arr = array_unique($arr);
rsort($arr);
foreach($arr as $wert){
if(!empty($wert) && $wert != 0){
echo '<option value="'.$wert.'">'.date('d.m.y H:i:s',$wert).'</option>';
}
}
?>
</select>
<input type="submit" name="restore" value="Restore" />
</fieldset>
</fieldset>
</form>
</body>
</html>
<?php
}
?>
Zelfde error.
-
zie eens een vorige reactie in deze post van wowo. Die kreeg ook zo'n foutmelding en dat had iets te maken met spaties aan het begin van de regels.
Uit de code van je vorige post leek het daar ook op.
Groet,
Grafcom
-
Als ik de code op regel 6 met // uitzonder dan krijg ik wel het formulier maar deze foutmelding bovenin:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /usr/syno/synoman/phpsrc/manager/manager.php:1) in /usr/syno/synoman/phpsrc/manager/manager.php on line 10
<?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;
//}
ini_set('session.use_cookies','0');
session_start();
$appl_names = array();
// KEINE abschliessenden / bei den Verzeichnissen!!!
$path_3rdparty = '/usr/syno/synoman/webman/3rdparty';
$path_phpsrc = '/usr/syno/synoman/phpsrc';
$backup_dir = '/volume1/tmp';
$backup_name = 'backupSynology';
$dh = opendir($path_3rdparty);
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path_3rdparty.'/'.$res)){
$appl_names[] = $res;
}
}
natcasesort($appl_names);
if(isset($_POST['delete']) && isset($_POST['del']) && count($_POST['del']) > 0){
foreach ($_POST['del'] as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
$tt = array();
exec('rm -r '.$path_3rdparty.'/'.$wert,$tt);
if(isset($ret[1]) && is_dir($path_phpsrc.$ret[1])){
exec('rm -r '.$path_phpsrc.$ret[1],$tt);
}
if(count($tt) == 0){
echo 'Entry deleted';
}else{
echo '<pre>'.implode("rn",$tt).'</pre>';
}
exit;
}
}elseif(isset($_POST['senden']) && !empty($_POST['Linktext']) && !empty($_POST['Description']) && !empty($_POST['Dir']) && !
empty($_POST['type']) && !empty($_POST['fname'])){
$att = array();
$strr = '<strong>Please check the data below carefully as after your confirmation application directories will be created with the parameters given<br />*** No operation will be executed <u>before</u> you confirm by clicking below ***</strong>';
$strr .= '<br /><br />First the content of <strong>application.cfg</strong> that will be created in <strong>'.$path_3rdparty.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'</strong><br />';
$str = '';
$str .= 'text = '.$_POST['Linktext']."rn";
$str .= 'description = '.$_POST['Description']."rn";
$str .= 'type = ';
($_POST['type'] == 'embedded') ? $str .= 'embedded' : $str .= 'standalone';
$str .= "rn";
$str .= 'path = /phpsrc/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname']))."rn";
$_SESSION['appl.cfg'] = $str;
$_SESSION['appl.dir'] = preg_replace('/s+|/+/','',strtolower($_POST['Dir']));
for($i=0;$i<count($_FILES['file']['name']);$i++){
if($_FILES['file']['name'][$i] == ''){
continue;
}
$f = file_get_contents($_FILES['file']['tmp_name'][$i]);
$att[] = array('path'=>$path_phpsrc.'/'.$_SESSION['appl.dir'].'/'.$_FILES['file']['name'][$i],'content'=>$f);
}
if(isset($_POST['file_content']) && trim($_POST['file_content']) != ''){
$att[] = array('path'=>$path_phpsrc.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname'])),'content'=>str_replace(chr(13),'',stripslashes($_POST['file_content'])));
}
$_SESSION['appl.att'] = $att;
echo $strr;
echo '<pre>'.$str.'</pre>';
echo '<br />';
echo 'The following files from your upload will be created:<br /><br />';
foreach($_SESSION['appl.att'] as $wert){
echo '<strong>'.$wert['path'].'</strong><br />';
}
echo '<br />By clicking <a href="'.$_SERVER['PHP_SELF'].'?'.strip_tags(SID).'">this link</a> all the necessary operation will be written to disk!!!<br />You can abort the operation by <a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">clicking this link</a>';
}elseif(isset($_SESSION['appl.cfg']) && isset($_SESSION['appl.dir'])){
exec('mkdir '.$path_3rdparty.'/'.$_SESSION['appl.dir']);
exec('mkdir '.$path_phpsrc.'/'.$_SESSION['appl.dir']);
$fp = fopen($path_3rdparty.'/'.$_SESSION['appl.dir'].'/application.cfg','w');
fwrite($fp,$_SESSION['appl.cfg']);
fclose($fp);
foreach($_SESSION['appl.att'] as $wert){
$fp = fopen($wert['path'],'w');
fwrite($fp,$wert['content']);
fclose($fp);
}
unset($_SESSION);
session_destroy();
echo '<a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">Operation Successfull</a>';
exit;
}elseif(isset($_POST['backup'])){
if(!is_dir($backup_dir.'/'.$backup_name)){
mkdir($backup_dir.'/'.$backup_name);
}
$t = time();
mkdir($backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
mkdir($backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
foreach($appl_names as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
exec('cp -R '.$path_3rdparty.'/'.$wert.' '.$backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
exec('cp -R '.$path_phpsrc.$ret[1].' '.$backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
}
die('Data succesfully written to backup directory');
}elseif(isset($_POST['restore']) && isset($_POST['time']) && !empty($_POST['time'])){
if(!is_dir($backup_dir.'/'.$backup_name.'/3rdparty_'.$_POST['time']) || !is_dir($backup_dir.'/'.$backup_name.'/phpsrc_'.$_POST['time'])){
die('Data could not be restored because either Backup Path was not given OR the subdirectories (3rdparty phpsrc) do not exist in given path');
}
exec('cp -Rf '.$backup_dir.'/'.$backup_name.'/phpsrc_'.$_POST['time'].'/* '.$path_phpsrc);
exec('cp -Rf '.$backup_dir.'/'.$backup_name.'/3rdparty_'.$_POST['time'].'/* '.$path_3rdparty);
die('Data succesfully restored');
}else{
?>
<html>
<head>
<title>3rd Party Application Remover</title>
<style>body,input,textarea,td,option,select{font:11px Verdana}fieldset{border:1px solid #bbb}</style>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<fieldset><legend>installed 3rd-party-applications / remover</legend><table border="0"><tr>
<?php
$ii=0;
foreach ($appl_names as $wert){
echo '<td width="120px"><input type="checkbox" name="del[]" value="'.$wert.'" />'.$wert.'</td><td>';
if (++$ii % 7 == 0) echo '</td></tr><tr>';
}
?>
</tr></table>
<input style="margin-left:150px;margin-top:5px;" type="reset" value="reset form" />
<input style="margin-left:320px" type="submit" name="delete" value="remove 3rd-party-apps" />
</fieldset></form>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">
<fieldset><legend>create 3rd-party-application</legend>
<span style="padding-right:53px">text for the link:</span> <input size="90" type="text" name="Linktext" /><br/>
<span style="padding-right:20px">description for tooltip:</span> <input size="90" type="text" name="Description" /><br/>
<span style="padding-right:25px">application directory:</span> <input size="90" type="text" name="Dir" /><br/>
<span style="padding-right:51px">application type:</span> <select name="type">
<option value="embedded" selected="selected">embedded</option>
<option value="popup">popup</option></select><br/>
<span style="padding-right:96px">filename:</span><input input size="90" type="text" name="fname" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:83px">file content:</span><textarea name="file_content" rows="10" cols="87"></textarea><br/>
<input style="margin-left:150px" type="reset" value="reset form" /><input style="margin-left:330px" type="submit" name="senden" value="create 3rd-party-app" />
</fieldset>
<fieldset><legend>Backup and Restore 3rd Party Applications</legend>
<fieldset><legend>Backup 3rd Party Applications</legend>
<input type="submit" name="backup" value="Create Backup" />
</fieldset>
<fieldset><legend>Restore 3rd Party Applications</legend>
<span style="padding-right:20px">Select date for restore</span><select name="time">
<?php
$path = $backup_dir.'/'.$backup_name;
$dh = opendir($path);
$arr = array();
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path.'/'.$res)){
$t = substr($res,strpos($res,'_')+1);
$arr[] =intval($t);
}
}
$arr = array_unique($arr);
rsort($arr);
foreach($arr as $wert){
if(!empty($wert) && $wert != 0){
echo '<option value="'.$wert.'">'.date('d.m.y H:i:s',$wert).'</option>';
}
}
?>
</select>
<input type="submit" name="restore" value="Restore" />
</fieldset>
</fieldset>
</form>
</body>
</html>
<?php
}
?>
-
Deze melding stond in een post hiervoor
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /usr/syno/synoman/phpsrc/manager/manager.php:1) in /usr/syno/synoman/phpsrc/manager/manager.php on line 10
Komt overeen.
En wanneer ik naar je code kijk (vergelijk met het beeld dat ik stuurde) lijkt het alsof er "lege tekens" voor de regels staan. Kun je die weghalen en opnieuw proberen?
Groet,
Grafcom
-
Deze melding stond in een post hiervoor
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /usr/syno/synoman/phpsrc/manager/manager.php:1) in /usr/syno/synoman/phpsrc/manager/manager.php on line 10
Komt overeen.
En wanneer ik naar je code kijk (vergelijk met het beeld dat ik stuurde) lijkt het alsof er "lege tekens" voor de regels staan. Kun je die weghalen en opnieuw proberen?
Groet,
Grafcom
Dan krijg ik een leeg frame met "3rd party manager" erboven.
In Notepad++ doe ik de tekst v/d openingspost kopieren en plakken in een nieuw UNIX ANSI PHP document
Daar heb ik dan die gaten voor de regels. Die verwijder ik door in Notepad++ Bewerken/Insprong verkleinen.
Toch gaat het niet goed ergens in de code. Alleen waar is de vraag.
Code die ik overhou in N++
<?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;
}
ini_set('session.use_cookies','0');
session_start();
/**
* Setting some "global" Vars
*/
$appl_names = array();
$path_3rdparty = '/usr/syno/synoman/webman/3rdparty';
$path_phpsrc = '/usr/syno/synoman/phpsrc';
$backup_dir = '/volume1/tmp';
$backup_name = 'backupSynology';
$dh = opendir($path_3rdparty);
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path_3rdparty.'/'.$res)){
$appl_names[] = $res;
}
}
if(isset($_POST['delete']) && isset($_POST['del']) && count($_POST['del']) > 0){
foreach ($_POST['del'] as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
$tt = array();
exec('rm -r '.$path_3rdparty.'/'.$wert,$tt);
if(isset($ret[1]) && is_dir($path_phpsrc.$ret[1])){
exec('rm -r '.$path_phpsrc.$ret[1],$tt);
}
if(count($tt) == 0){
echo 'Entry deleted';
}else{
echo '<pre>'.implode("rn",$tt).'</pre>';
}
exit;
}
}elseif(isset($_POST['senden']) && !empty($_POST['Linktext']) && !empty($_POST['Description']) && !empty($_POST['Dir']) && !empty($_POST['type']) && (!empty($_POST['fname']) || !empty($_FILES['file']['name'][0]))){
$att = array();
$strr = '<strong>Please check the data below carefully as after your confirmation application directories will be created with the parameters given<br />*** No operation will be executed <u>before</u> you confirm by clicking below ***</strong>';
$strr .= '<br /><br />First the content of <strong>application.cfg</strong> that will be created in <strong>'.$path_3rdparty.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'</strong><br />';
$str = '';
$str .= 'text = '.$_POST['Linktext']."rn";
$str .= 'description = '.$_POST['Description']."rn";
$str .= 'type = ';
($_POST['type'] == 'embedded') ? $str .= 'embedded' : $str .= 'standalone';
$str .= "rn";
$str .= 'path = /phpsrc/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname']))."rn";
$_SESSION['appl.cfg'] = $str;
$_SESSION['appl.dir'] = preg_replace('/s+|/+/','',strtolower($_POST['Dir']));
for($i=0;$i<count($_FILES['file']['name']);$i++){
if($_FILES['file']['name'][$i] == '' || $_FILES['file']['size'][$i] == 0){
continue;
}
$f = file_get_contents($_FILES['file']['tmp_name'][$i]);
$att[] = array('path'=>$path_phpsrc.'/'.$_SESSION['appl.dir'].'/'.$_FILES['file']['name'][$i],'content'=>$f);
}
if(isset($_POST['file_content']) && trim($_POST['file_content']) != ''){
$att[] = array('path'=>$path_phpsrc.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname'])),'content'=>str_replace(chr(13),'',stripslashes($_POST['file_content'])));
}
$_SESSION['appl.att'] = $att;
echo $strr;
echo '<pre>'.$str.'</pre>';
echo '<br />';
echo 'The following files from your upload will be created:<br /><br />';
foreach($_SESSION['appl.att'] as $wert){
echo '<strong>'.$wert['path'].'</strong><br />';
}
echo '<br />By clicking <a href="'.$_SERVER['PHP_SELF'].'?'.strip_tags(SID).'">this link</a> all the necessary files and settings will be written to disk!!!<br />You can abort the operation by <a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">clicking this link</a>';
}elseif(isset($_POST['backup'])){
if(!is_dir($backup_dir.'/'.$backup_name)){
mkdir($backup_dir.'/'.$backup_name);
}
$t = time();
mkdir($backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
mkdir($backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
foreach($appl_names as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
exec('cp -R '.$path_3rdparty.'/'.$wert.' '.$backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
exec('cp -R '.$path_phpsrc.$ret[1].' '.$backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
}
die('Data succesfully written to backup directory');
}elseif(isset($_POST['restore']) && isset($_POST['path']) && !empty($_POST['path'])){
if(!is_dir($_POST['path']) || !is_dir($_POST['path'].'/phpsrc_'.$_POST['time']) || !is_dir($_POST['path'].'/3rdparty_'.$_POST['time'])){
die('Data could not be restored because eihter BackupPath was not given OR the subdirectories (3rdparty phpsrc) do not exist in given path');
}
exec('cp -Rf '.$_POST['path'].'/phpsrc_'.$_POST['time'].'/* '.$path_phpsrc);
exec('cp -Rf '.$_POST['path'].'/3rdparty_'.$_POST['time'].'/* '.$path_3rdparty);
die('Data succesfully restored');
}elseif(isset($_SESSION['appl.cfg']) && isset($_SESSION['appl.dir'])){
exec('mkdir '.$path_3rdparty.'/'.$_SESSION['appl.dir']);
exec('mkdir '.$path_phpsrc.'/'.$_SESSION['appl.dir']);
$fp = fopen($path_3rdparty.'/'.$_SESSION['appl.dir'].'/application.cfg','w');
fwrite($fp,$_SESSION['appl.cfg']);
fclose($fp);
foreach($_SESSION['appl.att'] as $wert){
$fp = fopen($wert['path'],'w');
fwrite($fp,$wert['content']);
fclose($fp);
}
unset($_SESSION);
session_destroy();
echo '<a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">Operation successfull: return</a>';
exit;
}else{
?>
<html>
<head>
<title>3rd Party Application Manager</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<?php
/**
* Build up a table with checkboxes and names of the installed application
*/
echo '<font size=10; face="Arial">3rd-Party Manager';
echo '<table border="0">';
echo '<tr><td colspan=2><font size="4">Remove a 3rd-Party application</font></td></tr>';
foreach ($appl_names as $wert){
echo '<tr><td><input type="checkbox" name="del[]" value="'.$wert.'" /></td><td><input disabled="disabled" type="text" value="'.$wert.'" /></td></tr>';
}
echo '<tr colspan="4" style="text-align:center;"><td><input type="submit" name="delete" value="Delete" /></td>';
echo '<td><input type="reset" value="Reset selection" /></td></tr></table>';
?>
</form>
<?php
/**
* Form for adding a new application by user
*/
?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">
<table border="0">
<tr><td colspan="3"><font size="4">Create a 3rd-Party application for Diskstation</font></td></tr>
</th>
<tr>
<td>Text for the Link</td><td><input name="Linktext" type="text" size="40" /></td><td></td>
</tr>
<tr>
<td>Text for the Tooltip</td><td><input name="Description" type="text" size="40" /></td>
</tr>
<tr>
<td>Application Directory</td><td><input name="Dir" type="text" size="40" /></td>
</tr>
<tr>
<td>Application Type</td><td><select name="type">
<option value="embedded" selected="selected">Embedded</option>
<option value="standalone">Standalone</option>
</select>
</td>
</tr>
<tr><td>Filename</td><td><input name="fname" type="text" size="40" /></td><td width="340">This is the file that will initially be called by DSM;</br>if this is an uploaded file (see below) please repeat its name here without a path;</br>otherwise enter the file contents below.</td></tr>
<tr>
<tr>
<td colspan=2>Contents of file:</td>
</tr>
<td colspan="20"><textarea name="file_content" rows="40" cols="80"></textarea></td>
</tr>
<tr><td>File(s) to upload</td><td colspan=2><input name="file[]" type="file" size="40" /></td></tr>
<tr><td> </td><td colspan=2><input name="file[]" type="file" size="40" /></td></tr>
<tr><td> </td><td colspan=2><input name="file[]" type="file" size="40" /></td></tr>
<tr><td> </td><td colspan=2><input name="file[]" type="file" size="40" /></td></tr>
<tr><td> </td><td colspan=2><input name="file[]" type="file" size="40" /></td></tr>
<tr>
<td colspan=2><input type="submit" name="senden" value="Create" /> <input type="reset" value="Reset Form" /></td>
</tr>
</table>
</form>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<font size="4">Backup / Restore 3rd-Party applications</font></br>
<select name="time">
<?php
$path = $backup_dir.'/'.$backup_name;
$dh = opendir($path);
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path.'/'.$res)){
$t = substr($res,strpos($res,'_')+1);
$arr[] = $t;
}
}
$arr = array_unique($arr);
rsort($arr);
foreach($arr as $wert){
if(!empty($wert)){
echo '<option value="'.$wert.'">'.date('d.m.y H:i:s',$wert).'</option>';
}
}
?>
</select>
<input type="text" name="path" />
<input type="submit" name="backup" value="Backup" /> <input type="submit" name="restore" value="Restore" />
</font>
</form>
</body>
</html>
<?php
}
?>
-
Probeer eens de code die ik poste te plaatsen in "gewoon" Windows kladblok (NIET Wordpad).
Bij opslaan als codering op ANSI laten staan en bij "opslaan als type" Alle bestanden kiezen en vervolgens de naam manager.php kiezen.
Dit zou zonder problemen moeten kunnen. :mrgreen:
-
Probeer eens de code die ik poste te plaatsen in "gewoon" Windows kladblok (NIET Wordpad).
Bij opslaan als codering op ANSI laten staan en bij "opslaan als type" Alle bestanden kiezen en vervolgens de naam manager.php kiezen.
Dit zou zonder problemen moeten kunnen. :mrgreen:
Dan krijg ik dus weer dit:
Warning: Cannot modify header information - headers already sent by (output started at /usr/syno/synoman/phpsrc/manager/manager.php:1) in /usr/syno/synoman/phpsrc/manager/manager.php on line 6
-
Hallo Alex,
worden dan die lege tekens weer geplaatst? :shock:
Groet,
Grafcom
-
Hallo Alex,
worden dan die lege tekens weer geplaatst? :shock:
Groet,
Grafcom
Ja. Kun je me anders jouw origineel eens e-mailen? alex.hendriks.alex@gmail.com
<?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;
}
ini_set('session.use_cookies','0');
session_start();
$appl_names = array();
// KEINE abschliessenden / bei den Verzeichnissen!!!
$path_3rdparty = '/usr/syno/synoman/webman/3rdparty';
$path_phpsrc = '/usr/syno/synoman/phpsrc';
$backup_dir = '/volume1/tmp';
$backup_name = 'backupSynology';
$dh = opendir($path_3rdparty);
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path_3rdparty.'/'.$res)){
$appl_names[] = $res;
}
}
natcasesort($appl_names);
if(isset($_POST['delete']) && isset($_POST['del']) && count($_POST['del']) > 0){
foreach ($_POST['del'] as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
$tt = array();
exec('rm -r '.$path_3rdparty.'/'.$wert,$tt);
if(isset($ret[1]) && is_dir($path_phpsrc.$ret[1])){
exec('rm -r '.$path_phpsrc.$ret[1],$tt);
}
if(count($tt) == 0){
echo 'Entry deleted';
}else{
echo '<pre>'.implode("rn",$tt).'</pre>';
}
exit;
}
}elseif(isset($_POST['senden']) && !empty($_POST['Linktext']) && !empty($_POST['Description']) && !empty($_POST['Dir']) && !
empty($_POST['type']) && !empty($_POST['fname'])){
$att = array();
$strr = '<strong>Please check the data below carefully as after your confirmation application directories will be created with the parameters given<br />*** No operation will be executed <u>before</u> you confirm by clicking below ***</strong>';
$strr .= '<br /><br />First the content of <strong>application.cfg</strong> that will be created in <strong>'.$path_3rdparty.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'</strong><br />';
$str = '';
$str .= 'text = '.$_POST['Linktext']."rn";
$str .= 'description = '.$_POST['Description']."rn";
$str .= 'type = ';
($_POST['type'] == 'embedded') ? $str .= 'embedded' : $str .= 'standalone';
$str .= "rn";
$str .= 'path = /phpsrc/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname']))."rn";
$_SESSION['appl.cfg'] = $str;
$_SESSION['appl.dir'] = preg_replace('/s+|/+/','',strtolower($_POST['Dir']));
for($i=0;$i<count($_FILES['file']['name']);$i++){
if($_FILES['file']['name'][$i] == ''){
continue;
}
$f = file_get_contents($_FILES['file']['tmp_name'][$i]);
$att[] = array('path'=>$path_phpsrc.'/'.$_SESSION['appl.dir'].'/'.$_FILES['file']['name'][$i],'content'=>$f);
}
if(isset($_POST['file_content']) && trim($_POST['file_content']) != ''){
$att[] = array('path'=>$path_phpsrc.'/'.preg_replace('/s+|/+/','',strtolower($_POST['Dir'])).'/'.preg_replace('/s+|/+/','',strtolower($_POST['fname'])),'content'=>str_replace(chr(13),'',stripslashes($_POST['file_content'])));
}
$_SESSION['appl.att'] = $att;
echo $strr;
echo '<pre>'.$str.'</pre>';
echo '<br />';
echo 'The following files from your upload will be created:<br /><br />';
foreach($_SESSION['appl.att'] as $wert){
echo '<strong>'.$wert['path'].'</strong><br />';
}
echo '<br />By clicking <a href="'.$_SERVER['PHP_SELF'].'?'.strip_tags(SID).'">this link</a> all the necessary operation will be written to disk!!!<br />You can abort the operation by <a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">clicking this link</a>';
}elseif(isset($_SESSION['appl.cfg']) && isset($_SESSION['appl.dir'])){
exec('mkdir '.$path_3rdparty.'/'.$_SESSION['appl.dir']);
exec('mkdir '.$path_phpsrc.'/'.$_SESSION['appl.dir']);
$fp = fopen($path_3rdparty.'/'.$_SESSION['appl.dir'].'/application.cfg','w');
fwrite($fp,$_SESSION['appl.cfg']);
fclose($fp);
foreach($_SESSION['appl.att'] as $wert){
$fp = fopen($wert['path'],'w');
fwrite($fp,$wert['content']);
fclose($fp);
}
unset($_SESSION);
session_destroy();
echo '<a href="https://'.$_SERVER['SERVER_ADDR'].':5001/webman/index.cgi">Operation Successfull</a>';
exit;
}elseif(isset($_POST['backup'])){
if(!is_dir($backup_dir.'/'.$backup_name)){
mkdir($backup_dir.'/'.$backup_name);
}
$t = time();
mkdir($backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
mkdir($backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
foreach($appl_names as $wert){
(file_exists($path_3rdparty.'/'.$wert.'/application.cfg') ? $res=file_get_contents($path_3rdparty.'/'.$wert.'/application.cfg') :$res=0);
if($res===0){
continue;
}
preg_match('/path.*?=.*?/phpsrc(/.*?)/.*?.[^s]*/i',$res,$ret);
exec('cp -R '.$path_3rdparty.'/'.$wert.' '.$backup_dir.'/'.$backup_name.'/3rdparty_'.$t);
exec('cp -R '.$path_phpsrc.$ret[1].' '.$backup_dir.'/'.$backup_name.'/phpsrc_'.$t);
}
die('Data succesfully written to backup directory');
}elseif(isset($_POST['restore']) && isset($_POST['time']) && !empty($_POST['time'])){
if(!is_dir($backup_dir.'/'.$backup_name.'/3rdparty_'.$_POST['time']) || !is_dir($backup_dir.'/'.$backup_name.'/phpsrc_'.$_POST['time'])){
die('Data could not be restored because either Backup Path was not given OR the subdirectories (3rdparty phpsrc) do not exist in given path');
}
exec('cp -Rf '.$backup_dir.'/'.$backup_name.'/phpsrc_'.$_POST['time'].'/* '.$path_phpsrc);
exec('cp -Rf '.$backup_dir.'/'.$backup_name.'/3rdparty_'.$_POST['time'].'/* '.$path_3rdparty);
die('Data succesfully restored');
}else{
?>
<html>
<head>
<title>3rd Party Application Remover</title>
<style>body,input,textarea,td,option,select{font:11px Verdana}fieldset{border:1px solid #bbb}</style>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<fieldset><legend>installed 3rd-party-applications / remover</legend><table border="0"><tr>
<?php
$ii=0;
foreach ($appl_names as $wert){
echo '<td width="120px"><input type="checkbox" name="del[]" value="'.$wert.'" />'.$wert.'</td><td>';
if (++$ii % 7 == 0) echo '</td></tr><tr>';
}
?>
</tr></table>
<input style="margin-left:150px;margin-top:5px;" type="reset" value="reset form" />
<input style="margin-left:320px" type="submit" name="delete" value="remove 3rd-party-apps" />
</fieldset></form>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">
<fieldset><legend>create 3rd-party-application</legend>
<span style="padding-right:53px">text for the link:</span> <input size="90" type="text" name="Linktext" /><br/>
<span style="padding-right:20px">description for tooltip:</span> <input size="90" type="text" name="Description" /><br/>
<span style="padding-right:25px">application directory:</span> <input size="90" type="text" name="Dir" /><br/>
<span style="padding-right:51px">application type:</span> <select name="type">
<option value="embedded" selected="selected">embedded</option>
<option value="popup">popup</option></select><br/>
<span style="padding-right:96px">filename:</span><input input size="90" type="text" name="fname" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:86px">upload file:</span><input size=89 type="file" name="file[]" /><br/>
<span style="padding-right:83px">file content:</span><textarea name="file_content" rows="10" cols="87"></textarea><br/>
<input style="margin-left:150px" type="reset" value="reset form" /><input style="margin-left:330px" type="submit" name="senden" value="create 3rd-party-app" />
</fieldset>
<fieldset><legend>Backup and Restore 3rd Party Applications</legend>
<fieldset><legend>Backup 3rd Party Applications</legend>
<input type="submit" name="backup" value="Create Backup" />
</fieldset>
<fieldset><legend>Restore 3rd Party Applications</legend>
<span style="padding-right:20px">Select date for restore</span><select name="time">
<?php
$path = $backup_dir.'/'.$backup_name;
$dh = opendir($path);
$arr = array();
while(($res=readdir($dh))!==false){
if($res != '.' && $res != '..' && is_dir($path.'/'.$res)){
$t = substr($res,strpos($res,'_')+1);
$arr[] =intval($t);
}
}
$arr = array_unique($arr);
rsort($arr);
foreach($arr as $wert){
if(!empty($wert) && $wert != 0){
echo '<option value="'.$wert.'">'.date('d.m.y H:i:s',$wert).'</option>';
}
}
?>
</select>
<input type="submit" name="restore" value="Restore" />
</fieldset>
</fieldset>
</form>
</body>
</html>
<?php
}
?>
-
Ik heb op http://www.synology-forum.nl/viewtopic.php?f=83&t=2182 (http://www.synology-forum.nl/viewtopic.php?f=83&t=2182) punt 8, 9 en 10 niet gedaan. Is dat misschien het probleem?
-
mail verstuurd.
punt 9 en 10 heb ik ook niet gedaan. Punt 8 wel.
Groet,
Grafcom
-
Na de update naar DSM2.1 moest ik uiteraard de 3rd party apps weer terugzetten.
Dat begon dus met 3rd Party Manager zodat de rest een :P van een cent was.
Nu wil ik eigenlijk 3rd Party Manager op volume 1 laten draaien omdat de map /usr/syno/synoman/phpsrc/ leeg wordt gemaakt.
De map /usr/syno/synoman/webman/3rdparty/ was nog wel compleet.
Nu heb ik de map "manager" vanuit /phpsrc naar /volume1/admin/ verplaatst.
Het bestand application.cfg uit de map /webman/3rdparty/manager aangepast naar:
text = 3rd party manager
description = 3rd party manager
icon_16 = images/icon16.png
icon_32 = images/icon32.png
type=embedded
path = /volume1/admin/manager/manager.php
Echter krijg ik nu de melding dat de pagina niet kan worden weergegeven :(
Wat zie ik over het hoofd?
Groet,
Grafcom
-
Hey Grafcom,
Kom ik je alweer tegen :D
Je krijgt de melding dat de pagina niet kan worden weergegeven... Hmm, heb je punt 7 van de handleiding nagekeken? (klopt de sys-apache nog?) en kijk gelijk ook even de andere punten na... :D
Oja, kan je een html bestand in dat pad wel laden?
Groet,
Wizjos
-
Hallo Wizjos,
punt 7 gedaan en de overige ook...... denk ik.... ( :? ) ga ik opnieuw nakijken.
Het html bestand ga ik testen.
Groet,
Grafcom
-
Hallo Wizjos,
alle punten nagelopen, lijkt allemaal te kloppen..... :)
In de php.ini staat echter:
register_globals = Off
i.p.v. On..... dit is toch niet noodzakelijk?
De html pagina werkte ook niet.
Overigens werken de andere 3rd Party apps in de map /usr/syno/synoman/phpsrc/ wel gewoon.
Groet,
Grafcom
Grafcom
-
Grafcom,
Even voor je gezocht:
http://www.synology-forum.de/showthread ... cumentroot (http://www.synology-forum.de/showthread.html?t=1514&highlight=documentroot)
Komt er op neer dat je een symlink een link moet leggen naar de map /volume1/admin/
Mount is ook evt. een optie.
Lees maar eens! Ik hoop dat je er daarmee uitkomt..
Groet,
Wizjos
-
Hallo Wizjos,
voor zover ik het meen :mrgreen: te begrijpen.....
Moet ik deze code uitvoeren?
$ mount --bind /volume1/admin/ /volume1/web/admin
Moet ik dan ook een map "admin" in de map "web" hebben staan?
Ik wil het wel proberen... :roll:
Hoe maak ik eventueel die "mount" weer ongedaan?
Groet,
Grafcom
-
Hallo Wizjos,
zou dit dan wel moeten werken zonder dat ik iets verander?
text = 3rd party manager
description = 3rd party manager
icon_16 = images/icon16.png
icon_32 = images/icon32.png
type=embedded
path = /volume1/[b]web[/b]/admin/manager/manager.php
Nou mooi niet. Of begrijp ik het niet? :shock:
Groet,
Grafcom
-
Hallo Wizjos,
nog eens aan het kijken/proberen geweest.
Wonderlijk dat dit wel werkt, maar dat is eigenlijk niet wat ik wil.
<?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;
} else {
include("/volume1/admin/manager/manager.php");
}
?>
Het bestand met deze code geplaatst in de map "/usr/syno/synoman/phpsrc/manager".
Het lijkt me dus meer een pad probleem dan dat ik geen toegang zou hebben naar "/volume1/adminweb/manager/manager.php" :roll:
Groet,
Grafcom
-
Grafcom,
Ik zie in het codevoorbeeld dat je het hebt over '/volume1/admin/manager/manager.php' en in de tekst over '/volume1/adminweb/manager/manager.php'.... Da's toch niet de oorzaak hoop ik :mrgreen:
Ik neus ook nog wel even verder...
Groet,
Wizjos
-
Grafcom,
Volgens mij is het gelukt!
Situatie:
- phpmyadmin in /volume1/adminweb/phpm
- symlink in /usr/syno/synoman/phpsrc/ met de naam x
- symlink wijst naar /volume1/adminweb
- application.cfg met als inhoud:
text = Test
description = test
type = popup
path = /phpsrc/x/phpm/index.php
En dit werkt bij mij...
Groet,
Wizjos
-
Hallo Wizjos,
ja dat admin en adminweb is verwarrend (kopieer steeds de tekst) maar in de scripts is dat gelijk.... :mrgreen:
Begrijp ik het nu goed dat ik dan toch in de map /usr/syno/synoman/phpsrc/iets moet plaatsen?
Als dat zo is schiet ik mijn doel voorbij omdat deze map leeg wordt gemaakt bij een firmware update :D
Mijn bedoeling was uiteraard om de 3rd Party Manager na een update meteen te kunnen gebruiken voor restore en dat ik dan niet eerst iets moet terug plaatsen in de map /usr/syno/synoman/phpsrc/
Ik hoor wel of ik het zo goed begrepen heb.
Groet,
Grafcom
-
Grafcom,
Ben er bang voor ja... Als het symlinkje idd. wordt weggegooid bij een upgrade (ik lees verschillende berichten over wel of niet alles weg na een upgrade...) heb je even niets meer... Maar, met het opnieuw maken er van heb je dan in een klap ook alles weer...
Wellicht dat je een mount zou kunnen aanleggen die wél in stand blijft...
Groet,
Wizjos
-
Hallo Wizjos,
tja, blijf toch naar een "gemakkelijke" oplossing zoeken......
Aangezien het hier blijkbaar om een "pad" probleem lijkt te gaan heb ik het volgende geprobeerd:
Bij de laatste firmware update bleek de map /usr/syno/synoman/webman/3rdparty/ wel compleet te blijven.
Dus wat ik gedaan heb is in deze map (er stond/staat trouwens ook de map "images") een nieuwe map gemaakt met als naam "program".
De CFG file werd dan:
text = 3rd party manager
description = 3rd party manager
icon_16 = images/icon16.png
icon_32 = images/icon32.png
type=embedded
path = program/uitvoerbestand.php
Daarin nu het uivoerbestand geplaatst..... Dit bleek in eerste instantie ook niet te werken - omdat (zag ik in de bron)
"address" : "mijn disk",
"description" : "3rd party manager",
"icon_16" : "/webman/3rdparty/manager/images/icon16.png",
"icon_32" : "/webman/3rdparty/manager/images/icon32.png",
"name" : "manager",
"path" : "/program/uitvoerbestand.php",
"port" : "5001",
"protocol" : "https",
"text" : "3rd party manager",
"type" : "embedded"
de volledige padnaam (zie bij images) voor de map "program" niet automatisch wordt aangemaakt.
Daarnaa de CFG file aangepast naar dit:
text = 3rd party manager
description = 3rd party manager
icon_16 = images/icon16.png
icon_32 = images/icon32.png
type=embedded
path = /webman/3rdparty/manager/program/uitvoerbestand.php
en... Dit werkt :D
Wanneer nu deze map toch niet wordt leeg gemaakt zou het na een upgrade gewoon moeten blijven werken.... :mrgreen:
Waarom eigenlijk dit niet standaard bij elkaar geplaatst?
Goed, ik hoor wel of je hier nog bedenkingen bij hebt. :roll:
Groet,
Grafcom
-
Hallo Wizjos,
het leek zo mooi :(
Echter bij het maken van een backup worden naast de mappen van de 3rd Party apps (in phpsrc) ook nog eens de gehele map "phpsrc" met daarin alle overige mappen (blog, photo, sql, web en nogmaals de mappen van de 3rd Party apps) weggeschreven.
Is het mogelijk om dit in de 3rd Party Manager aan te passen? :lol:
Groet,
Grafcom
-
Grafcom,
Wat er al niet kan... :mrgreen: Wat zou je willen?
Wizjos
-
Hallo Wizjos,
nou zoals in mijn vorige posts aangegeven, zou het handig zijn als de 3rd Party Manager niet zou worden verwijderd bij elke upgrade.
Omdat de map /usr/syno/synoman/webman/3rdparty blijkbaar niet wordt leeggemaakt zoals de map /usr/syno/synoman/phpsrc/, is het handiger het in die map te laten draaien.... En dat werkt ook heb ik ontdekt.
Er is alleen het probleem met de backup van de map /usr/syno/synoman/phpsrc/.
De 3rd Party Manager maakt keurig een backup van alles 3rd Party Apps uit die map maar ook nog eens een backup van de gehele "phpsrc" map inclusief nogmaals de mappen met de 3rd Party Apps....
Aangezien jij de 3rd Party Manager kent was mijn vraag is deze aan te passen zodat alleen de mappen van deze apps in de backup komen staan....
Kun je het nog volgen?
Groet,
Grafcom
-
De 3rd Party Manager maakt keurig een backup van alles 3rd Party Apps uit die map maar ook nog eens een backup van de gehele "phpsrc" map inclusief nogmaals de mappen met de 3rd Party Apps....
Aangezien jij de 3rd Party Manager kent was mijn vraag is deze aan te passen zodat alleen de mappen van deze apps in de backup komen staan....
Kun je het nog volgen?
Dit stukje even niet helemaal meer vrees ik (te lang weekend)... Je zou willen dat 'ie dus alleen 3rdparty backupt en niet phpsrc?
Wizjos
-
Hallo Wizjos,
hier ook een lang weekend..... zal je morgen proberen het duidelijker uit te leggen..... :mrgreen:
Groet,
Grafcom
-
Hallo Wizjos,
toch nog een poging om het helder te krijgen.
In de "oorspronkelijke" versie van 3rd Party Manager wordt er met deze app. een backup gemaakt van de 3rd Party Apps in de mappen:
/usr/syno/synoman/webman/3rdparty en /usr/syno/synoman/phpsrc/
In de map "phpsrc" staan nog meer mappen die dan niet worden meegenomen, prima zo daar is die app ook niet voor.
Wanneer ik 3rd Party Manager echter laat draaien vanuit de map "/webman/3rdparty" word er nog steeds uit de map "phpsrc" een backup gemaakt van alle mappen waarin 3rd Party apps staan, zoals het hoort....
Echter er wordt nu ook een map (in de phpsrc backup map) aangemaakt "phpsrc" met daarin alle overige mappen (blog, photo, sql en web) en nog een keer alle mappen met 3rd Party apps (dubbelop dus).
Bij het terugzetten zouden dus de mappen "blog, photo, sql en web" ook weer worden vervangen. Ik weet niet of dat slim is na een update.
Hmmm, vraag me af of ik nu duidelijker ben. :roll:
Groet,
Grafcom
-
kwartje gevallen... :mrgreen: ga eens neuzen wat ik er mee kan
Wizjos