Neuigkeiten:

moziloCMS verwendet Cookies. Wenn Sie auf unserer Seite weitersurfen, stimmen Sie der Cookie-Nutzung zu Datenschutzerklärung
moziloCMS Layouts
moziloCMS Plugins

Hauptmenü

Plugindaten wo speichern?

Begonnen von HPdesigner, 13. Februar 2014, 15:40:17

« vorheriges - nächstes »

HPdesigner

Hey in die Runde,

mich würde mal eure Meinung zu ner allgemeinen Frage bzgl. Pluginentwicklung interessieren: Was ist denn der (vorgesehene?) beste Weg, wie ein Plugin Daten ablegt? In einem .config.php file? Bringt das CMS Funktionen mit, mit der Plugins diese Daten schreiben und lesen können? Hatte ich jetzt in der Doku nichts zu gefunden...

lg, HPdesigner
Check my website devmount.de
and find me on Twitter, Medium, GitHub, StackOverflow, Codepen and Slack

blacknight

Vom CMS gibt es da glaub ich keine Funktionen für oder ich hab sie nicht gefunden. Wenn ich Daten speichere leg ich meist einen data Ordner im Plug-in an und speichere die dann in conf.php Dateien den Inhalt.
Beim Speichern ab ich mich von der Properties Class inspirieren lassen. Also in etwa:
$fp= @fopen($file, "r+"));
fwrite($fp, "<?php die(); ?>\n".serialize($data));

lesen dann über:
$data = file_get_contents($filename);
$data = trim(str_replace("<?php die(); ?>","",$data));
return unserialize($data);

Ist eigentlich recht Simpel. Wenn man es genau nimmt sollte die Datei noch mit einem Lock geöffnet werden, damit keine zwischendurch die Daten verändert.

HPdesigner

Super danke dir. So in der Art hatte ich das sonst auch gemacht, aber hätte ja sein können, dass es direkt eine Vorgabe gibt.

lg, HPdesigner
Check my website devmount.de
and find me on Twitter, Medium, GitHub, StackOverflow, Codepen and Slack

stefanbe

Für sowas gibts die Properties.php

lg

HPdesigner

Ok dh. wenn ich einen download counter bauen will, dann kann ich per
property->set($filename,$count)
einfach pro Datei eine Anzahl speichern?

Dann wäre meine Frage: Wo genau werden diese properties dann gespeichert? In einem config file im cms oder im plugin ordner?
Angenommen man würde das Plugin umziehen wollen - wie könnte man die Werte dann übertragen?

Danke dir schonmal, stefanbe! Ich dachte mir, dass genau dafür die properties da sind ;)

lg, HPdesigner
Check my website devmount.de
and find me on Twitter, Medium, GitHub, StackOverflow, Codepen and Slack

stefanbe

Öhm sorry war nicht so ersichtlich das du aus dem Frontent heruaus Speichen möchtest
das geht mit der Properties.php nicht auser man ist im Admin.

Fürn Counter brauchste auch was Specielles mit nem Lock Mechanismuss der von PHP reicht da nicht.

lg

HPdesigner

Ok, aber könnte ich nicht mit z.B.
$this->settings->set("kategorie:beispiel.zip", $count);
für jede Datei eine Anzahl setzen, in dem der anzuklickende link auf eine php Datei (oder die index.php) im Plugin weist, welche dann obige conf setzt. Oder geht das eben von dem dir genannten Grund (nicht im Admin eingeloggt) nicht?

lg, HPDesigner
Check my website devmount.de
and find me on Twitter, Medium, GitHub, StackOverflow, Codepen and Slack

stefanbe

$this->settings ist die Class Properties du kanst da $this->settings->set() nutzen das wird dann aber nur im Array gespeichert und nicht in die conf geschrieben.

Aber wie schon geschrieben ein Counter braucht einen Speziellen Dateilock den auch die Properties nicht hat.

Du must Sicherstellen das bevor ein Counter aus der Datei ausgelesen wird die Datei gesperrt wird und solange gesperrt bleibt bis der Neue Counter Geschrieben worden ist.

lg


HPdesigner

Danke für die Hinweise! Ich fänds super, wenn diese locksave und lockload functions im CMS für die Klasse Plugins zur verfügung ständen ;)
Warum heißen deine Funktionen lookFile() und unlookFile() :D

lg, HPdesigner
Check my website devmount.de
and find me on Twitter, Medium, GitHub, StackOverflow, Codepen and Slack

blacknight

#10
Zitat von: HPdesigner am 14. Februar 2014, 11:10:28
Warum heißen deine Funktionen lookFile() und unlookFile() :D

Weil ich das Konzept mal von irgendwo her kopiert hab und nicht weiter drüber nachgedacht habe  :D . Sollte ich bei Gelegenheit vielleicht mal umbenennen ...

So eine allgemeine Funktion wäre im CMS wahrscheinlich wirklich gut aufgehoben, kommt ja doch öfter vor, dass man mal Daten speichern will.

HPdesigner

@stefanbe:
Zitat von: stefanbe am 13. Februar 2014, 22:04:58... brauchste auch was Specielles mit nem Lock Mechanismuss der von PHP reicht da nicht
Du meinst die php funktion flock() reicht nicht? Was wäre eine Alternative?

@blacknight:
ah ok ;)
Check my website devmount.de
and find me on Twitter, Medium, GitHub, StackOverflow, Codepen and Slack

hausl78

#12
Ich vermute mal stefanbe meint auch bzgl. des in der Doku erwähnten Problem..

ZitatWarnung
Bei einigen Betriebssystemen ist flock() auf dem Prozesslevel implementiert. Wenn Sie ein multithreaded Server API wie ISAPI benutzen können Sie sich nicht auf flock() verlassen, um Dateien vor anderen PHP-Skripten zu schützen, welche in parallelen Threads der gleichen Server-Instanz laufen!
http://www.php.net/manual/de/function.flock.php

Ich glaub da wird es aber so nie eine "echte" Lösung geben, denn die sogenannten Racing Conditions verschieben sich dann gegebenfalls auf/an eine andere Stelle des Codes zB die Erstellung eines Lockfiles etc... Da kann eine Datei einer DB halt dann doch in letzter Konsequenz nicht Paroli bieten.

Bei Nachrage in einem PHP Forum bekam ich die Info das diese Variante so selten und unüblich ist das man solche wohl "links liegen lassen" kann.

Ich hab das bei meinem "SimpleCounter" damals so versucht hinzubekommen, das ich etwaig den einen oder andern Zähler verliere, aber wichitg das der Zähler nicht auf Grund von Kollisionen "zurückgesetzt" wurde. Aber sauber in Methoden ausprogrammiert hab ich das glaub ich "damals" auch nicht wirklich.

Hier gibt es auch eine Klasse die mit einem Lock Mechanismus arbeitet. Ev. ist die ja eine HIlfe, ein Ansatz.
http://jspit.de/?page=cache

LG
Jürgen

HPdesigner

Danke für deine ausführliche Antwort, Jürgen. Letztendlich kommt es natürlich drauf an, wie und wo das flock() wirklich implementiert ist, aber ich denke man macht nichts falsch, wenn man es nutzt ;)

Hab mich an der database klasse von blacknight orientiert, das funktioniert zumindest erstmal ohne Probleme.
Vielen Dank euch! Grade für ein flatfile CMS sicherlich eine wichtige Thematik.

lg, HPdesigner

Check my website devmount.de
and find me on Twitter, Medium, GitHub, StackOverflow, Codepen and Slack