Plugin System schreiben PHP

  • Hallo,

    Ich hab mal eine Frage und zwar kennt ihr ja alle Pluginsysteme wie sie in modernen Forensystemen integriert sind.
    Man drückt auf den Knopf und das Plugin wird automatisch installiert.

    Dazu habe ich eine Frage:
    Und zwar ist das wirklich nur "Suchen und Ersetzen" von Codestellen + SQL ausführen?

    Warum kommt es dann nie zu problemen das z.b. eine Suchstelle schon verändert wurde und dann nicht gefunden wird ODER das das Forum danach nicht mehr funktioniert (nach der installation eines solchen Addons)?
    Sind da vllt. noch irgendwelche weiterführenden Sicherheitsmaßnahmen integriert?

    Ich würde gerne sowas für das alte WBB machen.

    was haltet ihr von folgendem:

    1.suchen ob alle PHP Codestellen so vorhanden sind wie sie sollen
    2.Backup von den zu ändernden PHP Datein machen vllt. auch SQL Backup
    3.PHP änderungen durchführen
    4.SQL ausführen
    5.Neue Datein hochladen
    6.ggf. falls gewünscht änderungen rückgängig machen (PHP reverse ändern + sql)

    So ungefähr muss es doch auch bei anderen Plugin Systemen laufen oder?
    Würdet ihr ggf. das Backup sogar sparen? (Ist ja eigentlich die Aufgabe des Users)


  • Dazu habe ich eine Frage:
    Und zwar ist das wirklich nur "Suchen und Ersetzen" von Codestellen + SQL ausführen?

    Nein, überhaupt nicht. Richtige Plugin-Systeme in Webforen funktionieren vollkommen ohne Modifikation der Codebasis. MyBB hat dafür z. B. "Hooks", die Funktionen definieren, welche nach ihrer Registrierung an bestimmten Stellen im MyBB-Code über Aufrufe dieser Art erlauben, Plugin-Code auszuführen:

    PHP
    $plugins->run_hooks("parse_message", $message);

    phpBB 3 geht hingegen einen anderen Weg und baut vollständig auf dem Symfony-MVC-Framework auf.

  • Ich verstehe noch nicht wirklich wie diese Hooks funktionieren.

    Ob ich nun in der index.php nen Hook aufruf reinschreibe oder direkt den Code ist doch egal?
    Außerdem wie soll ich den einen SQL Query anpassen mit diesen Hooks?

    Was genau ist an meiner Version schlechter als an diesen Hooks?



    Nehmen wir mal an wir haben hier die index.php

    PHP
    <?php
    $wasgehtab = $db->query("SELECT was, geht, ab FROM bb".$n."_dasgehtab WHERE username = '$wbbuserdata[username]'");
    $wasgehtab_was = $wasgehtab[was];
    $wasgehtab_geht = $wasgehtab[geht];
    $wasgehtab_ab = $wasgehtab[ab];
    echo "Hello World $wasgehtab_was $wasgehtab_geht $wasgehtab_ab";
    ?>

    Nun möchte ich das so modifizieren:

    PHP
    <?php
    $wasgehtab = $db->query("SELECT was, geht, ab, gender FROM bb".$n."_dasgehtab WHERE username = '$wbbuserdata[username]'");
    $wasgehtab_was = $wasgehtab[was];
    $wasgehtab_geht = $wasgehtab[geht];
    $wasgehtab_ab = $wasgehtab[ab];
    $gender = $wasgehtab[gender];
    $plugin = "$gender bla bla bla";
    echo "Hello World $wasgehtab_was $wasgehtab_geht $wasgehtab_ab $plugin";
    ?>

    Wie soll man sowas den mit nem Hook machen?

    Einmal editiert, zuletzt von Michael_ (14. November 2017 um 13:38)

  • Der Vorteil ist, dass du nicht am Originalcode rumfuddeln musst, sondern dein Plugin separat geladen wird. Somit können mehrere Plugins separat konfliktfrei existieren. Am Original rumzufrickeln ist SOWAS von Bad Practice...

  • Warum minimiert das das konfliktrisiko?
    Ob der Code da steht oder aufgerufen wird ist doch im prinzip das selbe?

    Letzten endes steht da ja der selbe Code.

    Außerdem wäre noch interessant wie ich z.b. nen mysql query ändern kann mit nem Hook.

    Ich mein insofern das mir jemand noch etwas erklärt vllt. mach ich das ja mit hooks. :)



    Mein letzter Beitrag zeigt die "Schwierigkeit" ja recht genau.



    Plugins sind ja nicht immer eigenständige Sachen sondern greifen teilweise ja in vorhandene features ein.



    Achso das man nen zweiten Query machen könnte in dem Hook ist mir klar aber ich glaub das ist ja nicht DIE Lösung das Forum zu verlangsamen.

    Einmal editiert, zuletzt von Michael_ (14. November 2017 um 14:01)


  • Warum minimiert das das konfliktrisiko?
    Ob der Code da steht oder aufgerufen wird ist doch im prinzip das selbe?

    Du fuddelst am Basiscode rum. Basiscode, auf den sich andere Plugins erlassen. Die bekommen nich tmehr die gewohnte Basis und laufen nicht mehr richtig. Und darum lagert man seine Plugins grundsätzlich separat aus, um sowas zu vermeiden.

  • Kann mir mal jemand helfen, das hier zeigt alle Unterordner an eines Verzeichnisses:

    Code
    $handle = @opendir("pluginalike/plugins");
    while ($file = @readdir ($handle)){
    		if (eregi("^\.{1,2}$",$file)){
    		continue;
    		}
    		printf ("% ".$pos."s %s\n", "", $file);
    	 }
    	 @closedir($handle);

    kann mir jemand helfen das ich statt zu printen den namen in ner Variable speichern kann.
    bekomm das leider nicht hin -.-

  • Funktioniert btw nun



    Mal ne Frage würdet ihr noch vor dem modifizierten checken ob die suchstellen alle vorhanden sind?
    Kann mir jemand ggf. eine funktion sagen wie ich in einer php datei nach etwas suchen kann und wenn es gefunden wird TRUE und wenn nicht FALSE oder 1 und 0 zurückgibt?

    ggf. würde ich das noch mit einbinden und eben dann nicht installieren wenn die Suchstellen nicht gefunden werden.
    Oder meint ihr kann man das ganz weglassen?

    Mein System arbeitet mit Hooks. :)

    Einmal editiert, zuletzt von Michael_ (14. November 2017 um 18:40)


  • Ich verstehe noch nicht wirklich wie diese Hooks funktionieren.

    Ob ich nun in der index.php nen Hook aufruf reinschreibe oder direkt den Code ist doch egal?
    Außerdem wie soll ich den einen SQL Query anpassen mit diesen Hooks?


    die Idee bei Hooks ist, dass Plugins sich dafür registrieren.
    damit weiß das Framework gar nicht, welches Plugin im Hook aufgerufen wird, ob überhaupt irgendeins, oder ob vielleicht sogar mehrere.

    viele hooks sind nicht nur so "ach übrigens, hier wurde gerade ein post erzeugt", sondern eher sowas wie "hier wurde gerade ein post erzeugt, ich übergebe dir das objekt des erzeugten posts und du gibst mir wieder ein postobjekt zurück (entweder das selbe, oder modifiziert)". damit können die plugins mit ihren hooks auch wieder daten zurückfließen lassen.

    du hast natürlich insofern recht, als dass immer die gefahr besteht, dass plugins die voneinander nichts wissen sachen inkonsistent machen. so ganz ausschließen kann man das nicht. man kann es nur versuchen zu minimieren indem man als plugin-autor die seiteneffekte so gering wie möglich hält. das ist aber durchaus ein konflikt, denn man baut das plugin ja gerade dafür dass es was tut.

  • Checkt mal den Dateianhang.

    Kann mir jemand vllt. ne funktion schreiben die checkt ob eine php codestelle existiert?
    Weiß noch nicht so recht wie ich das machen soll aber würde gerne auf nummer sicher gehen und das einbauen.

    Ansonsten denke ich werde ich morgen im laufe des Tages mein "Pluginalike" Plugin System fertig haben.



    Achso das wird ein kostenloses Addon :)

  • Nein ich mach Hooks!
    Aber ich kann nicht ausschließen das verwender dieses Hacks dann auch andere Hacks manuell einbauen die es nicht als plugin gibt und somit den originalen Code ändern werden.

    Damit es dann nicht zu problemen kommt geh ich auf nummer sicher und schaue ob die Codestellen existieren die geändert werden durch die Plugins.
    Wenn nicht gibt es nen Error und nichts wird modifiziert.


  • Aber ich kann nicht ausschließen das verwender dieses Hacks dann auch andere Hacks manuell einbauen die es nicht als plugin gibt und somit den originalen Code ändern werden.


    warum hackst du es überhaupt statt es richtig zu bauen? wenn du was für WBB machen willst hat das doch schon nen plugin-mechanismus mit dabei, oder nich?

  • bzw. es wird nichts geändert durch die Plugins aber

    ich suche z.b. nach
    $filename = "index.php";

    und füge dann darunter den code zum laden des hooks ein.

    Wenn nun aber die codestelle $filename = "index.php"; nicht mehr existiert oder geändert wurde ginge das ja nicht daher muss ich sicher sein das sie existiert.



    Die alten WBB Versionen haben keinen Plugin Installer, das gibt es erst ab dem WBB3.

    Einmal editiert, zuletzt von Michael_ (14. November 2017 um 20:11)

  • Beste Forumsoftware ever made lasse mir grade ein full responsive template machen.
    PHP 7 und Mysql 5.7 hab ich es schon drauf angepasst.

    Nun noch das Plugin System.

    PS:

    Kennt ihr ein Shopsystem das Downloadlinks supportet als Produktauslieferung sowie Paypal und auch gratis Downloads.
    Also das man Produkte direkt runterladen kann ohne sie zu kaufen bzw. ohne zu zahlen?
    Die Links die bezahlt werden sollten nach der Zahlung per Paypal direkt freigeschaltet werden.

    bräuchte nen neues Shop CMS.

    Einmal editiert, zuletzt von Michael_ (14. November 2017 um 21:28)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!