Ultimate Backup Ultimate Backup

jugi

Benutzer
Mitglied seit
07. Apr 2011
Beiträge
1.853
Punkte für Reaktionen
0
Punkte
56
Du willst ja was lernen… ;)

Beispielhaft ein paar "Kleinigkeiten", die mir in der ub_start.php auffallen:



du schreibst:
PHP:
if (isset($_REQUEST['source'])) $source=$_REQUEST['source']; else $source=array();
besser wäre:
PHP:
$source = (array_key_exists($_POST, 'source') && is_array($_POST['source']) ? array_walk($_POST['source'], 'addslashes') : array();
  • Damit kannst du versehentlich einen (leeren) string auf die variable zuweisen, das ist zwar in PHP nicht unbedingt dramatisch (da php nicht typisiert ist), aber einfach schlechter Stil.
  • Das array_walk ist nur als Beispiel zu sehen :D Das würde ich wohl selber nicht so schreiben, da die Veränderung von globalen Variablen ($_*) generell eher Ungeil ist. Also lieber vorher in eigene variable schmeißen und dann damit arbeiten.
  • Inline conditions sind durchaus Geschmacksache, in so kurzem Code aber der langen Form IMHO immer vorzuziehen.



du schreibst:
PHP:
while (!feof($f)) {
	$buffer = fgets($f, 4096);
	$string .= $buffer;
}
besser wäre:
PHP:
file_get_contents($f)


du schreibst:
PHP:
function test_input($data) {
	$data = trim($data);
	$data = stripslashes($data);
	$data = htmlspecialchars($data);
	return $data;
}
besser wäre:
PHP:
function test_input($data) {
	 return htmlspecialchars(stripslashes(trim($data)));
}
  • generell bei funktionen immer "von unten" denken und versuchen möglichst wenig variablenzuweisungen zu machen. die sind nämlich teuer.
  • wer jetzt mit "aber unübersichtlich" kommt -> dann ist die Funktion zu lang ;)


du schreibst:
PHP:
shell_exec("sh script_start.sh test ".addslashes($_POST["selectvolumeExtern"])." ".addslashes($_POST["selectscriptExtern"])." ".addslashes($_POST["rspdryExtern"])." ".addslashes($_POST["rspdebugExtern"])." ".addslashes($_POST["rsprestoreExtern"])." ");
besser wäre:
PHP:
shell_exec(addslashes(sprintf('sh script_start.sh test %s %s %s %s %s', $_POST["selectvolumeExtern"], $_POST["selectscriptExtern"], $_POST["rspdryExtern"], $_POST["rspdebugExtern"], $_POST["rsprestoreExtern"]));
  • addslashes braucht es erst kurz vor der Übermittlung an shell_exec, alternativ könntest du auch direkt am Anfang der Datei einmal überall durchgehen (wie ich oben beispielhaft mache)
  • ich mag sprintf lieber als "".""."".""… - finde das einfach übersichtlicher :)
  • generell muss ich zugegeben, dass ich gefühlt seit PHP 4.x nicht mehr mit plain-php gearbeitet habe, daher kann es gut sein, dass addslashes() da mittlerweile veraltet ist, kurz googlen führt mich zu filter_var, was wohl neues/besser ist? Es gibt aber auch viele libraries, die sich um die validierung von daten kümmern, tendenziell ist es besser davon eine zu nutzen.



Und du schreibst php & html in einer Datei -> gaaaanz schlechter Stil. Schau dir mal die Templateengines genauer an, damit du dir das gar nicht erst (weiter) angewöhnst. Smarty & Twig sind gut für den Anfang.




gibt bestimmt noch mehr, aber ich hab grad keine Zeit/Lust mir jetzt deinen kompletten Spaghetticode reinzuziehen :p
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
Hey jugi!

Zuallererst muss ich sagen - ... WOW… - und danke für deine konstruktive Kritik, sowie die vielen Tipps und Tricks zu php und was ich bessser bzw. anders machen sollte. Das muss ich erstmal alles sacken lassen, denn…

Du willst ja was lernen… ;)

… na ja, es ist halt die Frage, wieviel ich noch lernen soll/muß!

