wake-up-neo.com

einschließlich PHP-Datei von einem anderen Server mit PHP

Ich habe zwei PHP -Dateien auf verschiedenen Servern, eine bei http://www.mysite.com/main.php und die andere bei http://www.sample.com/includeThis.php.

Ich möchte die zweite Datei aus der ersten einschließen.

Der Inhalt der zweiten Datei sieht folgendermaßen aus:

<?php
$foo = "this is data from file one";

Und die erste Datei:

<?php
include "http://www.sample.com/includeThis.php";
echo $foo;

Gibt es eine Möglichkeit, dies zu tun?

25
SolidSnake

Nein, diese Einstellung ist in den meisten Webservern (php.ini) standardmäßig deaktiviert/nicht zulässig. Daher können Sie die include nicht verwenden, um die Dateien von einer entfernten Adresse für Sicherheitsgründe einzuschließen.

Wenn Sie weiterhin Inclusion von entfernten Dateien zulassen möchten, muss die Direktive allow_url_include in php.ini auf On gesetzt sein

Aber auch hier ist es aus sicherheitstechnischer Sicht eine schlechte Praxis; und so ist es in der Regel deaktiviert (ich habe es noch nie aktiviert gesehen)

Wenn Sie jedoch den Inhalt einer Remote-Datei lesen möchten, können Sie stattdessen die Funktion file_get_contents verwenden. ABER wird als zurückgegeben reiner HTML-Markup-Code, es wird keinen serverseitigen-Code geben.

33
Sarfraz

Nach dem Lesen Ihrer Kommentare - in denen Sie angeben, dass Sie dies als Kopierschutzmittel tun möchten - ist meine Antwort nachdrücklich, vergessen Sie es . So funktioniert der Kopierschutz nicht.

Das einzige, was Sie mit include() tun können, ist fetch-Quellcode von anderswo, um auf dem lokalen Interpreter interpretiert zu werden. Das ist kinderleicht zu knacken: Ein böswilliger Kunde müsste einfach den abgerufenen Code echo().

Die Remote-Ausführung des Remote-Skripts (auf Ihrem Server) hilft Ihnen nicht, da der Status dieses Skripts (Variablen, Funktionen ...) in dem Skript, in dem Sie es aufrufen, nicht vorhanden ist.

Sie haben folgende Möglichkeiten:

  • Kompilieren/Kodieren/Verschleiern des Skripts, möglicherweise ist ein bestimmtes PHP - Modul erforderlich, um es auszuführen (viele Fragen dazu zu SO)

  • Erstellen eines echten Web-Service (z. B. mit SOAP), der auf Ihrem Server ausgeführt wird und die angeforderten Vorgänge ausführt

Für das, was es wert ist, kaufe ich persönlich nicht und empfehle den Kunden nicht, verschlüsselte Skripte und Skripts zu kaufen, die "nach Hause telefonieren" müssen, um funktionieren zu können. Ich glaube daran, Ihre Produkte durch eine strenge Lizenzvereinbarung zu schützen (dies wird Geschäftskunden dazu bringen, Ihr Produkt zu kaufen, da die Risiken, sich beim Diebstahl erwischen zu lassen, zu teuer sind.) 

3
Pekka 웃

Ich frage mich, ob das OP jemals eine Lösung für sich gefunden hat. Soweit ich weiß, besteht die einzige Möglichkeit, dies zu erreichen, darin, alle Ihre Kundenkonten auf demselben Server zu haben wie die gewünschten Skripts. Ich habe etwas Ähnliches gemacht:

/path_to_myserver_root/httpdocs/clients/client01/wwwroot/scriptA.php /path_to_myserver_root/httpdocs/clients/client02/wwwroot/scriptA.php ETC ....

DANN: /Path_to_myserver_root/privatefiles/myapp/scriptB.php

wwwroot ist der Punkt, auf den jede Clientdomäne verweist.

scriptA.php hat etwas Geschäftslogik und enthält dann scriptB.php für seine Funktionen mit dem vollständigen Pfad oben:

required ('/ path_to_myserver_root/privatefiles/myapp/scriptB.php')

scriptB.php befindet sich in einem privaten geschützten Verzeichnis auf dem Server, auf das über http nicht zugegriffen werden kann und das von den Clients nicht durchsucht werden kann.

Nun, Sie wissen, meine Gründe dafür sind, die Konsistenz der Versionen über mehrere Konten hinweg aufrechtzuerhalten, nicht, um meiner Kundschaft proprietären magischen PHP-Code vorzuenthalten. Aber ich vermute, dass er zu diesem Zweck implementiert werden könnte.

Meh, YMMV.

2
antmeeks

Verwenden Sie file_get_contents, um die Datei zu öffnen, und hängen Sie sie wie folgt an die zweite Datei an:

$secondFile = file_get_contents('http://www.sample.com/includeThis.php');
file_put_contents('your_file', $secondFile, FILE_APPEND);

Dies funktioniert, wenn Sie es am Ende Ihrer Datei einfügen möchten. Dann machen Sie einfach einen Include in Ihre Datei.

Wie gesagt, dies ist, wie gesagt, eine riskante und gefährliche IMO, insbesondere wenn Sie sich nicht sicher sind, welche Inhalte darin enthalten sind.

Ihre_Datei muss auch ein tatsächlicher Serverpfad sein, keine URL.

1
SoLoGHoST

Wenn Sie versuchen, über Domains zu gehen, wie Sie es vorgeschlagen haben, fügen Sie eigentlich keine Datei hinzu, die bereits bereit ist - der Prozess ist anders. Die Maschine muss die Datei über http zurückholen, was bei der include-Anweisung nicht der Fall ist.

Wenn Sie sich für Shared Hosting entscheiden, ist PHP häufig so konfiguriert, dass Sie nicht außerhalb Ihrer eigenen Domäne gehen.

Wenn Sie sich nicht an diese Einschränkung halten, können Sie mit PHP eine Kopie der Datei vom anderen Server zurückkopieren und diese dann in Ihre Domäne aufnehmen. Ein anderer Ansatz könnte sein, ein kleines "Implementierungs" -Skript zu schreiben, das es überall kopiert, wo es immer sein muss, wenn Sie Änderungen vornehmen ...

Hoffe das hilft...

Martin

0
Martin Milan

benennen Sie die erste in .txt um
Überlegen Sie dann zweimal, ob Sie wirklich das domänenübergreifende Include benötigen

0