y compris le fichier php d'un autre serveur avec php

J'ai deux fichiers PHP situés sur des serveurs différents, l'un à http://www.mysite.com/main.php, l'autre à http://www.sample.com/includeThis.php.

Je veux inclure le deuxième fichier du premier.

Le contenu du second fichier ressemble à ceci:

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

Et le premier fichier:

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

Y a-t-il un moyen de le faire?

25
demandé sur NikiC 2010-05-02 11:41:49

6 réponses

Non, ce paramètre est désactivé/non autorisé par défaut dans la plupart des serveurs web (php.ini) vous ne pouvez donc pas utiliser le include pour inclure les fichiers d'une adresse distante pour des raisons de sécurité .

Si vous souhaitez autoriser inclusion de fichiers à distance, la directive allow_url_include doit être mis à On en php.ini

Mais encore une fois c'est une mauvaise pratique, d'un point de vue axé sur la sécurité ; et, donc, il est généralement désactivé (Je ne l'ai jamais vu activé, en fait)

Si vous voulez lire le contenu d'un fichier distant, vous pouvez utiliser file_get_contents Fonction à la place mais cela sera retourné en tant que code de balisage HTML pur, il n'y aura pas de codeCôté Serveur .

32
répondu Sarfraz 2010-05-02 07:51:46

Après avoir lu vos commentaires - dans lesquels vous déclarez que vous voulez le faire comme un moyen de protection contre la copie - ma réponse est emphatique, oubliez-le . Ce n'est pas ainsi que fonctionne la protection contre la copie.

La seule chose que vous pouvez faire en utilisant include() est récupérer le code source d'ailleurs pour être interprété sur l'interpréteur local. C'est enfantin facile à craquer: un client malveillant aurait juste à echo() le code récupéré.

Exécuter le script distant à distance (sur votre serveur) ne vous aidera pas, car l'état de ce script (variables, fonctions...) ne sera pas présent dans le script à partir duquel vous l'appelez.

Les options que vous avez sont:

  • Compiler / encoder / obscurcir le script, nécessitant éventuellement un module PHP spécifique pour l'exécuter (beaucoup de questions à ce sujet sur SO)

  • Création d'un service web réel (par exemple en utilisant SOAP) qui s'exécute sur votre serveur et effectue le des opérations

Pour ce que ça vaut, cependant, personnellement, je n'achète pas, ni ne recommande aux clients d'acheter, des scripts codés et des scripts qui doivent "téléphoner à la maison" pour travailler. Je crois en la protection de vos produits grâce à un accord de licence rigoureux (qui effraiera les clients professionnels à acheter votre produit, car les risques de se faire prendre en train de voler sont trop chers.)

3
répondu Pekka 웃 2010-08-08 13:26:20

Je me demande si L'OP a jamais trouvé une solution pour lui-même. Autant que je sache, la seule solution, ce serait d'avoir tous vos comptes clients sur le même serveur que les scripts que vous souhaitez inclure - j'ai fait quelque chose de similaire:

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

Alors: / path_to_myserver_root / privatefiles / myapp / scriptB.php

Wwwroot est où chaque points de domaine client.

ScriptA.php a une logique métier puis inclut scriptB.php pour ses fonctions avec le chemin complet ci-dessus:

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

ScriptB.php réside dans un répertoire privé protégé sur le serveur, inaccessible par http, et non traversable par les clients.

Maintenant, rappelez-vous, mes raisons de le faire est de maintenir la cohérence de la version sur plusieurs comptes, de ne pas retenir certains propriétaires code PHP magique de ma clientèle - mais je suppose qu'il pourrait être implémenté à cette fin.

Meh, YMMV.

2
répondu antmeeks 2012-05-24 03:57:27

Utiliser file_get_contents, pour ouvrir le fichier, ajouter à la deuxième fichier comme ceci:

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

Cela fonctionnera si vous voulez le mettre à la fin de votre fichier. Que de simplement faire une inclusion sur votre fichier.

Quoi qu'il en soit, comme je l'ai dit, C'est une OMI risquée et dangereuse, surtout si vous n'êtes pas sûr du contenu qu'elle contient.

En outre, your_file devra être un chemin de serveur réel, pas une URL.

1
répondu SoLoGHoST 2010-05-02 07:57:06

Lorsque vous essayez de parcourir les domaines comme vous l'avez suggéré, vous n'incluez pas réellement un fichier qui est assis là prêt à faire - le processus est différent. La machine doit ramener le fichier sur http, ce qui n'est pas ce que l'instruction include est.

Aussi, si vous êtes sur un hébergement partagé, PHP est souvent configuré pour vous empêcher de sortir de votre propre domaine.

Si vous n'êtes pas sous cette restriction, une solution pourrait être D'utiliser PHP pour copier une copie de le fichier de l'autre serveur, puis l'inclure une fois qu'il est assis dans votre domaine. Un autre apporach pourrait être d'écrire un petit script de "déploiement" qui le Copie partout où il doit être chaque fois que vous apportez des modifications...

J'espère que cela aide...

Martin

0
répondu Martin Milan 2010-05-02 07:49:27

Renommez le premier en .txt
alors réfléchissez à deux fois, Êtes-vous sûr que vous avez besoin d'include cross-domain

0
répondu Your Common Sense 2010-05-02 07:50:53