Denn ich werde wohl nie an den Punkt kommen, einem Profi wie dir das Wasser reichen zu können und ehrlich gesagt ist das auch überhaupt nicht mein Ziel. Eigentlich war es sogar nie mein Ziel gewesen ein SPK wie dieses zu schreiben. Dass ich es dennoch versucht (und augenscheinlich auch geschafft) habe (wie auch immer), ist wohl eher der Tatsache geschuldet, das ich mich solchen Aufgaben und Herausforderungen sehr gerne stelle um zu schauen, wie weit ich komme.

Doch scheinbar endet hier meine Reise in die Welt der SPK-Entwicklung bzw. in der Erforschung einer schlüssigen php-Programmierung. Ich habe nämlich weder die Zeit, noch die Geduld und schon gar nicht den Willen aus mir in diesen Dingen einen Profi zu machen um dieses Projekt weiter voran zu treiben. Und für mich ist das hier nichts anderes… ein Projekt… welches ich allein aus Spaß an der Freud entwickelt habe. Nicht mehr und nicht weniger.

Vielleicht war es ein Fehler, dass ich mich soweit aus dem Fenster gelehnt habe und PsychoHH sollte sein Script besser wieder auf die Konsole portieren, wo es hingehört. Daher bleiben mir jetzt nur zwei Möglichkeiten. Entweder ich ziehe hier jetzt einen Strich drunter und ich beende meine Reise, oder ich versuche einfach im Rahmen meiner Möglichkeiten dieses SPK fortzuführen. Denn bekanntlich führen viele Wege nach Rom und für meine Begriffe erfüllt das SPK durchaus erstmal alle Funktionen die wir uns, und sich einige User hier gewünscht haben.

Es gibt natürlich auch noch eine dritte Möglichkeit, das ab hier jemand anderes die Programmierung dieses SPK übernimmt, der es besser Versteht, denn...

...gibt bestimmt noch mehr, aber ich hab grad keine Zeit/Lust mir jetzt deinen kompletten Spaghetticode reinzuziehen :p

Tommes
 

jugi

Benutzer
Mitglied seit
07. Apr 2011
Beiträge
1.853
Punkte für Reaktionen
0
Punkte
56
Ach komm, du hast da jetzt so viel Zeit reingesteckt und willst jetzt einfach aufgeben? Das hättest du dir vielleicht vorher überlegen sollen :)

Klar bist du kein Profi, aber das musst du auch gar nicht sein, um ein gutes Produkt abliefern zu können. Es gibt außerdem auch genug Profis, die von gutem Code keine Ahnung haben (und auch mein wissen ist alles andere als vollkommen). Ich wollte dir lediglich ein paar allgemeine Programmierrichtlinien sagen, da ich weiß, wie schwer es ist, sich einmal (falsch) angewöhntes wieder abzugewöhnen. Wenn du dich mit dem Thema nicht weiter beschäftigen willst ist das auch okay, dein produkt funktioniert ja anscheinend such so.

Und bis auf die addslashes geschichte (das war sicherheitsrelevant) ist das auch alles nicht extrem kritisch, sondern hauptsächlich dafür, dass du in ein paar Wochen deinen eigenen Code noch verstehst :)

Ob jemand anderes (ich) das übernehmen kann? Ich überleg das schon, seitdem ihr beiden das mit der versionierung ausgeschlsgen habt, allerdings hab ich aktuell keine zeit und bin mir auch nicht sicher, ob ich mich an die synology-paket-schnittstelle wagen will (die scheint ja eher chaos zu sein..)
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Das hat nichts mit aufgeben zutun.


Es war ja zum Anfang nie ein SPK geplant, da war der Grundgedanke eine einfache dateibasierte Datensicherung. Das wurde auch schnell gelöst.
Dann kam aber das einhängen von verschlüsselten Ordner per Keyfile hinzu usw. es sind sehr viele Features hinzugekommen und auch wenn nicht jeder den Code versteht, sei es in der .sh .html oder .php, dann ist es halt so. Wichtiger ist es, dass es läuft und keine Probleme gibt und wenn es welche gab wurden diese ja auch schnellstmöglich gelöst.

Und ganz ehrlich wir sind viel weitergekommen als wir uns das jemals vorgestellt haben.



