Ankündigung

Einklappen
Keine Ankündigung bisher.

Methodenaufruf, wobei die Klasse auf einem anderen Server liegt

Einklappen

Neue Werbung 2019

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

  • Methodenaufruf, wobei die Klasse auf einem anderen Server liegt

    Hallo.
    Ich habe eine PHP Datei auf dem Webspace A liegen. in dieser Datei(serverConfig.php) ist eine Klasse.
    Ich möchte gerne auf diese Klasse zugreifen, was im Grunde kein Problem ist... Problem ist nur, das die Datei, von der ich die Klasse aufrufen will, auf einem anderen Webspace liegt.
    Beispiel: testi.php (Webspace B)
    PHP-Code:
    <?php 
    include "http://www.XXX.net/coverapi/serverconfig.php";
    $artist cd_api::get_artist_url('Die Ärzte');
    echo 
    $artist;

    ?>
    (URL wurde zensiert)

    Wenn ich diese Abfrage mache, bekomme ich ein Include Fehler

    Code:
    Warning: include(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in C:\xampp\htdocs\test\apineu\testi.php on line 2
    
    Warning: include(http://www.next.23fm.net/coverapi/serverconfig.php): failed to open stream: no suitable wrapper could be found in C:\xampp\htdocs\test\apineu\testi.php on line 2
    
    Warning: include(): Failed opening 'http://www.next.23fm.net/coverapi/serverconfig.php' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\test\apineu\testi.php on line 2
    
    Fatal error: Class 'cd_api' not found in C:\xampp\htdocs\test\apineu\testi.php on line 3
    Scheinbar hat es mein Webspace Anbieter sowelche Anfragen Blockiert... gibt es dennoch eine Möglichkeit auf diese Datei auf Webspace A zuzugreifen?

    Gruß
    Sattel

  • #2
    wenn es blockiert ist, hat das bestimmt seinen Grund, weil es wirklich nicht so besonders sicher ist.
    Wenn du Zugriff auf den fremnden Webspace hast, kannst du was mit eval machen, aber ich würd die php einfach importieren, ist einfach sicherer.
    Fatal Error: Windows wird gestartet

    Wie administriert man ein Netzwerk: Beispiel

    Kommentar


    • #3
      Das Problem: Ich muss leider so darauf zugreifen. Wie oben zusehen ist, bastle ich grad an einer CD Cover Api (mit verwendung von der Lastfm API).

      Kommentar


      • #4
        Hallo Sattelpunkt,

        wäre es nicht möglich, die API ein wenig umzugestalten? Im Grunde sollte man per HTTP keineswegs eine PHP Datei inkludieren. Hier wäre bspw. eine Erweiterung per GET Parameter / ggf. per POST sicherer.

        Den Request selbst könntest du an die URL:
        http://www.XXX.net/coverapi/serverco...tist=DieAerzte

        per CURL REQUEST machen. Die Response kannst du dann relativ leicht parsen und ggf. weiter verarbeiten / ausgeben.

        Das wäre der naheliegendere Sinn einer API, wenn ich das so sagen darf..

        Kommentar


        • #5
          Vielen danke für die ANtwort Tyralcori. Leider ist dieses CURL REQUEST komplettes Neuland für mich .. Werde mich da morgen mal ansetzten. danke nochmal

          Gruß
          Sattelpunkt

          Kommentar


          • #6
            Hallo Sattelpunkt,

            ich habe dir mal ein kleines Snippet zusammen gestellt. Ich hoffe, es hilft dir morgen.

            PHP-Code:
            <?php
            // Name des Kuenstlers / Band
            $artistName 'Die Ärzte';

            // Erstelle Curl Objekt
            $curlObject curl_init();

            // Setze die URL
            curl_setopt$curlObjectCURLOPT_URL"http://DEINE_URL.net/coverapi/serverconfig.php");

            // Erlaubt es, nach dem Skript bei einem moeglichen Redirect weitergeleitet zu werden
            curl_setopt$curlObjectCURLOPT_FOLLOWLOCATIONTRUE);

            // Signalisiert dem Curl Object, das es POST Values gibt
            curl_setopt($curlObjectCURLOPT_POSTTRUE);

            // Setze die POST Values 
            curl_setopt($curlObjectCURLOPT_POSTFIELDS"artistName=$artistName");

            // Darf eine Response empfangen
            curl_setopt($curlObjectCURLOPT_RETURNTRANSFERtrue);

            // Fuehre den CURL Request aus
            $curlResponse curl_exec ($curlObject);

            // Gebe die Response aus
            print_r($curlResponse);
            Im Grunde müsstest du jetzt in einer API, also dem FILE welches angesprochen wird, auf $_POST['artistName'] prüfen. Wenn dies soweit gegeben ist, kann die eigentlich vorhandene Logik in der API ausgeführt und zurückgegeben werden.

            Muster:
            PHP-Code:
            <?php
            // Pruefe auf die Post Values (bzw. den artistName)
            if(isset($_POST) && isset($_POST['artistName'])) {
            // Per echo erfolgt die Ausgabe
            echo $_POST['artistName'];
            }
            Der Curl Response enthält nun den übergeben Post Value.

            Ich wünsche dir viel Erfolg dabei.

            Grüße,
            Tyralcori

            Kommentar


            • #7
              Zitat von Sattelpunkt Beitrag anzeigen
              [...]
              PHP-Code:
              <?php 
              include "http://example.org/coverapi/serverconfig.php";
              $artist cd_api::get_artist_url('Die Ärzte');
              echo 
              $artist;

              ?>
              [...]
              Scheinbar hat es mein Webspace Anbieter sowelche Anfragen Blockiert... gibt es dennoch eine Möglichkeit auf diese Datei auf Webspace A zuzugreifen?

              [...]
              Vorneweg einmal: Als Demo-URL gibt es example.org, die von dir gewählte (mit den 3 X) steht oftmals für etwas anderes als Beispiel - obwohl es da auch etwas zu sehen gibt ...

              Und etwas anderes: Du weisst, dass bei einem solchen include (mit dem HTTP) ein normaler HTTP-Request gestartet wird? Zu 100% erhälst du also das, was die serverconfig.php ausgibt. Und das ist bitte hoffentlich nicht irgendein PHP-Code.

              Du könntest mittels (S)FTP(S) zugreifen, dann kannst du dir die originale PHP-Datei holen. Wobei ich dir in jedem Falle von so einem Skript abrate. Das ist so etwas von unperformant.
              [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

              Kommentar


              • #8
                Sowas
                PHP-Code:
                <?php  
                include "http://www.XXX.net/coverapi/serverconfig.php";
                funktioniert nicht, weder von fremden Webspace noch von den eigenen!

                Warum?
                Beim Zugriff per http über den Webserver wird nicht wie gewünscht PHP-Code geliefert,
                sondern das geparste Ergebnis, soweit überhaupt etwas generiert wird.

                Edit: etwas zu langsam, ChristianK war schneller.

                Kommentar


                • #9
                  Zitat von ChristianK Beitrag anzeigen
                  Vorneweg einmal: Als Demo-URL gibt es example.org, die von dir gewählte (mit den 3 X) steht oftmals für etwas anderes als Beispiel - obwohl es da auch etwas zu sehen gibt ...

                  Und etwas anderes: Du weisst, dass bei einem solchen include (mit dem HTTP) ein normaler HTTP-Request gestartet wird? Zu 100% erhälst du also das, was die serverconfig.php ausgibt. Und das ist bitte hoffentlich nicht irgendein PHP-Code.

                  Du könntest mittels (S)FTP(S) zugreifen, dann kannst du dir die originale PHP-Datei holen. Wobei ich dir in jedem Falle von so einem Skript abrate. Das ist so etwas von unperformant.
                  Und was würde gegen die Erweiterung per GET / POST Parameter sprechen (Siehe mein Beitrag)? Generell sollte man auf KEINEN Fall, egal welchen Grund du hast, PHP Dateien per (S-)FTP / HTTP(S) / oder SSH (wobei dies auch nichts anderes als ein SFTP ist) übertragen und ausführen.

                  Kommentar


                  • #10
                    Dagegen spricht seine Aussage:

                    Zitat von TE
                    Ich habe eine PHP Datei auf dem Webspace A liegen. in dieser Datei(serverConfig.php) ist eine Klasse.
                    Ich möchte gerne auf diese Klasse zugreifen, [...]
                    Für mich liest sich das so, dass er die Klasse A auf dem Webspace A vom Webspace B aus ausführen will, wobei sich die Klasse A in den Kontext des Webspace B integriert.
                    Falls ich das falsch lese, dann ist dein Vorschlag ok.

                    Allerdings sehe ich die Integration von Drittsourcen über SFTP bzw. SCP nicht als problematisch an. Wenn diese Quellen aus geprüften Datenträgern kommen ist dies nichts anderes als wenn sie lokal liegen. Wenn beide Server (A und B) mir gehören kann ich meinem Quellcode ja vertrauen. Ob da jetzt ein Anwendungsfall besteht oder nicht ist eine andere Frage.
                    [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                    Kommentar


                    • #11
                      Zitat von ChristianK Beitrag anzeigen
                      Dagegen spricht seine Aussage:



                      Für mich liest sich das so, dass er die Klasse A auf dem Webspace A vom Webspace B aus ausführen will, wobei sich die Klasse A in den Kontext des Webspace B integriert.
                      Falls ich das falsch lese, dann ist dein Vorschlag ok.

                      Allerdings sehe ich die Integration von Drittsourcen über SFTP bzw. SCP nicht als problematisch an. Wenn diese Quellen aus geprüften Datenträgern kommen ist dies nichts anderes als wenn sie lokal liegen. Wenn beide Server (A und B) mir gehören kann ich meinem Quellcode ja vertrauen. Ob da jetzt ein Anwendungsfall besteht oder nicht ist eine andere Frage.
                      Hauptsächlich ist hier das Ziel, sofern ich es ebenso nicht falsch verstanden habe, die API auf "biegen und brechen" zu bedienen, unabhänig der Tatsache eines includes / require /etc. - daher der pragmatische Vorschlag des CURLS.

                      Ich war nur ein wenig erstaunt, ein PHP File, jenes ausgeführt werden soll, per SCP / SFTP vorab runtergeladen werden soll. Angenommen, ich hätte täglich, sofern mir das rumspinnen erlaubt sei, 100.000 Aufrufe. Jedes Mal würde dieses Skript dann, wenn man nicht prüfen würde, ob die Datei bereits existiert / selbe Checksum hätte, es runtergeladen werde. Wie du selbst sagtest, wäre das ziemlich schlecht im Sinne der Performance / Response Zeit.

                      Dann könnte ich die betreffende PHP Datei auch gleich auf Github einchecken, und auf die PHP Datei im Blob / Raw Format einen include / require starten, da ich dann anstelle der Execution von PHP die Raw File hätte, und somit ausführen könnte.

                      Aber egal welche Methode man hier nehmen würde, wäre es aus meiner Sicht(!) bei einer API Umsetzung nicht ziehlführend sein (bitte nicht böse verstehen )

                      Kommentar

                      Lädt...
                      X