Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Funktionsaufruf aus einer externen PHP Datei

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Funktionsaufruf aus einer externen PHP Datei

    Hi,
    Hatte gerade eine Diskussion, wie ich eine PHP Funktion aus einer externen Datei einbinde.
    Das Problem dabei ist, die Datei,
    die diese Funktion enthält führt andere Funktionsaufrufe durch
    und beim includen führt dies zu einer Endlosschleife mit Timeout Abbruch.

    Jetzt stellt sich mir die Frage, wie ich aus einer Datei nur die Funktion einbinde und nicht die Aufrufe, welche mit in der Datei stehen.

    Klar kann man die Datei umschreiben.
    Mir geht es einfach darum ob dies
    auch möglich ist?

  • #2
    Dateien, die Klassen und Funktionen bereithalten, sollten diese nicht auch aufrufen. Eben aus genau dem von dir angesprochenen Problem

    Kannst du die Funktion nicht einfach auch in deine Datei einbauen, bzw diese auslagern???


    IMHO etwas dirty, aber mir fällt spontan folgendes ein:
    PHP-Code:
    $deineDatei file_get_contents(functions.php');
    preg_match('
    ..', $functionToCall);
    eval($functionToCall); 

    Kommentar


    • #3
      Hi

      Danke!
      Die Idee war mir auch gekommen( mag man kaum glauben ).

      Jetzt mal ne Frage dazu.
      Das Pattern was ich habe,
      PHP-Code:
      preg_match('/function gesuchteFunktion(.*?){(.*?)}/ms',$string,$result); 
      sucht mir nun mine Funktion raus.
      Wie sage ich dem Pattern aber nun, dass falls im Rumpf der Funktion weitere {} Klammern stehen,
      er diese ignoriert und dich richtige Klammer wählt, die den Rumpf der Funktion schließt?

      Kommentar


      • #4
        Das ist ja ganz übles rumgehacke, da würde ich wohl eher code-dublikation in kauf nehmen und die funktion in ne extra datei nochmal speichern wie zu versuchen mittels regex ne funktion rauszuparsen und dann via evil eval() auszuführen.

        imho wären für das rausparsen regex eh das falsche, der tokenizer von php ist da eher geeignet, das wären aber wohl ein paar zeilen mehr.

        Wie bei xhtml, musst du mit dem versuch php mit regex zu parsen ernsthafte konsequenz einplanen:

        -> http://www.php.de/off-topic-diskussi...ex-parsen.html
        [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
        | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

        Kommentar


        • #5
          Zitat von tarzanhb Beitrag anzeigen
          Hi

          Danke!
          Die Idee war mir auch gekommen( mag man kaum glauben ).

          Jetzt mal ne Frage dazu.
          Das Pattern was ich habe,
          PHP-Code:
          preg_match('/function gesuchteFunktion(.*?){(.*?)}/ms',$string,$result); 
          sucht mir nun mine Funktion raus.
          Wie sage ich dem Pattern aber nun, dass falls im Rumpf der Funktion weitere {} Klammern stehen,
          er diese ignoriert und dich richtige Klammer wählt, die den Rumpf der Funktion schließt?
          PHP-Code:
          preg_match('/function gesuchteFunktion(.*?){(.*)}/ms',$string,$result); 
          dein .*? arbeitet "ungreedy" du willst aber greedy ( gierig ) d.h. einfach .* .
          "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

          Kommentar


          • #6
            robo47 hat absolut Recht. Soetwas ist auch nicht annähernd fortgeschritten.

            [MOD: Thread verschoben]
            "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

            Kommentar


            • #7
              Hmm
              Okay, eigentlich ging es mir nur darum, vllt. einen Weg zu finden wie es möglich wäre.
              @Destruction mit dem umstellen des greedy wäre es nicht getan.

              Trotzdem Danke

              Kommentar


              • #8
                Es wurden dir doch schon drei Lösungswege aufgezeigt:
                - Tokenizer
                - RegExp
                - Umstrukturierung

                @Destruction mit dem umstellen des greedy wäre es nicht getan.
                Formulier deine Vermutung doch mal aus, dann muss nicht ständig eine Nachfrage gestellt werden. Geht ja auch alles von deiner Zeit ab.
                "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

                Kommentar

                Lädt...
                X