Ich habe mit Tommes unfassbar viele eMails geschrieben, weil es auch einfach viel zu Überlegen/Besprechen und auch Probleme gab, die wir gemeinsam gelöst haben.


Fakt ist aber auch, dass wir nun etwas hinbekommen haben, was es so noch nicht gab und es funktioniert auch bestens.
Ich will gar nicht, dass alles Möglich ist oder alles Unterstützt wird usw.


Da könnte Synology lieber mal ein bisschen nachbessern und Time Backup erweitern oder mal das automatisch entschlüsseln einbauen.


Wir haben echt unglaublich viele Stunden in das Projekt gesteckt, ach Monate waren es und wir haben keinen Cent dafür bekommen.
Der Lohn ist der Dank der User und die Nutzung für eigene Zwecke.




Abgeben? Ach quatsch, läuft doch alles und ob man jetzt einen Teil so oder so schreibt dürfte solange egal sein,
solange es keine Probleme gibt oder die Last zu groß wird.


Das SPK bietet meine Meinung nach alles was man braucht und sogar noch mehr als am Anfang geplant war.
Und Tommes hat auch hier einen klasse Job gemacht, es wurde so gut wie alles selbst geschrieben und es ist kein c&p von zig Seiten.


Eine Versionierung haben wir nie komplett ausgeschlossen und da dies auch nicht unmöglich ist, kommt dies eventuell in einem Update mal.


Und ja Zeit ist einfach ein Faktor den mal selten für sowas hat, jedenfalls wenn man beruflich damit nichts zutun hat.


Natürlich warten wir auch immer auf Feedback, ob alles klappt, es Probleme gibt oder sonst was :)
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.088
Punkte für Reaktionen
1.072
Punkte
314
Ach komm, du hast da jetzt so viel Zeit reingesteckt und willst jetzt einfach aufgeben?

Aufgeben werde ich sicherlich nicht. Ich kann nur deine Anforderungen an ein "gutes Produkt" nicht erfüllen. Ich hab ja geschrieben...

...oder ich versuche einfach im Rahmen meiner Möglichkeiten dieses SPK fortzuführen. Denn bekanntlich führen viele Wege nach Rom...

... also werde ich trotz, das du meinen Programmierkünsten nur ein müdes Lächeln abringen kannst, weitermachen. Natürlich freue und bedanke ich mich auch weiterhin für jeden Tipp und jeden gut gemeinten Ratschlag von dir, da ich schon verstehe was du mir damit sagen möchtest. Ich werde es nur nicht umsetzen können, da mir einfach das (Background-)Wissen fehlt und ich werde es wohl auch nicht mehr lernen ...wollen, ....können, ...müssen.

Nichts desto trotz mach ich jetzt erstmal ein paar Tage eine kreative Pause, damit ich mal wieder auf andere Gedanken komme. Wie PsychoHH je eben schon andeutete drehten sich die letzen Monate nur um dieses Script bzw. dieses SPK. Wenn ich dann in ein ein paar Wochen meine Programierung noch verstehe, mache ich einfach mal weiter... wohin die Reise da auch gehen mag.

Tommes
 

rednag

Benutzer
Mitglied seit
08. Nov 2013
Beiträge
3.954
Punkte für Reaktionen
11
Punkte
104
So, ich bin jetzt mal dazu gekommen mir Euer Ultimate Backup anzusehen.
Erstmal vielen Dank für die großartige Arbeit. Übersichtlich, gute Dokumentation in dem SPK als auch dem Script (soweit ich das als Laie beurteilen kann).
Viele Funktionen, Stabil.

Leider gelang es mir von mittlerweile 10 Versuchen nur einen Durchlauf "Dry Run" erfolgreich durchzuführen.
Sonst kommt immer die DSM - Meldung "Internes Script konnte nicht ausgeführt werden". Warum weiß ich selbst nicht.
Das Script selbst ist erfolgreich angelegt worden. Auch mehrere unterschiedliche Ordner zum Backup als auch Ziel habe ich bereits ausgewählt.

Kleines Feedback - Es wäre schön wenn man z. B. mehrere Scripte im Einsatz hat, diese auch in Ultimate Backup bearbeiten zu können. So bleibt nur der Editor.
Auch bleibt das zuletzt angelegte Script nich in der Oberfläsche bestehen. Ich habe in meinen Versuchen daher sämtliche Angaben wieder von vorne eintragen müssen.

Totzdem ziehe ich meinen Hut vor dieser Leistung der Programmierung.
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Leider gelang es mir von mittlerweile 10 Versuchen nur einen Durchlauf "Dry Run" erfolgreich durchzuführen.
Sonst kommt immer die DSM - Meldung "Internes Script konnte nicht ausgeführt werden". Warum weiß ich selbst nicht.

Kleines Feedback - Es wäre schön wenn man z. B. mehrere Scripte im Einsatz hat, diese auch in Ultimate Backup bearbeiten zu können. So bleibt nur der Editor.
Auch bleibt das zuletzt angelegte Script nich in der Oberfläsche bestehen. Ich habe in meinen Versuchen daher sämtliche Angaben wieder von vorne eintragen müssen.


Dann hast du sehr wahrscheinlich den Pfad/Scriptnamen falsch angegeben.
Also Pfad usw. und dann Scriptname z.B. rsync_aufgabeeins.sh. Dann musst du auch folgendes eingeben: rsync_aufgabeeins.sh
Schau dir dort nochmal das Beispiel an, steht auch direkt im SPK wie du es angeben musst.

Alternativ könntest du es auch über den Aufgabenplaner ausführen.
Auch dort wäre es inkl. dry usw. möglich.


Ja das ganze wäre natürlich sehr gut, Scripte laden und speichern zu können.
Allerdings ist das wieder eine Horroraufgabe dies alles zu schreiben.

Und auch bin ich der Meinung, dass man sich alles einmal einrichtet und es ja dann auch dabei belässt.
Natürlich kommt es auch darauf an wie oft man das Script verwendet. Bei mir sind es 3 verschiedene Konfigurationen.

1x DS zu DS
1x DS zu extern nach Zeitplan
1x DS zu extern durch autorun

Das ganze dauerte einmalig aber keine 10 Minuten zum einrichten.

Wenn ich kurz eine Einstellung ändern will, mache ich dies entweder per Text-Editor oder kurz in vi
 

rednag

Benutzer
Mitglied seit
08. Nov 2013
Beiträge
3.954
Punkte für Reaktionen
11
Punkte
104
Alternativ könntest du es auch über den Aufgabenplaner ausführen.
Auch dort wäre es inkl. dry usw. möglich.

Auf die Idee bin ich auch schon gekommen nachdem ich an mir selbst gezweifelt hatte. Das Script wird laut Aufgabenplaner aber nicht gefunden.... Es ist aber angelegt worden und liegt im angegeben Verzeichnis. Auch der Name stimmt überein.
Bisher -trotz mittlerweile unzähligen Versuchen- hat es nur einmalig wie oben angedeutet funktioniert. Das ganze schmälert jetzt natürlich meine positive Denkweise an das selbstlose Projekt nicht im Geringsten, aber der typische DAU :p wäre froh wenn es läuft.
Das mit dem Anpassen ist für Dich natürlich nur eine Sache von 10min. Du steckst ja da tief mit drin und hast eine andere Perspektive auf die Sache.
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.715
Punkte für Reaktionen
1.022
Punkte
754
Ist das Skript für den im Aufgabenplaner angegebenen User ausführbar?
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Wenn er es als root nutz, sollte das auch so gehen.

Irgendwas muss da dann mit dem Pfad nicht stimmen.

Such das einfach mal per find / - name "rsync*.sh"

Und Poste hier mal den Pfad den du im Aufgabenplaner eingetragen hast. Dann einmal ein Screenshot mit den Eingaben im spk und ein Screenshot von den Eigenschaften des Script.

Das Problem hatte ich bis jetzt auch noch nicht :eek:
 

rednag

Benutzer
Mitglied seit
08. Nov 2013
Beiträge
3.954
Punkte für Reaktionen
11
Punkte
104
Aslo, ich habe jetzt nochmal mehrere Anläufe gemacht. Bisher scheint das Script korrekt angelegt und ausgeführt zu werden.
Trotzdem werden einige Quellen anscheinend nicht gefunden obwohl sie in der DS (lokal) angelegt sind.
Hier habe ich noch kein Muster entdecken können. Die Ordner welche nicht gefunden werden variieren.
Hier exemplarisch /Shared und /Musik. Beides gemeinsame Ordner der Maschine.

3.PNG

2.PNG

1.PNG
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Das ist ja strange..

Sicher, dass es als utf8 gespeichert ist? Bitte einmal mit dem Texteditor testen.

Wenn es nicht klappt, müssten wir das evtl mal per Teamviewer gemeinsam checken
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Ähm, evtl. irgendetwas mit Gross-/Kleinschreibung?
 

rednag

Benutzer
Mitglied seit
08. Nov 2013
Beiträge
3.954
Punkte für Reaktionen
11
Punkte
104
Das ist ja strange.. Sicher, dass es als utf8 gespeichert ist? Bitte einmal mit dem Texteditor testen.

Ok, wie mache ich das denn am besten?

Ähm, evtl. irgendetwas mit Gross-/Kleinschreibung?

Die Namen sind in dem Script identisch mit den gemeinsamen Ordnern.

Ich habe etliche Konstallationen jetzt durch. Ein Muster ist in meinen Augen absolut nicht erkennbar. Vor 4 Versuchen ist /homes nicht mehr gefunden worden...:confused:
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Ich finde das total komisch, denn eigentlich sollte sowas nicht passieren.
Und bei mir ist sowas auch noch nicht vorgekommen, sei es DS415+ oder DS212j, ob DSM 6 oder DSM 5.2


Script öffnen mit Text-Editor. Einfach aus dem Paketzentrum installieren.
Dann sollte unten folgendes stehen: Codierung: Unicode (UTF-8)

Wenn nicht.. Datei -> Codierung -> Unicode (UTF-8)
Evtl musst du die Rechte vorher ändern
 

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
Könnte das Problem durch einen führenden "/" verursacht sein? /homes ist nicht homes ist nicht /volume1/homes
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Nein.

Ist unabhängig.

Es funktionieren sonst alle angaben.
/homes
homes
/volume1/homes



Ich schaue mir das gleich nochmal kurz an
 

rednag

Benutzer
Mitglied seit
08. Nov 2013
Beiträge
3.954
Punkte für Reaktionen
11
Punkte
104
Das Script ist bereits auf UTF8

4.PNG

Ich habe mehrere Pfade durchprobiert. Mal wird das eine nicht gefunden, dann das andere wieder. Wie beschrieben, erkenne ich hier keinerlei Muster
Ordner welche im ersten Backup (Dry Run) funktionieren werden bei einem anderen script nicht mehr gefunden. Auch werden die Scripte nicht nur gewechselt, ich lösche das alte und lege ein neues an. Langsam gehen mir die Pfade und wenn ich ehrlich bin ein wenig die Muße aus. Auch weil ich anscheinend der einzige User sit bei dem sowas autritt. Ich habe alle mir erdenklichen Szenarien durchgespielt.
 

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Ok Fehler wohl gefunden.

Tatsächlich gibt es wohl beim "erstellen" des Scriptes einen Fehler, wenn mehr als eine Quelle angegeben wird.
Die Codierung stimmt, keine Ahnung was da schief läuft. Muss mir mal den php Part morgen anschauen bzw. das Zusammensetzen des Scriptes.

Was du probieren kannst ist folgendes:

Öffne das Script und schreib in einer Leerzeile eine # und speicher es.
z.B. unter EMAIL

#!/bin/sh
# E-Mail Adresse sowie Benachrichtigungsform
#-------------------------------------------------------------------------
EMAIL=""
#

Danach kannst du es auch nochmal öffnen, die # löschen und speichern.
 

rednag

Benutzer
Mitglied seit
08. Nov 2013
Beiträge
3.954
Punkte für Reaktionen
11
Punkte
104
Also, wenn ich es richtig gemacht habe bewirkt dies leider keine Besserung.

s2.jpg

s1.jpg

Edit:

Aber es ist zumindest schonmal beruhigend, daß nicht "immer nur" der blöde User schuld ist.
Typisch DAU halt...:p
 
Zuletzt bearbeitet:


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat